Initial scaffold: tooling, plan, task briefs

- pnpm 10 workspace + TypeScript strict + ESLint flat + Prettier
- CLAUDE.md as canonical brief
- docs/tasks/ — 22 task briefs broken out by phase for sub-sessions
- docs/decisions/ — ADR scaffold

Implements task 01 (repo-init).
This commit is contained in:
ginnoir
2026-05-06 00:05:50 -05:00
commit b89690a9f2
40 changed files with 2282 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# 03 — Drizzle + Postgres setup
## Goal
Wire Drizzle ORM to a Postgres 16 instance, with migrations and a working `db` client.
## Depends on
- 02 (Next.js skeleton)
## Scope
- Install `drizzle-orm`, `drizzle-kit`, `postgres` (the `postgres` driver, not `pg`).
- `drizzle.config.ts` pointing at `src/modules/**/schema.ts` and writing to `./drizzle/`.
- `src/lib/db.ts` exporting a singleton `db` client built from `DATABASE_URL`.
- Initial schema in `src/modules/_core/schema.ts`:
- `users` (id uuid pk, email unique, display_name, created_at)
- `households` (id uuid pk, name, created_at)
- `household_members` (household_id, user_id, role enum: `owner` | `member`, pk on both)
- pnpm scripts: `db:generate`, `db:migrate`, `db:studio`.
- `docker-compose.dev.yaml` at repo root with a `famapp-db` service for local dev (Postgres 16, exposed on 5432, named volume).
## Out of scope
- Module-specific tables (calendar/lists/notes ship in their own tasks).
- Seed data (in task 07).
## Acceptance criteria
- [ ] `docker compose -f docker-compose.dev.yaml up -d` starts Postgres locally.
- [ ] `pnpm db:generate && pnpm db:migrate` produces `drizzle/0000_*.sql` and applies it.
- [ ] A throwaway script can `import { db } from "@/lib/db"` and `select` from `users` (returning empty).
- [ ] `tsc --noEmit` passes.
## Notes
- Use the `postgres` driver — works in both Node and edge-light contexts and is what Drizzle docs prefer for serverless-shaped apps.
- Keep the dev compose file separate from the production `deploy/compose.yaml` (task 05).