Commit Graph

9 Commits

Author SHA1 Message Date
colinislit
a10a4c3813 feat(swift): implementeer slide-in animaties + Epic 4 compleet (E4.S3)
Epic 4 volledig afgerond! Artifact systeem compleet met tabs, lifecycle, en animaties.
Voortgang: 58 SP / 82 SP (71%) - 21/31 stories compleet, 3 geskipt

E4.S3 - Slide-in Animatie (2 SP)
- artifact-enter keyframes in globals.css (200ms ease-out)
- Slide van rechts: translateX(100%) → translateX(0) met opacity fade
- Reduced motion support: animation: none bij prefers-reduced-motion
- ArtifactContainer: artifact-enter class op content wrapper
- Key prop (activeArtifact.id) triggert re-animation bij switch
- Smooth visuele feedback bij artifact opening/switching
- Build succesvol zonder errors

E4.S4 - GESKIPT (Placeholder State)
- Placeholder al volledig geïmplementeerd in E4.S1
- Bevat emoji (📋), titel, en voorbeelden zoals gespecificeerd
- 3 SP geannuleerd (totaal nu 82 SP i.p.v. 85 SP)

Epic 4 Samenvatting:
-  E4.S1: ArtifactContainer met tabs (5 SP)
-  E4.S2: Lifecycle management (3 SP)
-  E4.S3: Slide-in animaties (2 SP)
-  E4.S4: Placeholder (geskipt, in E4.S1)

Components Updated:
- app/globals.css: artifact-enter keyframes + reduced motion support
- artifact-container.tsx: animatie class op wrapper met key prop

Documentatie:
- Bouwplan bijgewerkt naar v3.0 (Epic 4 compleet)
- E4.S3 deliverables gedocumenteerd
- E4.S4 skip rationale toegevoegd
- Voortgang: 71% compleet (58/82 SP)
- Epic overzicht: 4/6 epics compleet

Volgende Epic: E5 (AI-Filtering & Polish) - 13 SP

🎉 Epic 4 compleet! Artifact systeem volledig functioneel!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 16:39:46 +01:00
colinislit
f6c422bb14 feat(swift): implementeer artifact lifecycle management (E4.S2)
Epic 4 Story 2 compleet: Meerdere artifacts met open/close/switch werken!

E4.S2 - Artifact Lifecycle Management (3 SP)
- Store state: openArtifacts[], activeArtifactId
- Store actions met max 3 artifacts logica
- ArtifactArea refactor naar ArtifactContainer
- CommandCenter integration met nieuwe artifact system

Store Updates (stores/swift-store.ts):
- openArtifacts: Artifact[] — Array van open artifacts
- activeArtifactId: string | null — Currently active artifact
- Initial state: [], null

Store Actions:
```typescript
openArtifact(artifact: Omit<Artifact, 'id' | 'createdAt'>) {
  // Auto-generate ID + timestamp
  // Max 3 artifacts: remove oldest if at capacity
  // Set new artifact as active
}

closeArtifact(id: string) {
  // Filter out artifact
  // Auto-switch to last remaining if closing active
}

switchArtifact(id: string) {
  // Verify artifact exists
  // Set activeArtifactId
}

closeAllArtifacts() {
  // Clear all artifacts + active ID
}
```

Features:
- Max 3 artifacts enforced (oldest removed at capacity)
- Auto-switch when closing active artifact
- Console logging voor debugging
- ID generation met crypto.randomUUID()
- Timestamp tracking met createdAt

Components Updated:
- components/swift/artifacts/artifact-area.tsx (30 regels)
  - Simplified: alleen ArtifactContainer rendering
  - Props: openArtifacts, activeArtifactId, switchArtifact, closeArtifact

- components/swift/command-center/command-center.tsx
  - openArtifact() i.p.v. openBlock()
  - getArtifactTitle() voor dynamic titles
  - Escape: closeAllArtifacts() i.p.v. closeBlock()
  - Artifact opening met title generation

Integration Flow:
1. Chat: AI genereert action met artifact data
2. ChatPanel: setPendingAction(action)
3. CommandCenter: useEffect detecteert pendingAction
4. CommandCenter: getArtifactTitle(type, prefill)
5. CommandCenter: openArtifact({ type, prefill, title })
6. Store: Auto-generate ID, check max 3, add to array
7. ArtifactArea: Renders ArtifactContainer met artifacts
8. ArtifactContainer: Shows tabs (if >1), renders active block

