Case study · Career guidance
CareerGuide AI
Career matching for university students where the score is reproducible. AI can advise; it never decides the number.
The scoring rule
A fixed, version-controlled rules engine produces every score.
- 45Skills
- 25Interests
- 15Academic / major relevance
- 15Career-goal relevance
Weights shift only when fresh market evidence exists — and AI or live web search never set a score directly.
Recommendations never change silently
Every recommendation version is immutable. A new score means an explicit re-score, not an overwrite.
AI beside the engine, not inside it
- Optional AI career advice alongside the deterministic matching.
- Schema-constrained JSON from queued, worker-executed jobs, with an authenticated SSE progress stream.
- Explicit provider selection — mock, OpenAI, Gemini, Ollama. Production startup fails closed if the selected provider has no key.
Checked before release
Ruff, pytest, alembic check, a production smoke script, and frontend lint, typecheck and build — plus a written checklist confirming one student cannot read another student's profile, recommendation or PDF.
Real screens
Captured from a local build of the web app, unedited.


Architecture
FastAPI, SQLAlchemy 2, Alembic, Pydantic Settings, JWT and ReportLab PDF export; React 19, Vite, TypeScript, TanStack Query, React Hook Form and Zod.
Stack
React 19 · Vite · TypeScript · Tailwind CSS 4 · FastAPI · SQLAlchemy 2 · Alembic · ReportLab · PostgreSQL
Source
Private repository

