Scrum4Me/docs/architecture/overview.md
Janpeter Visser f7464db837
docs: sync data-model, glossary en specs met huidig schema (#164)
Brengt de docs gelijk met de werkelijkheid na PBI-46/47/50/58/59/61/63
en M12. Belangrijkste fixes:

- data-model.md herschreven naar prisma/schema.prisma: nieuwe entiteiten
  (Idea, IdeaLog, IdeaProduct, UserQuestion, ClaudeQuestion, ClaudeJob,
  SprintRun, SprintTaskExecution, ClaudeWorker, LoginPairing,
  PushSubscription, ModelPrice, ProductMember), nieuwe enums
  (FAILED/EXCLUDED, OPEN/CLOSED/ARCHIVED, ADMIN, etc.) en codes
  (PBI/ST/T/SP-N) toegevoegd; verwijderde todos-tabel verwijderd.
- glossary.md: Sprint zonder "max 1 actief" (PBI-63), Story/Task incl.
  FAILED/EXCLUDED, Todo verwijderd, Idea/SprintRun/ClaudeJob/
  verify_result toegevoegd.
- project-structure.md: app/(app)/todos vervangen door
  ideas/insights/jobs/manual/admin/solo; api-tree volledig.
- overview.md: "geen realtime in v1" en Docker-rationale herschreven —
  Postgres LISTEN/NOTIFY + SSE, claude_jobs als queue, opt-in
  Docker-deploy-flow.
- functional.md: F-08 Todo-lijst -> Ideeen-laag, F-09 multi-sprint,
  F-10 Task-status incl. FAILED/EXCLUDED, F-11 endpoint-lijst,
  navigatiestructuur, datamodel-schets en Flow 3 bijgewerkt.
- README.md API-tabel: /api/todos weg, ideas/jobs/users/profile/health
  toegevoegd, kort over realtime/auth-pair/internal/cron.
- patterns + mcp-integration runbook: Todo-/ACTIVE-references vervangen
  door Idea/OPEN; create_todo MCP-tool note over verwijdering.

Linkcheck groen (105 files), INDEX hergegenereerd (98 docs).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 08:16:44 +02:00

4.9 KiB


Versie: 0.2 — mei 2026 Volgt op: Functionele Specificatie v0.2


Architectuursamenvatting

Scrum4Me is een desktop-first Next.js 16 webapplicatie die server-side wordt gerenderd en gedeployed op Vercel. De database is PostgreSQL via Neon, aangestuurd door Prisma v7. Authenticatie is custom username/password via iron-session — geen externe auth-provider, geen verplichte e-mail. De REST API voor Claude Code-integratie loopt via Next.js Route Handlers, beveiligd met API-tokens. Drag-and-drop in de planningsschermen wordt afgehandeld door dnd-kit. Realtime-updates voor Solo-bord en Backlog gaan via Postgres LISTEN/NOTIFY + Server-Sent Events; geen externe broker. Een eigen MCP-server (scrum4me-mcp) biedt agents een job-queue (claude_jobs) bovenop dezelfde database. Vercel Analytics meet pageviews via de root layout; profielfoto's worden server-side verwerkt met Sharp.


Stack

Laag Technologie Rationale
Frontend framework Next.js 16 (App Router) Stabiel, wijdverbreid, naadloze Vercel-deployment; SSR vereist voor auth-cookie-management
UI runtime React 19 Standaard bij Next.js 16; brengt useActionState, useFormStatus en de React Compiler (experimenteel) mee — minder boilerplate bij Server Actions
Taal TypeScript (strict) Type-veiligheid is essentieel voor een solo developer zonder reviewlaag; vangt datamodel-mismatches vroeg
Client state Zustand Minimale boilerplate voor ephemere UI-staat (selectie, optimistische drag-and-drop volgorde); leeft naast Server Components zonder conflict
Styling Tailwind CSS + shadcn/ui Snelle iteratie; toegankelijke componentprimitieven; desktop-first layouts goed ondersteund
Database (cloud) PostgreSQL via Neon Serverless Postgres, gratis tier voldoende voor MVP; native PostgreSQL zonder vendor lock-in
ORM Prisma v7 Type-safe queries; PostgreSQL via adapter; migraties zijn deterministisch
Authenticatie Custom — iron-session + bcrypt Username/password zonder e-mail vereist geen externe auth-provider; iron-session beheert versleutelde cookies server-side
Drag-and-drop dnd-kit Actief onderhouden, React-native hooks, 60fps bij grote lijsten, ondersteuning voor meerdere containers
REST API Next.js Route Handlers (/app/api/) Naast Server Actions nodig voor Claude Code-integratie; Route Handlers zijn volledig HTTP-compatibel
Image processing Sharp Avataruploads worden gevalideerd, geschaald en als WebP opgeslagen in PostgreSQL
Analytics Vercel Analytics (@vercel/analytics/next) Pageviews zonder extra client-configuratie; component staat in app/layout.tsx
Hosting Vercel Zero-config Next.js deployment; preview-URLs per PR; gratis tier voldoende voor v1
CI/CD GitHub Actions Lint + typecheck + build op elke PR; Vercel handelt de daadwerkelijke deploy af

Wat we NIET gebruiken (en waarom)

Technologie Afgewezen omdat
Supabase Auth Username/password zonder e-mail past niet in Supabase Auth's flow; onnodige afhankelijkheid voor wat iron-session zelf afhandelt
NextAuth / Auth.js Overkill voor username/password zonder providers; voegt complexiteit toe zonder voordeel bij deze auth-vereisten
Redux Toolkit Te veel boilerplate (actions, reducers, slices, selectors, provider) voor deze schaal; Zustand doet hetzelfde met een kwart van de code
Jotai / Recoil Atom-gebaseerd model is te granulaar voor de gecorreleerde state in de gesplitste schermen; Zustand stores zijn explicieter en beter uitbreidbaar
React Query / SWR Server Components + Server Actions dekken de datalaag; client-side server-state caching introduceert een sync-probleem dat we bewust vermijden
Context API (React) Veroorzaakt onnodige re-renders bij drag-and-drop updates; Zustand's selector-gebaseerde subscriptions zijn granulairder
WebSockets / externe realtime-broker (Pusher, Ably, Supabase Realtime) Postgres LISTEN/NOTIFY + SSE dekt de realtime-behoefte zonder een tweede auth-laag of extra infrastructuur — zie architecture/project-structure.md
Redis Geen caching- of queuerequirements; de claude_jobs-tabel met FOR UPDATE SKIP LOCKED doet het werk dat een queue-broker anders zou doen
Docker voor lokale dev Voor lokale ontwikkeling volstaat Neon. Er is wél een opt-in Docker-deploy-flow (scrum4me-docker, native arm64 op Mac, NAS-flow opt-in) — die is voor deploy, niet voor dev
Supabase (als database) Neon geeft directe PostgreSQL-toegang zonder Supabase-specifieke abstractielagen; past beter bij Prisma-first aanpak
tRPC REST API is vereist voor Claude Code-integratie; tRPC werkt alleen vanuit TypeScript-clients