AI-powered job application tracker that turns a pasted job posting into a structured, trackable application — complete with an AI-generated fit assessment against your resume.
Built to solve a real problem from my own job search: manually re-typing job postings into a spreadsheet, then guessing whether a role is actually worth applying to, is tedious and error-prone. ApplyFlow automates both.
Paste JD → AI extraction. The system parses unstructured job descriptions into a structured schema, capturing role requirements, responsibilities, and metadata.

AI fit analysis evaluates the extracted job requirements against your stored resume, generating a targeted fit score and highlighting specific strengths and gaps.

Review/save → pipeline tracking. A centralized dashboard visualizes application states across stages, keeping the job search organized.

Optional follow-up reminders can be toggled per application, ensuring you never miss a beat when waiting to hear back from recruiters.

The system is backed by a PostgreSQL database with Row Level Security enforcing tenant isolation. Core tables include applications (storing the extracted JD data), resumes (for the fit analysis baseline), interview_stages (tracking pipeline progression), and ai_usage_tracking (for quota management).
rather than letting a single Gemini outage break the extraction flow, the app maintains an ordered fallback list of models, persists temporary blocks to the database (shared across concurrent requests), and returns clean, user-facing error messages instead of raw provider errors.
extraction and resume matching don't depend on each other, so both requests fire concurrently and resolve to the same model where possible — cutting perceived wait time roughly in half.
Row Level Security (RLS) is enforced strictly at the database layer (scoping all access to auth.uid()), while server-side API routes explicitly re-scope user queries as a secondary defense layer against accidental cross-tenant data leaks.