- Add REVIEW to TaskStatus enum
- Fix stores list: remove phantom files, add solo-store and product-store
- Fix SelectionStore method names (selectPbi/selectStory)
- Add solo board route and product layout to file tree
- Mark sprint/planning as redirect, not a full page
- Update Zustand store count from 3 to 5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three-section layout (flex-1 left, center, flex-1 right) keeps
the product name truly centered regardless of sidebar content.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sub-layout sets product in Zustand store; NavBar reads it.
getAccessibleProduct wrapped with React cache to avoid double DB call.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Cookies can only be written in Server Actions or Route Handlers.
Moved the write to proxy.ts where NextResponse.cookies.set is allowed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced owner-only query (user_id = session.userId) with
getAccessibleProduct which also accepts product members.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All M0–M6 implementation tasks are done. Build passes, all 7 API
route handlers verified present, accessibility fixes applied.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a Solo Demo PBI under the active sprint with 4 stories:
- 3 claimed by demo user, tasks covering TO_DO / IN_PROGRESS / DONE columns
- 1 unassigned story so the sheet demo shows a claimable item
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Active on /solo and /products/[id]/solo; Producten inactive when on solo pages
- Refactored navLinks to carry explicit active boolean for custom path matching
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- UnassignedStoriesSheet: slide-in sheet listing unassigned sprint stories
- ClaimStoryRow: form action + ClaimButton with useFormStatus pending state
- Successful claim removes story from local list and shows success toast
- Empty state: "Geen ongeclaimde stories. Lekker bezig!"
- Demo: DemoTooltip wraps Pak op button, claim button disabled
- Page now fetches stories with _count.tasks instead of just count
- claimStoryAction also revalidates /products/[id]/solo path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- updateTaskPlanAction: requireProductWriter, Zod validation, tenant-guard, revalidatePath
- TaskDetailContent component keyed by task.id avoids setState-in-effect pattern
- Save-on-blur: "Bezig met opslaan…" → "Opgeslagen" (fades after 2s)
- DemoTooltip + readOnly for demo users; error toast on failure
- Footer link "Open in Sprint Board ↗"; updates Zustand store on save
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- TriplePane component with two resizable dividers, localStorage persistence, mobile tabs
- SprintBoardClient replaces SprintBacklogClient + PlanningRightClient
- Left panel: Product Backlog (PBIs with stories to add to sprint)
- Middle panel: Sprint Backlog (stories in sprint, click to select, sortable)
- Right panel: TaskList for selected story
- /sprint/planning redirects to /sprint
- Remove PlanningLeft, PlanningRightClient, SprintBacklogClient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Stap 11 toegevoegd voor de todo-tabel (aanmaken, bewerken, bulk-archiveren,
product-filter, rolweergave in navbar). Resultaatblok uitgebreid met
npm test en curl-test verificatie.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>