The problem
Job applications involve repeated context switching: reading a posting, identifying requirements, comparing it against different résumés, tailoring the wording, and remembering what was submitted.
JobHelperGuru brings those steps into one workspace so job analysis, résumé matching, tailoring, and application tracking share the same context.
What I built
I designed and built the React frontend, Python/FastAPI backend, OpenAI-compatible model integration, multi-résumé matching workflow, and application tracking system. The project also includes authentication, persistent application data, résumé document storage, Excel export, and an offline heuristic fallback path for core job-analysis features.
Application workflow
Users can paste a job description or submit a supported job-posting URL, review the extracted qualifications and ATS keywords, compare stored résumés, revise individual bullets, and then track the application without leaving the workspace.
Cloud and local models use an OpenAI-compatible interface. When no model is configured, an offline heuristic fallback still supports pasted-job analysis and keyword matching.
Architecture
- React: job analysis, résumé inspection, settings, and table or Kanban application tracking.
- FastAPI: authenticated application endpoints, job-analysis workflows, résumé matching, tracking operations, and structured Pydantic response models.
- AI engine + offline fallback: structured job analysis, résumé ranking, and evidence-aware suggestions, with a heuristic path that preserves core functionality when no model is configured.
- PostgreSQL + Cloudflare R2: persistent application records and résumé document storage, with local development alternatives.
- pytest: automated testing across API routes, authentication, parsing, data processing, and application logic.
- openpyxl: spreadsheet export for tracked applications.
Evidence-aware AI
Backed by résumé or project evidence
Requires user confirmation before use
Uses placeholders until a real value is supplied
The main design constraint was preventing AI-generated résumé suggestions from silently becoming fabricated experience.
JobHelperGuru separates supported claims from unverified skills and metric placeholders. Missing keywords can still be surfaced and suggested as hypothetical rewrites, but assumptions remain visible so the user can confirm them before using the content.
Model responses and scraped job pages are variable inputs, so parsing, validation, and fallback paths keep the workflow usable when a provider response cannot be interpreted or no external model is configured.
Result and scope
JobHelperGuru combines job analysis, multi-résumé matching, bullet revision, application tracking, and spreadsheet export in one application. The project demonstrates applied AI embedded inside ordinary product workflows rather than treated as a standalone chatbot.
Résumé match percentages are application heuristics, not validated hiring predictions or guarantees of ATS compatibility. AI-generated suggestions require user review, and URL ingestion depends on source-site accessibility.
What the project taught me
The biggest lesson was that AI features need explicit contracts, visible assumptions, and reliable failure paths. Generated text is most useful when the application makes clear which claims are supported, which require confirmation, and what happens when the model is unavailable.
The project also reinforced the value of schema-constrained responses, fallback logic, persistent workflow state, and designing AI features as part of a complete product rather than as isolated prompts.