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>
41 lines
3.9 KiB
Markdown
41 lines
3.9 KiB
Markdown
# Status
|
|
|
|
Living progress tracker. Update at the end of each task. The canonical brief is [`CLAUDE.md`](CLAUDE.md); task briefs live in [`docs/tasks/`](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 dev` serves placeholder, `pnpm build` produces `.next/standalone/`, `pnpm lint` clean. Added `.npmrc` with `node-linker=hoisted` for Windows symlink compatibility.
|
|
- **03 — Drizzle + Postgres setup**. drizzle-orm + postgres driver + drizzle-kit wired up. `src/modules/_core/schema.ts` declares `users`, `households`, `household_members`. `docker-compose.dev.yaml` starts Postgres 16. `drizzle/0000_silent_magma.sql` generated and applied. `tsc --noEmit` passes.
|
|
- **04 — Module loader & registry**. `src/modules/_core/module.ts` types (`ModuleManifest`, `EntityTypeRegistration`, `DashboardWidget`, etc.), `registry.ts` singleton with `registerModule`/`getRegistry`/`getEntityType`/`getWidget`, barrel `_core/index.ts`. Stub manifests for `calendar`, `lists`, `notes`. `src/modules/index.ts` loader. Root layout imports loader; `AppNav` reads registry for nav links. `/debug/registry` dumps full registry JSON (dev only). Uses zod v4 + built-in `z.toJSONSchema()`. `tsc --noEmit`, `pnpm build`, `pnpm lint` all clean.
|
|
|
|
- **05 — Compose + Caddy**. `Dockerfile` (3-stage: deps/builder/runner, pnpm fetch + offline install, non-root `nextjs` user, `output: standalone`), `deploy/compose.yaml` (famapp + famapp-db + full Authentik stack on `famapp_net`), `deploy/Caddyfile.snippet`, `.env.production.example`. `docker build -t famapp .` succeeds (~311 MB); `docker compose -f deploy/compose.yaml config` validates clean. Added `.dockerignore` and `public/.gitkeep`.
|
|
|
|
## Next up
|
|
|
|
- **06 — Authentik OIDC** ([brief](docs/tasks/06-authentik-oidc.md)).
|
|
|
|
## 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 `private` or `household` visibility. Both calendar entities are independently shareable. Updated CLAUDE.md data model + task 10.
|
|
- **Uniform widget contract — no singletons.** Every dashboard widget declares a `configSchema` and `defaultConfig`; 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
|
|
|
|
1. Open the repo root in VS Code.
|
|
2. Tell Claude: *"Read [CLAUDE.md](CLAUDE.md) and [STATUS.md](STATUS.md), then complete [docs/tasks/03-drizzle-postgres.md](docs/tasks/03-drizzle-postgres.md). Stop at the acceptance criteria."*
|
|
3. 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.
|
|
- `.env` is **not** committed; copy `.env.example` → `.env` when needed.
|
|
- VS Code recommended extensions in `.vscode/extensions.json`; copy `.vscode/settings.json.example` → `.vscode/settings.json` for the workspace defaults.
|
|
- Memory files (cross-session, only seen by Claude): `C:\Users\MattC\.claude\projects\C--Users-MattC-Documents-famapp\memory\`.
|