A gamified life-management PWA, built for one person at a time — starting with an ADHD-friendly morning briefing, a private brain dump, and a calendar that plays like a quest log.
Full design intent and phased plan: BUILD_SPEC.md.
Privacy contract (read before touching data): PRIVACY_ARCHITECTURE.md.
Language rules for all UI and AI copy: docs/copy-rules.md.
Phase 0 — Foundation. Project is scaffolded; no user-facing features ship yet. See BUILD_SPEC.md §2 for the phased plan.
Next.js 15 App Router · TypeScript · Tailwind · shadcn/ui · Supabase (Postgres + Auth + RLS) · Anthropic Claude API · Google Calendar · Web Push · next-intl (nb/en) · @ducanh2912/next-pwa · Vercel.
See BUILD_SPEC.md §1 for the locked stack list and anti-additions.
cp .env.example .env.local
# fill in Supabase, Anthropic, Google, VAPID keys
npm install
npm run devGenerate VAPID keys once:
npx web-push generate-vapid-keysGenerate a token encryption key (32 bytes, base64):
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"Apply Supabase migrations:
supabase link --project-ref <your-project>
supabase db push
supabase db seednpm run dev— local dev server (PWA service worker disabled)npm run build— production buildnpm run typecheck— strict TS check, no emitnpm run lint— ESLint (Next config)npm run test— Vitest
Before every commit: npm run typecheck && npm run lint && npm test.
See BUILD_SPEC.md §5 — it is the source of truth. Do not drift.
- Vercel project connected to
main - Env vars set via Vercel dashboard
- Cron schedule lives in
vercel.json(times UTC; adjust for Europe/Oslo) - Supabase project in eu-central for latency + GDPR
This is a personal-use app for one primary user and her partner. If you are not Casper, open an issue before writing code.
When the answer isn't in BUILD_SPEC.md:
- Privacy question? Default to MORE private.
- Scope question? Default to LESS.
- UI question? Default to QUIETER.
- Copy question? Default to KINDER.
- Technical question? Default to SIMPLER.