Self-hosting
Host TimeTracker on your own VPS
A single installer provisions the entire stack on a fresh Linux server. This guide walks you through every step, from preparing the machine to keeping it updated.
What you'll run
The installer sets up three services on your VPS and wires them together automatically:
- Caddy — a reverse proxy that terminates HTTPS (automatic Let's Encrypt certificates) and routes each domain to the right service.
- Supabase — self-hosted via Docker Compose (Postgres, Auth, Storage, and the API gateway), serving the API on port 8000.
- TimeTracker app — the standalone Next.js build, run under PM2 on port 3000.
Two domains point at the same VPS — one for the API, one for the dashboard — and Caddy forwards each to its service:
api.yourdomain.com ──▶ Caddy (:443) ──▶ Supabase API (:8000)
app.yourdomain.com ──▶ Caddy (:443) ──▶ TimeTracker app (:3000)The guide
The VPS, domains, DNS records, SMTP credentials, and license key you need before starting.
Download the release, extract it, and run the installer to provision the whole stack.
Apply the database schema to your self-hosted Supabase.
Confirm the dashboard, app process, and reverse proxy are healthy.
Logs, restarts, the daily-summary cron, upgrading to a new release, and troubleshooting.