Premium habit tracker for routines, streaks, and self-growth. Built on Next.js 16 + Supabase + Tailwind v4.
- Realtime sync — Supabase Realtime keeps every device in lockstep.
- Analytics & heatmaps — year-long heatmap, weekday patterns, category breakdown, leaderboard.
- Achievements — streak milestones, perfect week/month, comeback kid, consistency king.
- Optimistic UI — toggles snap instantly, server reconciles in the background.
- Push reminders — per-habit reminder time, timezone-aware, web push via VAPID.
- Backup / restore — export to JSON or CSV, import a previous backup.
- Light + dark themes — pre-paint theme bootstrap, no flash.
- Framework — Next.js 16 App Router (React 19)
- Database & auth — Supabase (Postgres + RLS + Realtime)
- Styling — Tailwind CSS v4 + design tokens in
app/globals.css - Animations — Framer Motion
- Forms — React Hook Form + Zod
- Charts — Recharts
- Push — web-push + Vercel Cron
npm install- Copy
.env.exampleto.env.localand fill in your Supabase URL + anon key. - Apply migrations in Supabase (
supabase/migrations/*.sqlin numeric order). npm run dev— open http://localhost:3000
| Var | Required | Notes |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
yes | Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
yes | Anon (publishable) key |
SUPABASE_SERVICE_ROLE_KEY |
for cron only | Used by /api/cron/reminders to read all users |
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY |
for push | Generate with npx web-push generate-vapid-keys |
VAPID_SUBJECT |
for push | mailto:you@example.com |
CRON_SECRET |
for cron auth | Bearer token for cron endpoint |
NEXT_PUBLIC_SITE_URL |
prod | Canonical site URL for OAuth redirects |
npm run dev— start dev servernpm run build— production build (typecheck + lint enforced)npm run lint— ESLintnpm run typecheck—tsc --noEmit