Multi-stage Dockerfile (pnpm fetch/offline, standalone output, non-root nextjs user), deploy/compose.yaml with famapp + famapp-db + full Authentik stack on famapp_net, Caddyfile.snippet for fam/auth.ginnoir.com, and .env.production.example. Added .dockerignore and public/.gitkeep. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.9 KiB
Status
Living progress tracker. Update at the end of each task. The canonical brief is CLAUDE.md; task briefs live in docs/tasks/.
Done
-
01 — Repo init & tooling (commit
b89690a). pnpm 10 + TS strict + ESLint flat + Prettier. All acceptance criteria green. -
02 — Next.js app skeleton. Next.js 15 + React 19 + Tailwind v4 + shadcn/ui (button, card, input, dialog).
pnpm devserves placeholder,pnpm buildproduces.next/standalone/,pnpm lintclean. Added.npmrcwithnode-linker=hoistedfor Windows symlink compatibility. -
03 — Drizzle + Postgres setup. drizzle-orm + postgres driver + drizzle-kit wired up.
src/modules/_core/schema.tsdeclaresusers,households,household_members.docker-compose.dev.yamlstarts Postgres 16.drizzle/0000_silent_magma.sqlgenerated and applied.tsc --noEmitpasses. -
04 — Module loader & registry.
src/modules/_core/module.tstypes (ModuleManifest,EntityTypeRegistration,DashboardWidget, etc.),registry.tssingleton withregisterModule/getRegistry/getEntityType/getWidget, barrel_core/index.ts. Stub manifests forcalendar,lists,notes.src/modules/index.tsloader. Root layout imports loader;AppNavreads registry for nav links./debug/registrydumps full registry JSON (dev only). Uses zod v4 + built-inz.toJSONSchema().tsc --noEmit,pnpm build,pnpm lintall clean. -
05 — Compose + Caddy.
Dockerfile(3-stage: deps/builder/runner, pnpm fetch + offline install, non-rootnextjsuser,output: standalone),deploy/compose.yaml(famapp + famapp-db + full Authentik stack onfamapp_net),deploy/Caddyfile.snippet,.env.production.example.docker build -t famapp .succeeds (~311 MB);docker compose -f deploy/compose.yaml configvalidates clean. Added.dockerignoreandpublic/.gitkeep.
Next up
- 06 — Authentik OIDC (brief).
Phase 1 remaining
- 03 Drizzle + Postgres → 04 module loader → 05 compose/Caddy → 06 Authentik OIDC → 07 household seed → 08 theming infrastructure (newly added; multi-theme + per-user dark/light, must land before module work so module UIs adopt the token system from day one).
Recent architectural decisions
- Calendars are first-class entities. Like lists, users can create as many as they want with
privateorhouseholdvisibility. Both calendar entities are independently shareable. Updated CLAUDE.md data model + task 10. - Uniform widget contract — no singletons. Every dashboard widget declares a
configSchemaanddefaultConfig; every placement is an independent instance. Same widget can appear N times on a dashboard pointed at different things. Updated task 04; tasks 11/12 widget sections updated to match. - Per-user customizable dashboards. Each user can have any number of named dashboards, switch between them, drag/resize widgets, and configure each placement. Tasks 25 (multiple dashboards) and 26 (customizable layout + widget configuration) added; phase 3 index updated.
How to resume in a fresh session
- Open the repo root in VS Code.
- Tell Claude: "Read CLAUDE.md and STATUS.md, then complete docs/tasks/03-drizzle-postgres.md. Stop at the acceptance criteria."
- After it lands, append the result to the Done section here, bump Next up, and commit.
Environment notes
- Repo: https://github.com/ginnoir/famapp (HTTPS remote on
origin). - Local dev tooling installed: Node 22+, pnpm 10.33.3.
.envis not committed; copy.env.example→.envwhen needed.- VS Code recommended extensions in
.vscode/extensions.json; copy.vscode/settings.json.example→.vscode/settings.jsonfor the workspace defaults. - Memory files (cross-session, only seen by Claude):
C:\Users\MattC\.claude\projects\C--Users-MattC-Documents-famapp\memory\.