hritikswho.xyz/projects/uplyfox
All projectsIndependent · Live · beta

Founder & product engineer · 2026

UplyFox

A job-application copilot that fills forms, and never submits without you.

UplyFox turns a résumé into a grounded candidate profile and a reusable answer library, then helps fill real job applications through its Chrome extension. Filling is automated; submitting needs an explicit, one-time approval of the exact form you reviewed.

190 unit tests
Grounded answersChrome MV3 companionHash-bound approval
uply.foxea.xyzSource
01

What it does

  • Email OTP sign-in with controlled beta access
  • Résumé import (PDF, TXT, Markdown) with layout-aware extraction and optional AI structuring
  • Profile enrichment from GitHub, portfolio links and a spoken narrative with server transcription
  • Reusable answer library covering 47 common application questions
  • Job matching against your profile, shown on the job page
  • Application tracker: saved, applying, applied, assessment, interview, offer, rejected, withdrawn
  • Funnel summary, stale-application insights, notes, dates and checklists
02

How it works

  1. 01

    Import

    Upload a résumé. Text is extracted with layout awareness and every field keeps its provenance, so the résumé always wins conflicts.

  2. 02

    Enrich

    GitHub, portfolio links and a voice narrative can fill gaps. They never silently overwrite the résumé.

  3. 03

    Resolve answers

    Each question goes through a fixed order: stop on legal or sensitive prompts, keep what the page already has, use saved answers, derive from the profile, and only then ask a model for open-ended writing.

  4. 04

    Fill with the extension

    The extension inspects the form, writes verified values and stops on anything it cannot answer honestly.

  5. 05

    Approve and track

    You approve one exact snapshot. The application and its outcome land in the tracker.

03

Architecture

Web app

Next.js 15 App Router with authenticated routes for AI, parsing, enrichment and transcription. Provider keys never leave the server.

Data

Supabase Auth, PostgreSQL with row-level security across 22 tables and 15 migrations, and private Storage buckets for résumés and evidence.

Shared domain package

TypeScript logic used by both apps: profile merge and provenance, answer resolution, job matching, the form graph and approval state.

AI

Custom clients: Gemini for generation, Mistral as fallback, a Voxtral-compatible transcription path. Output is fence-stripped, parsed and shape-validated.

04

Engineering decisions

Retrieval without pretending

Grounding uses lexical and intent matching with ranking, character budgets and gap reporting. It is not sold as vector RAG.

Untrusted page text

Selected text and job descriptions are treated as context, never as facts about the candidate, and are filtered for prompt injection.

Security by default

Server-side user checks, RLS, private buckets, hashed beta codes, SSRF guards on link enrichment and redaction before anything is stored.

05

Testing & evaluation

  • 190 named unit tests across the extension (149) and web app (41) with Vitest
  • CI on Node 20 for type checks, tests and builds of both apps
  • Deterministic answer resolution is unit tested independently of any model
06

Stack

Next.js 15React 19TypeScriptSupabaseGeminiMistralVoxtralVitest
07

Honest limits

Broad end-to-end validation on real ATS portals is still pending.

Next projectAI Open Studio