AI Career Intelligence Platform
PrepForge
A career intelligence and interview preparation platform: resume and job description analysis, per-job skill gaps, practice, mock interviews and job discovery, with a provider-agnostic LLM gateway.
- Type
- Personal
- Availability
- Private repository, in active development. No public demo yet.
Overview
PrepForge is a job-focused career preparation platform. Each job a candidate targets becomes a preparation workspace: the resume and job description are analysed, skill gaps feed a personal plan, and practice, skill checks and mock interviews update a per-job Skill Intelligence record that decides the next best action.
Problem
Interview preparation is usually generic: question banks and chatbots that don't know which job you are preparing for or what you already know. Candidates can't tell which gaps matter for a specific role, and practice doesn't feed back into what to study next.
Solution
A continuous, job-specific loop: analysis → skill intelligence → personalised plan → learn → practice → verification → scenario → virtual interview → evaluation → next best action. Every feature reads from and writes evidence to the same per-job skill record, so preparation adapts as the candidate improves.
What exists today
- Implemented
Resume (PDF/DOCX) and job description analysis
Deterministic skill taxonomy and alias matching
- Implemented
Skill gap identification and per-job Skill Intelligence
- Implemented
Question bank, practice, skill checks and progress
- Implemented
Text virtual interviews with evaluation
- Implemented
Job discovery from public job boards
Greenhouse, Lever, Ashby, Adzuna and career-page providers
- Implemented
Resume builder with PDF/DOCX export
- Implemented
Provider-agnostic LLM gateway
Gemini, OpenAI, NVIDIA and Groq adapters with fallbacks
- Experimental
AI-assisted analysis review
Optional step behind a feature flag
- Experimental
Voice interviews
Built behind a flag; not yet tried against a real provider
- Planned
RAG over learning content
- Planned
Public launch
Email provider, CSP and data export come first
Architecture
Client
- Next.js App Router
- React + TypeScript
- Tailwind CSS
API
- FastAPI (routes → services → models)
- JWT auth + rate limits
- Admin APIs
Domain services
- Analysis engine
- Skill Intelligence
- Interviews & evaluation
- Job discovery
Async & AI
- Durable analysis queue + worker
- LLM gateway (policy, fallbacks, quotas)
Data
- PostgreSQL
- Alembic migrations
- Daily backups
Technology stack
- Frontend
- Next.js
- React
- TypeScript
- Tailwind CSS
- Backend
- Python
- FastAPI
- SQLAlchemy
- Alembic
- Argon2
- JWT
- Data
- PostgreSQL
- AI
- Gemini
- OpenAI
- NVIDIA API catalog
- Groq
- Versioned prompt templates
- Delivery
- Docker
- Docker Compose
- GitHub Actions
- Sentry-compatible error reporting
My contribution
- Sole designer and developer: product design, frontend, backend, data model, AI integration and deployment setup.
- Designed the per-job Skill Intelligence model that connects analysis, practice, checks and interviews.
- Built the LLM gateway so features never import a provider SDK and providers can be swapped or chained as fallbacks.
- Built a separate evaluation harness (prepforge-evals) that tests the analysis API against versioned synthetic datasets.
Engineering challenges
Honest evidence
Practice and quiz results are evidence, not proof. Confidence only rises on first attempts, and drafts, mock AI output and self-reviews never count as evidence.
Reliable AI on free tiers
Provider rate limits and outages are normal. The gateway adds a circuit breaker, per-model quotas tracked in Postgres and ordered fallbacks after timeouts, 429s and 5xx errors.
Long-running analysis
Analyses run on a durable Postgres-backed queue with leases, retries and heartbeats, so a crashed worker doesn't lose work and any number of workers can run side by side.
Design decisions
- Deterministic skill matching first, AI as an optional review step
- Results are explainable and testable, and the product doesn't claim semantic understanding it doesn't have.
- FastAPI + PostgreSQL instead of a backend-as-a-service
- A real backend from the start, fewer moving parts, and the job queue lives in the same database.
- Store extracted resume text, drop the original file
- No private files to secure and no object storage until a feature needs it.
- Free-only AI policy by default
- Only providers verified as free are used, and providers that train on prompts never receive a person's text.
Security
- Passwords hashed with Argon2; server-side token revocation on logout and password change.
- Sign-in rate limits stored in Postgres (email hashes only), so they hold across processes and restarts.
- Ownership enforced on every user-owned lookup; another user's id returns 404, and a test walks every route for auth and admin gates.
- Production start-up refuses weak JWT secrets, default database passwords and non-https CORS origins, and hides the API docs.
Scalability
- The API is stateless and runs any number of processes behind an HTTPS proxy.
- Analysis workers scale horizontally and finish the current run on SIGTERM.
- Migrations are written to work with the previous API version during a deploy.
- Liveness and readiness health checks; readiness verifies the database and migration head.
Testing approach
- Pytest suite for the backend and Vitest for the frontend, run in GitHub Actions with lint and a production build.
- CI checks there is exactly one Alembic migration head.
- prepforge-evals: an external harness that calls PrepForge over HTTP, compares answers with versioned synthetic golden datasets and blocks regressions against a committed baseline per engine version.
Results and lessons
- Writing down what is built, partly built and not started (an HLD review) kept the roadmap honest.
- An evaluation baseline exposed real gaps: job-description skills the taxonomy didn't know were never reported missing, which led to a taxonomy pass.
Source and demo
Private repository, in active development. No public demo yet. Happy to walk through the code in an interview.
Next case study
PrepForge Academic Hub