- FastAPI backend with JWT auth, roles (admin/moderator/user) - PDF upload (up to 500MB) with streaming, PyMuPDF text extraction - ChromaDB vectorization per page with metadata - LiteLLM AI question extraction from PDF (not generation) - Image extraction from PDF pages, graceful fallback - Quiz modes: timed (countdown timer) + learning (answers shown inline) - Page-by-page question navigation with dot navigator - TTS endpoint using LiteLLM (Google Vertex / OpenAI voices) - Admin dashboard: AI model management per task, user role management - Moderator role: upload PDFs, create sections, generate quizzes - Spaced repetition reminders via SMTP email (SM-2 intervals) - APScheduler daily reminder jobs - Celery + Redis for background PDF processing - React frontend with all pages - Docker Compose deployment (nginx + backend + celery + redis) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
53 lines
1 KiB
YAML
53 lines
1 KiB
YAML
version: "3.8"
|
|
|
|
services:
|
|
frontend:
|
|
build: ./frontend
|
|
ports:
|
|
- "80:80"
|
|
depends_on:
|
|
- backend
|
|
restart: unless-stopped
|
|
|
|
backend:
|
|
build: ./backend
|
|
ports:
|
|
- "8000:8000"
|
|
env_file:
|
|
- ./backend/.env
|
|
volumes:
|
|
- uploads_data:/app/uploads
|
|
- chroma_data:/app/chroma_data
|
|
- sqlite_data:/app/data
|
|
environment:
|
|
- DATABASE_URL=sqlite:////app/data/quiz.db
|
|
depends_on:
|
|
- redis
|
|
restart: unless-stopped
|
|
|
|
celery:
|
|
build: ./backend
|
|
command: celery -A app.tasks worker --loglevel=info --concurrency=2
|
|
env_file:
|
|
- ./backend/.env
|
|
volumes:
|
|
- uploads_data:/app/uploads
|
|
- chroma_data:/app/chroma_data
|
|
- sqlite_data:/app/data
|
|
environment:
|
|
- DATABASE_URL=sqlite:////app/data/quiz.db
|
|
depends_on:
|
|
- redis
|
|
restart: unless-stopped
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
volumes:
|
|
- redis_data:/data
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
uploads_data:
|
|
chroma_data:
|
|
sqlite_data:
|
|
redis_data:
|