Case study · AI job-search workspace
AI Job Application Platform
Connects job discovery, resume intelligence, application tracking, and reviewed browser workflows in one private workspace
Context
A private, work-in-progress job-search workspace built as a Next.js dashboard, FastAPI backend, and Manifest V3 browser extension. The system brings job ingestion, deduplication, resume parsing, embedding-based retrieval and matching, application tracking, cover-letter generation, interview preparation, and browser-assisted application workflows into one place. Background processing is handled through Celery and Redis, while the backend uses async SQLAlchemy, Alembic, PostgreSQL with pgvector, OpenAI embeddings, and a fallback-capable OpenAI-compatible LLM client.
Role and scope
Independent full-stack project: designed and built the web dashboard, async API, background processing workflows, AI-assisted resume features, application CRM, and Chrome extension.
Challenge
Job searching often spreads context across job boards, resumes, notes, application portals, and follow-up tasks. The goal was to create one workspace that could turn a job listing into a grounded match, a tailored application plan, and a trackable application record without losing control of what gets submitted.
Approach: Built a dashboard for jobs, matches, applications, resumes, preferences, and readiness actions; added background ingestion and ranking workflows; and created a Chrome extension that detects supported job pages, imports job details, records application events, and previews approved autofill mappings before any form interaction. The AI layer combines OpenAI embeddings in pgvector, selective cached LLM analysis, and request-local evidence catalogs for retrieval-grounded resume tailoring and document generation. A Playwright extension E2E spec is present for browser coverage.
Key decisions and trade-offs
- Separated the dashboard, API, and browser extension so sensitive application actions remain explicit and reviewable at the browser boundary.
- Used asynchronous jobs for scraping, parsing, embeddings, ranking, and maintenance so long-running work does not block the main workspace.
- Kept job ingestion and matching explainable through normalized records, deduplication, match explanations, and skills-gap summaries.
- Made autofill preview-based and event-logged so the user retains control over application data before it reaches a third-party form.
Outcome
- Implemented one workspace for job discovery, resume intelligence, application tracking, and interview preparation.
- Added a browser extension workflow for supported job-page detection, import, application-event tracking, and reviewed autofill mappings.
- Built background processing and vector search foundations for ranking jobs against a structured resume profile.
- Added automated tests for resume extraction, matching, tailoring, and extension behavior.
Stack
Stack used in this system · Independent full-stack project
Architecture stages
- 01Job ingestion
- 02Resume profile
- 03Match ranking
- 04Application CRM
- 05Embedding retrieval + grounding
- 06LLM generation and evaluation
- 07Browser extension
- 08Background workers