# Tayari β AI Interview Practice Platform
A monorepo: a production FastAPI backend (this root) and a Next.js frontend
(`frontoffice/`), wired together for local dev behind a single
port. Bilingual (EN/SW), aimed at students practicing for job interviews.
## π What's built
**Backend** (`app/`) β the full API is implemented and tested:
| Area | Endpoints | Docs |
| ----------------- | ---------------------------------------------------------------------------- | ---- |
| Auth & users | register / login / refresh / me, `PUT /users/me`, `/users/me/stats` | backend_thomas.md |
| Sessions | full CRUD, user-scoped, `overall_score` computed on completion | backend_thomas.md |
| Questions & answers | AI question generation, multipart answer upload (`202` + background pipeline), polling, re-record | ai_pipeline_elia.md |
| Feedback | per-answer feedback and session-level aggregation | ai_pipeline_elia.md |
| Resumes | CRUD, AI optimisation with an accept/reject diff, PDF generation | resumes_brian.md |
| Analytics | `/users/me/analytics` β category breakdown, trend, delivery averages, themes | analytics_aloyce.md |
**Frontend** (`frontoffice/`) β every screen of the Tayari design, wired to the
API: landing, login/register, dashboard, session setup, the camera interview
flow with live processing states, session history and detail, the split-view
resume builder, and profile. Bilingual EN/SW throughout.
See frontend_hadija.md.
**Running without API keys.** With no `OPENAI_API_KEY` the AI services fall back
to deterministic local generators, and with no `S3_BUCKET` set uploads go
to `MEDIA_ROOT` on disk β so the whole record β analyse β feedback loop works on
a laptop with nothing configured. Set the keys for real questions, transcripts
and coaching. See deployment.md.
**Dev tooling:** on β¦