--- title: "CLAUDE.md — Scrum4Me" status: active audience: [ai-agent] language: nl last_updated: 2026-05-03 --- # CLAUDE.md — Scrum4Me Desktop-first Scrum-app voor solo developers en kleine teams. Hiërarchie: product → PBI → story → taak. Zie [README.md](./README.md) voor setup. --- ## Orientatie | Bestand | Waarvoor | |---|---| | `docs/INDEX.md` | Gegenereerde index van alle docs — begin hier | | `docs/specs/functional.md` | Acceptatiecriteria, user flows | | `docs/architecture.md` | Breadcrumb → 6 topische arch-bestanden | | `docs/backlog/index.md` | Implementatievolgorde, "done when"-criteria | | `docs/api/rest-contract.md` | REST API contract voor Claude Code | | `docs/design/styling.md` | **Lees vóór elk component** — MD3-tokens, shadcn | | `docs/plans/-*.md` | Implementatieplan per milestone | --- ## Hoe werk vinden **Track A — MCP (aanbevolen):** 1. Branch aanmaken: `git checkout -b feat/` — nog **geen** `gh pr create` 2. `mcp__scrum4me__get_claude_context` → pak de next story 3. Voer taken uit in `sort_order`; update status per taak 4. Lees het relevante patroon en styling vóór je begint 5. Verifieer: `npm run lint && npm test && npm run build` 6. Commit per laag: `git add -A && git commit` — **geen** `git push` — zie [docs/runbooks/branch-and-commit.md](./docs/runbooks/branch-and-commit.md) 7. Herhaal stap 2–6 per story; branch blijft dezelfde 8. Queue leeg → `git push -u origin ` + `gh pr create` **Track B — manueel:** 1. Lees taak in `docs/backlog/index.md` 2. Zoek spec in `docs/specs/functional.md` 3. Lees patroon + styling → bouw → verifieer → vraag bevestiging → commit Volledige MCP-tool documentatie: [docs/runbooks/mcp-integration.md](./docs/runbooks/mcp-integration.md) --- ## Hardstop regels - **Styling:** nooit `bg-blue-500`; altijd MD3-tokens (`bg-primary`, `bg-status-done`, …) - **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 - **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 - **Deployment:** `npm run lint && npm test && npm run build` vóór elke PR --- ## Stack | Laag | Technologie | |---|---| | Framework | Next.js 16 (App Router) + React 19 | | Taal | TypeScript strict | | Styling | Tailwind CSS + shadcn/ui + MD3 via `app/styles/theme.css` | | State | Zustand + dnd-kit | | DB | Prisma v7 + PostgreSQL (Neon) | | Auth | iron-session + bcryptjs | | Utilities | Zod, Sonner, Sharp, Vercel Analytics | --- ## Patterns quickref | Patroon | Bestand | |---|---| | iron-session | `docs/patterns/iron-session.md` | | Prisma singleton | `docs/patterns/prisma-client.md` | | Server Action (auth + Zod) | `docs/patterns/server-action.md` | | Route Handler (REST) | `docs/patterns/route-handler.md` | | Zustand optimistic update | `docs/patterns/zustand-optimistic.md` | | Float sort_order / drag-and-drop | `docs/patterns/sort-order.md` | | Proxy / route protection | `docs/patterns/proxy.md` | | QR-pairing | `docs/patterns/qr-login.md` | | Claude ↔ user vraagkanaal | `docs/patterns/claude-question-channel.md` | | Entity Dialog (verplicht) | `docs/patterns/dialog.md` | --- ## Env vars ```bash DATABASE_URL="" # postgresql://... DIRECT_URL="" # pooler-bypass voor LISTEN/NOTIFY SESSION_SECRET="" # min 32 chars CRON_SECRET="" # Bearer-secret /api/cron/* ``` Volledig schema: `lib/env.ts`. Canonieke lijst: `.env.example`. --- ## Scrum-terminologie PBI (niet: Feature/Epic) · Story (niet: Ticket) · Sprint Goal (niet: Objective) --- ## Verificatie ```bash npm run lint && npm test && npm run build ``` Worker job-status protocol (wanneer `DONE` / `SKIPPED` / `FAILED`): zie [docs/runbooks/worker-idempotency.md](./docs/runbooks/worker-idempotency.md).