Backend
Stack
- Django 5+ with Ninja API routers, JWT auth, and Ninja schemas.
- PostgreSQL + Redis + Celery + Gunicorn orchestrated via Docker Compose.
- Traefik handles TLS termination and routing to
/api,/admin,/static,/media. - Metrics exporters (Prometheus, node exporter, PostgreSQL exporter) are wired in
docker-compose.yml.
Key apps
| App | Responsibilities |
|---|---|
users |
Custom User model, email verification, password resets, soft deletes. |
blog |
Posts, comments, categories/tags, likes, admin delete/restore operations. |
events |
Events, registrations, invitations, registration emails, Celery tasks. |
payments |
Discount codes, payment tracking linked to registrations. |
API highlights
- Authentication (
/api/auth/*): register, login, refresh, profile, delete profile picture, deleted users, filtered user lists. - Blog (
/api/blog/*): posts/comments, soft delete/restore, likes, categories/tags APIs. - Events (
/api/events/*): list, detail, create/update/delete, admin endpoints for event/registration detail and paginated/filterable registrations. - Payments (
/api/payments/*): create payment, get by ref, discounts.
Running locally
docker compose build backend
docker compose run --rm backend python manage.py migrate
Tests
docker compose run --rm backend python manage.py test --settings=config.settings.test
Admin tooling
- Ninja routers live under
backend/api/views. Schemas are inbackend/api/schemas. - JWT auth files:
backend/api/authentication.py. - Celery configs in
backend/config/services/celery.pyand tasks (events, users, communications).