New Dashboard Backend
Greenfield Django 5 + Wagtail 6 + DRF API aligned to ERD_dashboard.png.
Services
| Compose service | Role |
|---|---|
api |
Gunicorn on :8000 |
cron |
Same image, runs management commands on schedule |
db |
Postgres 16 (--profile prod) |
Quick start (local, no Docker)
From dashboard-cpsp/backend:
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # if needed
python manage.py migrate
python manage.py seed_demo
npm run dev
# or: python manage.py runserver 0.0.0.0:8000
Seed creates user admin / admin123, then seeds the default Sukawarna demo data — Kandang 1 and Kandang 2 closed cycles (49 days each, 22 May – 9 Jul 2026) with full daily records and IoT panels. A manager login skw_manager / skw_manager123 is created too. It also prints a one-time API key.
Docker Compose
From the project root (dashboard-cpsp/):
cp docker/.env.example .env
docker compose up -d --build
docker compose exec api python manage.py bootstrap_admin
Production bootstrap creates superadmin only (no demo cycles). Dev demo: python manage.py seed_demo.
See ../DOCKER.md for ports, cron, and troubleshooting.
Auth
- Session:
POST /api/v1/auth/login/then send session cookie +X-CSRFTokenon writes - API key: header
X-API-Key: <raw>(hashed at rest) - Public:
GET /api/v1/health/
External integrations
- karung-web-admin →
POST /api/v1/karungs/request/(KARUNG_WEB_ADMIN_BASE_URL) - Saldo Awal IoT compare → karung-web-admin
GET /api/combined
Docs
- Curl samples: docs/API_CURL.md
- Postman: docs/postman/
- OpenAPI UI:
http://localhost:8000/api/docs/ - Wagtail admin:
http://localhost:8000/admin/