Hyper-minimal personal study time tracker. Single user.
- Next.js frontend
- Django backend + ORM
- PostgreSQL
- Local Postgres via Docker Compose
Next proxies /api/* to Django so the browser stays same-origin.
make help # list commands
make up # start everything
make stop # stop Next + Django only (keeps Postgres / data)Open http://localhost:3000.
| Command | Description |
|---|---|
make help |
List Make targets |
make up |
Full local startup |
make stop |
Stop Next + Django (Postgres data untouched) |
make down |
Stop Postgres container (keeps data volume) |
make setup |
Prepare without starting servers |
make backend |
Django only (:8000) |
make frontend |
Next.js only (:3000) |
make migrate |
Apply Django migrations |
make db-ui |
Start pgAdmin (:5050) |
make db-backup |
Dump DB to db/backups/ |
make db-restore FILE=... |
Restore a SQL dump |
make db-wipe CONFIRM=YES |
Delete DB volume (only wipe command) |
No other make target deletes database data.
- Track study time by topic/cert
- Pause and resume the timer
- Show total, today, and per-topic time
- Show a monthly calendar of study days
| Method | Path | Purpose |
|---|---|---|
| GET | /api/timer |
Current timer state |
| POST | /api/timer/start |
Start a session |
| POST | /api/timer/pause |
Pause |
| POST | /api/timer/resume |
Resume |
| POST | /api/timer/stop |
Stop and save |
| GET | /api/stats?year=2026&month=7 |
Totals and month data |
| GET | /api/topics |
List topics |
| POST | /api/topics |
Create topic |
| PATCH | /api/topics/:id |
Rename topic |
DATABASE_URL=postgresql://...
DJANGO_SECRET_KEY=...
DJANGO_DEBUG=false
DJANGO_ALLOWED_HOSTS=your.host
DJANGO_ORIGIN=https://your.api.host