Personal time tracker with GitHub verification overlay.
Time tracking is the primary, authoritative record. GitHub events (PRs created, reviews submitted, PRs merged to main) are pulled in the background to verify and contextualize the picture you describe manually. A merged PR counts as a closed task — same workflow signal, no extra integration.
- Node.js + Fastify (backend)
- React + Vite (frontend)
- SQLite (single-file database)
- Docker (one container, single
docker compose up -d)
cp .env.example .env
# edit .env: set ADMIN_PASSWORD, JWT_SECRET
make prodOpen http://localhost:$PORT (default 3000).
| Target | What it does |
|---|---|
make help |
Show this list |
make run |
Dev mode in Docker (hot reload via volume mount, exposes Vite on 5173) |
make prod |
Production mode (single container, frontend built into backend) |
make stop |
Stop all containers |
make logs |
Tail container logs |
make update |
git pull + restart in prod |
make install |
Install deps locally (for non-Docker dev) |
make install
npm run dev # runs backend + frontend concurrentlyOpen http://localhost:$PORT — backend proxies non-API requests to Vite (with HMR over WebSocket on the same port).
| Env var | Purpose |
|---|---|
ADMIN_PASSWORD |
Login password (required) |
JWT_SECRET |
Token signing secret (required) |
PORT |
Backend port, default 3000 |
GITHUB_TOKEN |
Personal access token for GitHub sync |
SYNC_INTERVAL_MINUTES |
Sync cron interval, default 15 |
BACKFILL_DAYS |
Initial sync backfill window, default 30 |