# SprintQuiz Internal Learning & Development quiz platform for Credit Fair. ## Quick Start ```bash # 1. Copy env and fill in Entra ID credentials cp .env.example .env # Edit .env with real values for ENTRA_TENANT_ID, ENTRA_CLIENT_ID, ENTRA_CLIENT_SECRET # 2. Start all services docker-compose up -d # 3. Run migrations docker-compose exec backend alembic upgrade head # 4. Access # Frontend: http://localhost:8080 # API docs: http://localhost:8000/api/docs # Health: http://localhost:8000/health ``` ## Architecture ``` sprintquiz/ ├── backend/ # FastAPI + Celery workers │ ├── app/ │ │ ├── api/ # Dependencies (auth, RBAC) │ │ ├── core/ # Config, security, logging, RBAC, exceptions │ │ ├── db/ # SQLAlchemy engine/session │ │ ├── models/ # All SQLAlchemy models │ │ ├── schemas/ # Pydantic request/response schemas │ │ ├── services/ # Audit logging service │ │ ├── routers/ # Auth, users, documents, quizzes, assignments, reports, signoff │ │ ├── workers/ # Celery tasks (doc parsing, AI gen, leaderboard) │ │ └── main.py # FastAPI app entry │ ├── alembic/ # Migrations │ └── tests/ # Pytest tests ├── frontend/ # Flutter web app │ └── lib/ │ ├── core/ # Config, theme, network, auth │ └── features/ # auth, dashboard, quizzes, reports, signoff ├── docker-compose.yml # PostgreSQL + Redis + backend + worker + frontend └── .github/workflows/ # CI (lint, test, build) ``` ## Tech Stack - **Frontend**: Flutter web - **Backend**: Python FastAPI (modular monolith) - **Database**: PostgreSQL - **Cache/Jobs**: Redis + Celery - **Auth**: Microsoft Entra ID (OIDC) - **AI**: OpenAI-compatible API for MCQ generation - **Deployment**: Docker ## API Endpoints See `http://localhost:8000/api/docs` for interactive docs. ## License Internal — Credit Fair