Core Dependencies
Everything here comes from backend/pyproject.toml, managed with uv (uv sync installs all of it). You don’t need to know every package deeply — just what to blame when something breaks.
Web framework & validation
Section titled “Web framework & validation”| Package | What it does |
|---|---|
fastapi |
The web framework — turns your Python functions into HTTP endpoints |
pydantic |
Validates request/response data against the shapes in models.py |
pydantic-settings |
Reads .env into the settings object used everywhere |
python-multipart |
Parses form data — needed for the login endpoint |
email-validator |
Validates any field typed as an email address |
Database & auth
Section titled “Database & auth”| Package | What it does |
|---|---|
sqlmodel |
The ORM — combines Pydantic (validation) and SQLAlchemy (database) into one model class |
psycopg |
The actual PostgreSQL driver underneath SQLModel |
alembic |
Generates and runs database migrations |
pyjwt |
Creates and verifies the JWT tokens used for login sessions |
pwdlib (argon2, bcrypt) |
Hashes passwords — never stores them as plain text |
Email & reliability
Section titled “Email & reliability”| Package | What it does |
|---|---|
emails + jinja2 |
Sends templated emails (password reset) |
tenacity |
Retry logic — used to wait for the database to be ready on startup |
httpx |
Async HTTP client, mainly used in tests |
Observability
Section titled “Observability”| Package | What it does |
|---|---|
sentry-sdk |
Error tracking — inactive unless you set SENTRY_DSN, and disabled locally either way |
Dev tools (not shipped to production)
Section titled “Dev tools (not shipped to production)”| Package | What it does |
|---|---|
pytest + coverage |
Runs and measures the test suite |
ruff |
Lints and auto-formats the code |
mypy + ty |
Type checking |