Minimal habit tracker built with Next.js + Supabase.
- Frontend: Next.js App Router (
src/app) + TypeScript + Tailwind CSS. - Data/Auth: Supabase Auth + Postgres + RLS.
- Domain logic: Pure helpers in
src/lib/domain(due logic, progress logic, analysis logic). - Compatibility layers: write fallbacks for legacy Supabase schemas (
src/lib/supabase).
src/app: route UI (login, today, habits, analysis, settings).src/components: shared app components used by App Router pages.src/lib: domain logic, settings import validation, Supabase helpers.src/types: domain types.supabase/sql: schema and migration SQL files.legacy_archive: archived legacy Vite/root-entry implementation kept for reference.
/login/auth/callback/app/today/app/habits/app/habits/new/app/habits/[id]/app/analysis/app/settings
/app/* auth protection is currently handled in src/app/app/layout.tsx by checking Supabase session on the client and redirecting to /login when missing.
- Copy
.env.exampleto.env.local - Set:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
Run in order:
supabase/sql/001_schema_rls.sqlsupabase/sql/002_add_goal_count_to_habits.sqlsupabase/sql/003_add_name_column_compat.sqlsupabase/sql/004_make_title_compatible.sqlsupabase/sql/005_add_language_to_user_settings.sqlsupabase/sql/006_reorder_habits_rpc.sql
- Today page uses pure due-logic (
isHabitDue) and progress helpers. - Habit reorder uses a validated plan + atomic Supabase RPC (
reorder_habits). - Settings supports:
- full restore JSON import/export
- legacy migration JSON import (old local schema normalization)
- preflight validation with warnings/errors and explicit per-section result summary
npm install
npm run devnpm run lint
npm test
npm run build