Console Logging:
- "[Store] Max 3 artifacts reached, removing oldest"
- "[Store] Opening artifact: dagnotitie Dagnotitie - Jan"
- "[Store] Closing artifact: [id] New active: [id]"
- "[Store] Switching to artifact: [id]"
- "[Store] Cannot switch to artifact: [id] (not found)"

Build Status:
-  pnpm build succesvol (geen type errors)
- Alleen bekende warnings (Supabase realtime, useCallback)

Voortgang: 56 SP / 85 SP (66%) - 18/31 stories compleet, 2 geskipt

Next: E4.S3 (Slide-in animatie) - 200ms ease-out transitions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 16:33:56 +01:00
colinislit
855744c927 feat(swift): implementeer ArtifactContainer met tabs (E4.S1)
Epic 4 Story 1 compleet: Basis structuur voor meerdere artifacts met tabs.

E4.S1 - ArtifactContainer Component (5 SP)
- Artifact interface gedefineerd in store
- ArtifactTab component met active state en close button
- ArtifactContainer met conditional tab rendering
- Helper functies voor artifact rendering en titels

Nieuwe Components:
- components/swift/artifacts/artifact-tab.tsx (60 regels)
  - Tab UI met title, active state, close button
  - Hover effects en opacity animations
  - Min/max width, title truncation met tooltip
  - Stop propagation op close click

- components/swift/artifacts/artifact-container.tsx (127 regels)
  - Props: artifacts[], activeArtifactId, onSelect, onClose
  - Tabs alleen bij >1 artifact
  - renderArtifactBlock(): switch op artifact type
  - getArtifactTitle(): user-friendly titles met patient naam
  - Placeholder state wanneer geen artifacts

Artifact Interface:
```typescript
interface Artifact {
  id: string;
  type: BlockType;
  prefill: BlockPrefillData;
  title: string;
  createdAt: Date;
}
```

Features:
- Tab rendering: alleen bij meerdere artifacts
- Active tab styling: amber-500 border bottom
- Close button: opacity 0 → 100 on hover/active
- Title generation: "Dagnotitie - Jan" voor context
- Block rendering: dagnotitie, zoeken, overdracht, fallback
- Placeholder: "Artifacts verschijnen hier" met voorbeelden
- Responsive: min-w-[140px] max-w-[200px] per tab

Tab Styling:
- Active: bg-white + border-b-2 border-b-amber-500
- Hover: bg-slate-50
- Close button: group-hover:opacity-100
- Text: text-sm font-medium truncate

Build Status:
-  pnpm build succesvol (geen type errors)
- Alleen bekende warnings (Supabase realtime, useCallback)

Note: E4.S1 definieert structuur. E4.S2 voegt store management toe
(openArtifacts[], activeArtifactId, openArtifact(), closeArtifact()).

Voortgang: 53 SP / 85 SP (62%) - 17/31 stories compleet, 2 geskipt

Next: E4.S2 (Artifact lifecycle management) - Store state & actions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 16:29:01 +01:00
colinislit
3814189934 feat(swift): implementeer artifact opening from chat (E3.S6) 🎉
Epic 3 Story 6 compleet: Artifacts openen automatisch vanuit chat!
🎉 EPIC 3 COMPLEET - Medical Scribe Chat werkt end-to-end!

E3.S6 - Artifact Opening from Chat (2 SP)
- PendingAction state triggers artifact opening
- useEffect in CommandCenter luistert naar pendingAction
- Automatische block opening met prefill data
- Visual flow: Chat → AI → Action → Artifact verschijnt rechts

Components Updated:
- components/swift/artifacts/artifact-area.tsx (86 regels)
  - Renders DagnotatieBlock, ZoekenBlock, OverdrachtBlock
  - Placeholder state wanneer geen block actief
  - Conditional rendering based on activeBlock state

- components/swift/command-center/command-center.tsx
  - useEffect voor pendingAction handling
  - openBlock(type, prefill) aanroep
  - setPendingAction(null) cleanup
  - Console logging voor debugging

