Academic result ingestion and query platform built with FastAPI, PostgreSQL, Redis, MinIO, and a vanilla HTML/JS frontend.
It supports:
- Gmail OAuth and IMAP-based email sync
- email and attachment processing pipelines
- manual admin uploads for result sheets
- structured student/result storage in PostgreSQL
- student lookup, report export, and AI-assisted query endpoints
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-api.txt
pip install -e ".[dev]"docker compose -f docker/docker-compose.infra.yml up -dpsql -h localhost -p 5434 -U acadextract -d acadextract -f schemas/001_core_schema.sql
psql -h localhost -p 5434 -U acadextract -d acadextract -f schemas/002_app_partitions.sqlAdjust host, port, user, and password to match your .env.
Core values are loaded from .env.
For Gmail OAuth, place Google credentials at:
config/secrets/credentials.json
.\.venv\Scripts\python.exe -m uvicorn src.api.app:app --host 127.0.0.1 --port 8002 --reloadOpen:
http://127.0.0.1:8002
.\.venv\Scripts\python.exe -m pytest -qGET /healthzGET /readyzPOST /api/v1/syncGET /api/v1/sync/emailsPOST /api/v1/pipeline/runGET /api/v1/pipeline/statusPOST /api/v1/admin/uploadGET /api/v1/student/{usn}POST /api/v1/queryPOST /api/v1/chat
- The frontend is plain HTML/CSS/JS, not React or Next.js.
- PostgreSQL is the source of truth for academic records.
- Redis is used for dedup, queue support, and pipeline state.
- MinIO is the active default object storage backend.
- Sensitive control-plane routes can be protected by setting
APP_API_KEYin.env.