Josh's habit tracker, rebuilt online as a portfolio project: a Neon Street HUD where daily habits are ops to complete. Sign in, see today's habits, tap one done — from a phone, at a real URL.
Why it exists: the v1 tracker lived on a desktop's localhost and never got used; habit logging happens on the couch and in bed, on a phone. This rebuild is also the portfolio piece — a correctly built multi-user app (per-user rows, RLS) that happens to have one user.
I'm the architect and quality bar, not the typist. What I own is the
structure: the two-lock security model (grants + RLS) in every migration, the
architecture brief in docs/, and the e2e suite that runs against the real
backend so I can trust changes without reading every diff.
- Next.js 16 (App Router) + TypeScript on Vercel
- Supabase — hosted Postgres + email/password auth (
@supabase/ssrcookies) - Tailwind CSS v4, CSS-first design tokens (Neon Street HUD language)
- Playwright e2e against the real backend + pure unit tests for date logic
npm install
cp .env.example .env.local # fill in Supabase URL + publishable key
npm run dev # http://localhost:3000npx playwright test e2e/dates.unit.spec.ts # pure date-logic units (no backend)
npx playwright test # full e2e vs hosted SupabaseThe full run needs the e2e credentials in .env.local (see .env.example)
and the migrations in supabase/migrations/ applied to the project.
app/— pages (Today/, Manage/manage,/login), components, tokenslib/— Supabase client plumbing, pure date logicsupabase/migrations/— schema + grants + RLS, one migration per tablee2e/— Playwright specs, seeding setup/cleanupdocs/— project context (see the doc map)proxy.ts— session refresh + signed-out redirect (Next 16 middleware rename)
- docs/architecture.md — how the pieces fit and why it's safe (diagram inside)
- docs/spec.md — what loop one builds and why
- docs/design-language.md — the Neon Street HUD visual language
- docs/stack-research.md — how this stack wants to be used (primary-source research the build cites)
Work is tracked in this repo's GitHub issues; each ticket's commit message carries its verification evidence.
MIT.