Artifact Opening Flow:
1. User: "Notitie voor Jan: medicatie gegeven"
2. AI response met JSON action (confidence 0.95)
3. ChatPanel: parseActionFromResponse()
4. ChatPanel: setPendingAction(action) if confidence ≥ 0.7
5. CommandCenter: useEffect triggers op pendingAction
6. CommandCenter: openBlock('dagnotitie', { patientName: 'Jan', ... })
7. ArtifactArea: Renders DagnotatieBlock met prefill
8. setPendingAction(null) cleanup

Features:
- Automatische artifact opening bij high confidence (≥0.7)
- Prefill data van AI naar block (patientName, category, content, etc.)
- Console logging voor debugging:
  - "[CommandCenter] Processing pending action: {...}"
  - "[CommandCenter] Opening artifact: dagnotitie with prefill: {...}"
- Placeholder state met voorbeelden wanneer geen artifact actief
- Overflow-y-auto voor scrollable artifacts

Blocks Supported:
- dagnotitie → DagnotatieBlock
- zoeken → ZoekenBlock
- overdracht → OverdrachtBlock
- fallback → FallbackPicker

Build Status:
-  pnpm build succesvol (geen type errors)
- Alleen bekende warnings (Supabase realtime, useCallback)

Epic 3 Summary (Chat API & Medical Scribe):
-  E3.S1 — Chat API endpoint skeleton (3 SP)
-  E3.S2 — Streaming response logic (5 SP)
-  E3.S3 — Medical scribe system prompt (3 SP)
-  E3.S4 — Intent detection in response (5 SP)
-  E3.S5 — Frontend streaming (GESKIPT - 3 SP)
-  E3.S6 — Artifact opening from chat (2 SP)

Epic 3 Stats: 5/6 stories (18 SP), 1 geskipt (3 SP)

Voortgang: 48 SP / 85 SP (56%) - 16/31 stories compleet, 2 geskipt

Next Epic: E4 (Artifact Area & Tabs) - Meerdere artifacts, tabs, animaties

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 16:23:00 +01:00
colinislit
5b10176a39 docs(swift): skip E3.S5 - streaming logica al in ChatPanel
E3.S5 (Frontend streaming handling) geskipt:
- useChatStream hook niet nodig (YAGNI)
- Streaming logica al werkend in ChatPanel (E3.S2)
- Geen andere components gebruiken streaming
- E3.S6 dependencies aangepast: nu E3.S4 i.p.v. E3.S5

Status update:
- Epic 3: 5/6 stories (4 compleet, 1 geskipt, 1 to do)
- Voortgang: 15/31 compleet, 1 geskipt (46 SP / 85 SP = 54%)
- Next: E3.S6 (Artifact opening) - laatste story Epic 3!
2025-12-27 16:19:13 +01:00
colinislit
9b85448a43 feat(swift): implementeer intent detection & action parsing (E3.S4)
Epic 3 Story 4 compleet: AI action objects worden geparsed en gevalideerd.

E3.S4 - Intent Detection in Response (5 SP)
- Action parser met JSON extraction uit markdown code blocks
- Zod validatie voor action schema (intent, entities, confidence, artifact)
- Confidence-based artifact opening (≥0.7 threshold)
- Visual feedback met action badges in chat messages
- Console logging voor debugging

