diff --git a/CLAUDE.md b/CLAUDE.md index 8aa39c1..bf80745 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,7 +3,7 @@ title: "CLAUDE.md — Scrum4Me" status: active audience: [ai-agent] language: nl -last_updated: 2026-05-08 +last_updated: 2026-05-11 --- # CLAUDE.md — Scrum4Me @@ -23,6 +23,7 @@ Desktop-first Scrum-app voor solo developers en kleine teams. Hiërarchie: produ | `docs/design/styling.md` | **Lees vóór elk component** — MD3-tokens, shadcn | | `docs/adr/` | Architecture Decision Records — tech-keuzes (base-ui vs Radix, sort-order, demo-policy, …) | | `docs/architecture/` | 6 topische architecture-bestanden (data-model, auth, sprint-execution, …) — uitwerking van `docs/architecture.md` | +| `docs/runbooks/plan-to-pbi-flow.md` | **Na goedgekeurd plan** — PBI/Story/Task aanmaken via MCP, zónder direct uitvoeren | --- @@ -47,6 +48,7 @@ Volledige MCP-tool documentatie: [docs/runbooks/mcp-integration.md](./docs/runbo - **UI:** gebruik `@base-ui/react` met `render`-prop, niet Radix `asChild` - **Push:** commits accumuleren lokaal per taak (`git add -A && git commit`); push + PR pas bij lege queue of na expliciete gebruikersbevestiging — zie [branch-and-commit.md](./docs/runbooks/branch-and-commit.md) - **Demo:** drie lagen — proxy.ts + server action + UI disabled knop +- **Proxy:** `proxy.ts` in repo-root (géén `middleware.ts`) onverzegelt de iron-session, redirect niet-geauthenticeerde users op `/dashboard|/products|/ideas`, en blokkeert niet-GET API-writes voor demo-users behalve `/api/cron/*` - **Enum:** DB UPPER_SNAKE ↔ API lowercase — uitsluitend via `lib/task-status.ts` - **Foutcodes:** 400 = parse-fout, 422 = Zod-validatie, 403 = demo-token - **Server/client grens:** `*-server.ts` bevat DB/node-only; nooit importeren in client component @@ -60,11 +62,11 @@ Volledige MCP-tool documentatie: [docs/runbooks/mcp-integration.md](./docs/runbo | Laag | Technologie | |---|---| -| Framework | Next.js 16 (App Router) + React 19 | +| Framework | Next.js 16.2 (App Router) + React 19.2 — PPR/Cache Components beschikbaar | | Taal | TypeScript strict | -| Styling | Tailwind CSS + shadcn/ui + MD3 via `app/styles/theme.css` | +| Styling | Tailwind CSS v4 + shadcn/ui + MD3 via `app/styles/theme.css` | | State | Zustand + dnd-kit | -| DB | Prisma v7 + PostgreSQL (Neon) | +| DB | Prisma v7.8 + PostgreSQL (Neon) | | Auth | iron-session + bcryptjs | | Test | Vitest (`__tests__/`, config in `vitest.config.ts`) | | Utilities | Zod, Sonner, Sharp, Vercel Analytics | @@ -111,6 +113,7 @@ Volledig schema: `lib/env.ts`. Canonieke lijst: `.env.example` — bevat ook web ## MCP & cron - **MCP-server (extern):** standalone Node-proces in `~/Development/scrum4me-mcp/` — Prisma-schema gesynced via `sync-schema.sh`. 30+ tools (`get_claude_context`, `wait_for_job`, `update_task_status`, …) +- **Bewuste duplicaten:** `lib/job-config.ts` (deze repo) en `scrum4me-mcp/src/lib/job-config.ts` (externe MCP) bevatten dezelfde resolver-logica; dit voorkomt dat de MCP-server Next-deps importeert. **Wijzig beide** bij elke job-config aanpassing - **Cron (vercel.json):** - `/api/cron/expire-questions` — dagelijks 04:00 UTC - `/api/cron/cleanup-agent-artifacts` — dagelijks 03:00 UTC @@ -131,3 +134,20 @@ npm run verify && npm run build # verify = lint + typecheck + test ``` Worker job-status protocol (wanneer `DONE` / `SKIPPED` / `FAILED`): zie [docs/runbooks/worker-idempotency.md](./docs/runbooks/worker-idempotency.md). + +### Scripts + +| Commando | Doel | +|---|---| +| `npm run dev` | Next dev op poort 3000 (`predev` kill-port draait automatisch) | +| `npm test` | Vitest eenmalig (`vitest run`) | +| `npm run test:watch` | Vitest watch-mode | +| `npm test -- ` | Eén bestand draaien — bv. `npm test -- lib/env` | +| `npm run seed` | Prisma seed via `prisma/seed.ts` | +| `npm run create-admin` | Admin-user toevoegen (`scripts/create-admin.ts`) | +| `npm run db:insert-milestone` | Milestone-script (`scripts/insert-milestone.ts`) | +| `npm run db:sync-model-prices` | Sync Anthropic-model-prijzen — vereist `ANTHROPIC_API_KEY` | +| `npm run docs` | Regenereer `docs/INDEX.md` + check links | +| `npm run diagrams` | Mermaid → SVG (`public/diagrams/architecture-{light,dark}.svg`) | + +> Vitest sluit `.claude/**` uit (relevant voor worktrees). `server-only` wordt via alias gemockt naar `tests/stubs/server-only.ts`, zodat `*-server.ts` modules laadbaar zijn in jsdom-tests.