TypeScript and ESLint fixes:
- Fixed unescaped quotes in report-timeline.tsx (ESLint error)
- Restored database.types.ts from git history (was empty)
- Added reports table type definition to database.types.ts
- Fixed missing getCookieHeader import in intakes/actions.ts
- Fixed use-media-query.ts ternary operator (TypeScript error)
- Simplified z.enum() in report.ts (removed unsupported error options)
All type checking and linting now passes successfully.
Build tested locally and ready for Vercel deployment.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Issue: Foreign key constraint violation when creating reports
- reports.created_by referenced practitioners.id
- Code was storing auth.uid() instead of practitioner.id
- Demo practitioners have user_id: null (no auth link)
Solution (prototype):
- Drop FK constraints on created_by and updated_by
- Store auth user ID directly without constraint
- Added migration: 20251123_fix_reports_created_by_constraint.sql
Note: In production, populate practitioners.user_id and restore
FK constraints for proper data integrity.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adapted cleanup to work with split-view rapportage refactor.
Split-view refactor replaced modal flow with dual-pane workspace:
- Composer is now on the rapportage page itself (no modal)
- "Nieuwe rapportage" button scrolls to #rapportage-composer
- Timeline and composer visible simultaneously
Changes:
- Recreated PatientLayoutClient WITHOUT RapportageModal
- Kept ClientHeader with focusElementId prop for scroll navigation
- Kept layout.tsx using PatientLayoutClient wrapper
- ClientSidebar removal still valid (EPDSidebar handles navigation)
Result: Clean codebase compatible with split-view design
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive verification report documenting the complete build
fix process from initial failure to successful compilation.
Report includes:
- Root cause analysis (archive exclusion + database types issues)
- Step-by-step fix verification
- All 10+ TypeScript errors identified and resolved
- Build configuration changes
- Recommendations for future improvements
File: docs/reports/verification-report-20251123.md (45KB)
This serves as documentation for:
- Understanding what went wrong
- How the issues were systematically resolved
- Best practices for database type management
- Reference for similar issues in the future
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed multiple TypeScript compilation errors that blocked production build:
Component Type Fixes:
- client-sidebar.tsx: Changed icon type from React.ElementType to
React.ComponentType<{ className?: string }> for proper prop typing
- patient-form.tsx: Added type casting for FHIR extension property access
- page.tsx: Added explicit Intake[] type annotation
- document-card.tsx: Added null check for file_size property
- rich-text-editor.tsx: Removed invalid false parameter from setContent()
Data Model Fixes:
- actions.ts (intakes): Changed encounter status 'finished' to 'completed'
(FHIR-compliant value)
- actions.ts (intakes): Set diagnosis clinical_status to always use 'active'
- actions.ts (intakes): Cast treatment_advice to Record<string, any>
Schema Extensions:
- lib/fhir/types/index.ts: Added extension property to FHIRPatient interface
to support custom FHIR extensions (john-doe, insurance, GP, episode-status)
Validation Fixes:
- lib/types/intake.ts: Fixed Zod enum errorMap syntax (changed to message)
All changes ensure type safety while maintaining runtime functionality.
Build now completes successfully with zero TypeScript errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
BREAKING: Removed duplicate lib/database.types.ts in favor of
lib/supabase/database.types.ts
Problem:
- Database types existed in two locations causing sync issues
- Old lib/database.types.ts was empty (0 bytes)
- Import paths were inconsistent across codebase
- Build failed due to missing type definitions
Solution:
- Generated fresh types from remote Supabase database
- Updated all imports from @/lib/database.types to @/lib/supabase/database.types
- Removed duplicate lib/database.types.ts file
Affected modules:
- lib/auth/server.ts - Auth server utilities
- lib/auth/client.ts - Auth client utilities
- lib/types/client.ts - Client type definitions
- lib/fhir/transforms/patient.ts - FHIR patient transforms
- lib/fhir/transforms/practitioner.ts - FHIR practitioner transforms
Impact: All database queries now use up-to-date type definitions
including new tables (intakes, risk_assessments, encounters, etc.)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Epic 2 - Cliëntenbeheer: Complete Level 2 navigation structure with
context-aware header and sidebar for patient dossier.
E2.S3 - Cliënt Header & Nav:
- Create ClientHeader component showing:
* Full patient name with prefix support
* Color-coded status badge (screening/actief/afgerond/afgemeld)
* Last modified timestamp (Dutch format)
* John Doe indicator badge
* Patient ID (subtle display)
- Create ClientSidebar navigation component with:
* Back button to patient list
* Navigation items for all tabs (always visible)
* Active state highlighting
* Icon support for each tab
- Create patient detail layout wrapper:
* Combines header and sidebar
* Full-height flex layout
* Scrollable main content area
- Update patient detail page to dashboard view:
* Quick action cards for Basisgegevens, Screening, Intake
* Next steps guide for workflow
* Remove old edit-only view
- Create Basisgegevens tab page:
* Patient form for editing
* John Doe warning for incomplete registrations
* Pre-populated with existing data
- Create placeholder pages for future epics:
* Screening (Epic 3)
* Intake (Epic 4)
* Diagnose (Epic 6)
* Behandelplan (future)
* Rapportage (future)
Technical implementation:
- app/epd/patients/[id]/components/client-header.tsx: New
- app/epd/patients/[id]/components/client-sidebar.tsx: New
- app/epd/patients/[id]/layout.tsx: New
- app/epd/patients/[id]/page.tsx: Completely rewritten as dashboard
- app/epd/patients/[id]/basisgegevens/page.tsx: New
- app/epd/patients/[id]/screening/page.tsx: New placeholder
- app/epd/patients/[id]/intake/page.tsx: New placeholder
- app/epd/patients/[id]/diagnose/page.tsx: New placeholder
- app/epd/patients/[id]/behandelplan/page.tsx: New placeholder
- app/epd/patients/[id]/rapportage/page.tsx: New placeholder
- docs/specs/screening-intake/bouwplan-screening-intake-v1.0.md: Updated
Epic 2 is now complete with all 3 stories implemented!
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Epic 2 - Cliëntenbeheer: Complete implementation of patient list with
search/filter functionality and comprehensive new patient form with
John Doe crisis admission support.
E2.S1 - Cliëntenlijst:
- Add client-side search bar with form submission
- Implement status filter dropdown (all/screening/active/finished/cancelled)
- Create StatusBadge component with color-coded status indicators
- Update table columns: Status, Name, BSN, Last Updated
- Add status filtering support to FHIR Patient API route
- Update FHIR patient transform to include episode-status extension
- Sort patients by updated_at descending (newest first)
E2.S2 - Nieuwe Cliënt Flow:
- Complete rewrite of patient form with all FO-required fields
- Implement John Doe checkbox with conditional BSN requirement
- Add BSN validation with Dutch Modulo-11 check algorithm
- Add comprehensive form fields:
* Name fields: prefix, given name, family name
* BSN with 9-digit pattern validation
* Birth date with max date validation
* Gender selection
* Address: street, postal code, city
* Contact: phone, email
* Insurance: company, policy number
- Add warning messages for John Doe crisis admissions
- Set default episode status to 'planned' for all new patients
- Redirect to patient detail page after successful creation
- Update FHIR transform bidirectional insurance extension support:
* dbPatientToFHIR: serialize insurance to JSON extension
* fhirPatientToDB: parse insurance from JSON extension
- Pre-populate form fields when editing existing patients
Technical changes:
- app/api/fhir/Patient/route.ts: Add status query param and sorting
- app/epd/patients/actions.ts: Add status filter parameter
- app/epd/patients/page.tsx: Pass status searchParam
- app/epd/patients/components/patient-list.tsx: Complete UI rewrite
- app/epd/patients/components/patient-form.tsx: Complete form rewrite
- lib/fhir/transforms/patient.ts: Add insurance extension handling
- docs/specs/screening-intake/bouwplan-screening-intake-v1.0.md: Update status
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements complete database schema for screening and intake workflow:
Database additions:
- 7 new tables: screenings, screening_activities, screening_documents,
intakes, anamneses, examinations, risk_assessments
- Extended patients table with status (episode_status) and is_john_doe
- Extended encounters table with intake_id for linking
- Extended care_plans with intake reference columns
Architecture:
- Separate tables for reusable content (anamneses, examinations, risk_assessments)
- JSONB fields for context-bound data (kindcheck_data, treatment_advice)
- RLS policies, indexes, and updated_at triggers on all new tables
- Helper view: active_intakes_overview
Generated TypeScript types from schema for type-safe database access.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adjusted hero image height on mobile from min-h-[300px] to h-[40vh]
to ensure content below the fold is visible and scrollable. Desktop
behavior remains unchanged with full viewport height.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update EPD header to fetch and display real client data from database
- Add loading state while fetching client information
- Improve client name and birth date formatting
- Rename ClientDetailPage component to ClientRedirect for clarity
- Fix import path for ReleaseSidebar in documentation layout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Rename releases.ts to documentatie.ts for better naming
- Add 'use client' directives to UI components for client-side rendering
- Add new documentation pages for features:
- Client Management (CRUD operations)
- Intake System (AI-powered intake analysis)
- Treatment Planning (SMART goals and progress tracking)
- Verpleegkundige Overdracht (nursing handover with ROM measurements)
- Voice-Controlled Reporting (AI-driven speech recording)
- Interface Design System (complete UI/UX specifications)
- Build Errors Fix (troubleshooting guide)
- Add client dashboard page with route structure
- Update documentation index with new categories and planned features
- Refactor BentoCard to use native anchor tags instead of Button component
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added new "Bugs" group to release notes system for documenting
bug fixes and troubleshooting guides.
Changes:
- Added "Bugs & Fixes" group to _index.json (order: 4)
- Added "webpack-module-resolution" category under bugs group
- Created comprehensive MDX documentation for webpack fix
- Updated TypeScript types to include 'bugs' as valid group
- Updated sort order in getAllReleases() function
- Updated getReleasesGrouped() to include bugs filter
- Updated sidebar to expand bugs group by default
Content:
- Detailed webpack module resolution bug documentation
- Root cause analysis with technical explanation
- Solution implementation with code examples
- Prevention best practices
- Quick reference troubleshooting table
- Related issues and future improvements
Structure:
Group: Bugs & Fixes (order: 4)
└── Webpack Module Resolution (order: 10)
- Error: Cannot read properties of undefined (reading 'call')
- Fix: Wrapper component pattern
- Status: Completed
- Version: 0.2.1
This creates a dedicated space for documenting production issues,
their solutions, and lessons learned for future reference.
Root cause analysis:
- Next.js 16 Server/Client Component boundary issue
- Webpack module chunking fails with named exports from Client Components
- Error: "Cannot read properties of undefined (reading 'call')"
Solution:
- Created release-sidebar-wrapper.tsx to isolate import boundary
- Server Component (layout.tsx) now imports via wrapper
- Wrapper uses default export, which webpack handles better
Technical details:
- Server Component -> direct import -> Client Component = module undefined
- Wrapper component breaks the problematic import chain
- Default exports handle webpack chunking more reliably than named exports
Documentation:
- Added comprehensive troubleshooting guide
- Documents 4 solution approaches
- Lists best practices to prevent future occurrences
- Identifies other potential problem areas in codebase
Files changed:
- app/(marketing)/releases/layout.tsx (import via wrapper)
- app/(marketing)/releases/components/release-sidebar-wrapper.tsx (new)
- docs/troubleshooting/webpack-module-resolution-error.md (new)
Related: This is a known Next.js 15-16 issue with Server/Client boundaries
Added /releases to publicRoutes in middleware to allow
unauthenticated access to feature documentation.
The documentation pages are part of the build-in-public
approach and should be accessible to everyone.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed terminology from release notes to feature documentation
to better reflect the continuous build-in-public approach.
Changes:
- Navigation: "Releases" → "Documentatie"
- Page titles: "Release Notes" → "Feature Documentatie"
- Metadata descriptions updated
- Timeline link text updated
- Sidebar heading updated
- Template and example docs updated
The /releases route remains the same for stability,
but all user-facing text now says "Documentatie".
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive release note documenting the MDX-based release
notes system itself. Meta-documentation of the documentation system.
Covers:
- MDX content system architecture
- Thematic sidebar navigation
- Overview and detail pages
- Mobile responsive design
- Custom MDX components
- Workflow for adding new releases
- Integration with timeline and navigation
- Performance metrics
This demonstrates the system in action and serves as example
for future release notes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>