Nieuwe Components:
- lib/swift/action-parser.ts (149 regels)
  - parseActionFromResponse(): Extract & validate JSON actions
  - extractJsonBlock(): Regex matching voor ```json blocks
  - removeJsonBlocks(): Clean text zonder JSON
  - shouldOpenArtifact(): Confidence check (≥0.7)
  - getConfidenceLabel(): "Zeer zeker", "Redelijk zeker", etc.
  - validateArtifactType(): Intent/artifact type matching

Components Updated:
- components/swift/chat/chat-panel.tsx
  - Action parsing in onDone callback
  - setPendingAction voor artifact opening (E3.S6)
  - Console logging: "[ChatPanel] Action detected"

- components/swift/chat/chat-message.tsx
  - Action badge met Sparkles icon
  - Intent label (Dagnotitie, Patiënt zoeken, Overdracht)
  - CheckCircle icon voor high confidence (≥0.7)
  - Confidence label display

- stores/swift-store.ts
  - updateLastMessage(): Optional action parameter
  - Type-safe action assignment (null/undefined handling)

Features:
- JSON extraction via regex: /```json\s*\n([\s\S]*?)\n```/
- Zod schema: type, intent, entities, confidence, artifact
- Confidence thresholds: >0.9, 0.7-0.9, 0.5-0.7, <0.5
- Visual feedback: Sparkles + CheckCircle icons
- Cleaned text content (JSON removed from display)
- Action stored in message.action en pendingAction state

Action Schema:
```typescript
{
  type: "action",
  intent: "dagnotitie" | "zoeken" | "overdracht" | "unknown",
  entities: {
    patientName?: string,
    patientId?: string,
    category?: "medicatie" | "adl" | "gedrag" | "incident" | "observatie",
    content?: string,
    query?: string
  },
  confidence: number, // 0-1
  artifact?: {
    type: BlockType,
    prefill: Record<string, any>
  }
}
```

Build Status:
-  pnpm build succesvol (geen type errors)
- Alleen bekende warnings (Supabase realtime, useCallback)

Voortgang: 46 SP / 85 SP (54%) - E3.S4 compleet

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 16:11:43 +01:00
colinislit
8efac8483f feat(swift): implementeer medical scribe system prompt (E3.S3)
Epic 3 Story 3 compleet: Volledige medical scribe prompt v1.0 geïmplementeerd.

E3.S3 - Medical Scribe System Prompt (3 SP)
- buildMedicalScribePrompt() functie (243 regels)
- Intent detection voor P1 intents: dagnotitie, zoeken, overdracht
- P2 intents: rapportage, agenda
- Confidence thresholds (>0.9, 0.7-0.9, 0.5-0.7, <0.5)
- JSON action object format met artifact prefill
- Context injection (activePatient, shift)
- Verduidelijkingsvragen en error handling
- Nederlands tone of voice (vriendelijk, professioneel, to-the-point)
- 4 voorbeelden: happy path, zoeken, verduidelijking, onduidelijke intent

Key Features:
- Intent herkenning met triggers en entities
- Automatische category detection (medicatie/adl/gedrag/incident/observatie)
- Slim gebruik van context (activePatient als default)
- Follow-up conversatie support
- Error handling met Nederlandse messages

Prompt Structuur:
- Je rol: medical scribe voor Swift GGZ EPD
- Wat je doet: intents herkennen, verduidelijken, actions genereren
- Wat je NIET doet: medisch advies, aannames, lange uitleg
- Context: activePatient, shift injection
- Voorbeelden: 4 concrete user flows

Components Updated:
- app/api/swift/chat/route.ts: buildMedicalScribePrompt() functie

Documentatie:
- docs/swift/e0-medical-scribe-system-prompt.md (519 regels)
- docs/swift/e0-design-tokens-and-components.md (E0.S1 & E0.S2)
- docs/swift/bouwplan-swift-v3.md: E3.S3  compleet

Build Status:
-  pnpm build succesvol (geen type errors)
- Alleen bekende Supabase realtime warnings

Voortgang: 41 SP / 85 SP (48%) - E3.S3 compleet

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 14:46:26 +01:00
colinislit
b6fccc6e44 docs(swift): update bouwplan v3 - Epic 2 compleet
Epic 2 Progress Update:
- Epic 2 status:  To Do →  Compleet (5/5 stories, 13 SP)
- E2.S1 - E2.S5: Alle stories gemarkeerd als compleet
- Overall progress: 20% → 35% (11/31 stories, 30/85 SP)

Deliverables toegevoegd:
- Store uitbreiding (+87 regels)
- ChatMessage component (76 regels)
- ChatPanel component (148 regels)
- ChatInput component (184 regels)
- Keyboard shortcuts (⌘K, Esc, Enter, Shift+Enter)
- Auto-scroll, scroll-lock, scroll-to-bottom button
- Cross-platform support

Git commits gedocumenteerd:
- e3ff72c (E2.S1 & E2.S2)
- b5e245e (E2.S3)
- 8f6f24f (E2.S4)
- d2931a3 (E2.S5)

Changes:
- Epic overzicht tabel: E2 status updated naar Compleet
- E2 stories table: Alle stories  Compleet
- Totale voortgang: 11/31 stories (35%)
- Deliverables sectie toegevoegd met file details
- E2.S5 technical notes toegevoegd

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 14:16:02 +01:00
colinislit
c77f1eb554 redesigdn docs 2025-12-27 13:17:00 +01:00