+
+```
+
+**EntryList.svelte** - List of entries:
+
+```svelte
+
+
+{#if entries.length === 0}
+
+
No entries yet
+
Use the capture bar below to add your first entry
+
+{:else}
+
+ {#each entries as entry (entry.id)}
+
+ {/each}
+
+{/if}
+```
+
+Key features:
+- Type indicator: checkbox for tasks, purple "T" badge for thoughts
+- Type badge in corner (blue for task, purple for thought)
+- Completed tasks have strikethrough
+- Mobile compact (border-b), desktop cards (rounded, shadow)
+- Touch-friendly checkbox (44px touch target via touch-target class)
+
+
+TypeScript check: `npm run check` passes.
+Files exist: src/lib/components/EntryCard.svelte, src/lib/components/EntryList.svelte
+
+ EntryCard shows entry with type indicator and completion toggle. EntryList renders all entries.
+
+
+
+ Task 3: Create QuickCapture component and integrate into main page
+ src/lib/components/QuickCapture.svelte, src/routes/+page.svelte
+
+**QuickCapture.svelte** - Bottom capture bar:
+
+```svelte
+
+
+
+```
+
+**+page.svelte** - Main page:
+
+```svelte
+
+
+
+ TaskPlaner
+
+
+
+
+
+
TaskPlaner
+
+
+
+
+
+
+
+
+
+```
+
+Key features:
+- Fixed bottom capture bar with safe area insets
+- Type selector remembers last used type
+- Clear form on successful submit
+- Adequate padding at bottom (pb-40) so entries aren't hidden by capture bar
+- Progressive enhancement: works without JS, enhanced with use:enhance
+
+
+Start dev server: `npm run dev`
+Open http://localhost:5173
+- Entry list should display (may be empty)
+- Quick capture bar should be fixed at bottom
+- Creating an entry should work and appear in list
+- Type preference should stick across page refreshes
+
+ Quick capture bar creates entries. Main page shows entry list with proper bottom padding. Type preference persists.
+
+
+
+
+
+After all tasks complete:
+
+1. **TypeScript**: `npm run check` passes
+2. **Dev server**: `npm run dev` starts without errors
+3. **UI visible**: Entry list renders, quick capture bar at bottom
+4. **Create entry**: Fill in content, click Add - entry appears in list
+5. **Type indicator**: Tasks show checkbox, thoughts show purple badge
+6. **Task toggle**: Clicking checkbox marks task complete (strikethrough)
+7. **Type preference**: Select "task", create entry, refresh page - type selector still shows "task"
+
+Requirements satisfied:
+- CORE-01: Can create entry ✓
+- CORE-04: Can specify type ✓
+- CORE-05: Can mark task complete ✓
+- CAPT-01, CAPT-02, CAPT-03: Quick capture works ✓
+
+
+
+- EntryList and EntryCard components render entries with type indicators
+- QuickCapture component creates entries via form action
+- Type preference persists in localStorage
+- Main page composes all components with proper layout
+- TypeScript compilation passes
+
+
+
diff --git a/.planning/phases/02-core-crud/02-03-PLAN.md b/.planning/phases/02-core-crud/02-03-PLAN.md
new file mode 100644
index 0000000..57a237a
--- /dev/null
+++ b/.planning/phases/02-core-crud/02-03-PLAN.md
@@ -0,0 +1,417 @@
+---
+phase: 02-core-crud
+plan: 03
+type: execute
+wave: 3
+depends_on: [02-02]
+files_modified:
+ - src/lib/components/EntryCard.svelte
+ - src/lib/components/CompletedToggle.svelte
+ - src/routes/+page.svelte
+ - src/routes/+page.server.ts
+autonomous: true
+
+must_haves:
+ truths:
+ - "Clicking an entry expands it to show edit fields"
+ - "Editing title or content auto-saves after typing stops"
+ - "User can toggle show/hide completed tasks"
+ - "User can change entry type after creation"
+ artifacts:
+ - path: "src/lib/components/EntryCard.svelte"
+ provides: "Expandable entry with inline editing"
+ contains: "expanded"
+ - path: "src/lib/components/CompletedToggle.svelte"
+ provides: "Toggle for showing completed tasks"
+ min_lines: 15
+ - path: "src/routes/+page.svelte"
+ provides: "Main page with completed toggle"
+ contains: "CompletedToggle"
+ key_links:
+ - from: "src/lib/components/EntryCard.svelte"
+ to: "src/routes/+page.server.ts"
+ via: "form action ?/update"
+ pattern: "action=.*\\?/update"
+---
+
+
+Implement inline editing with expand/collapse and auto-save, plus completed tasks toggle.
+
+Purpose: Users can click an entry to expand and edit it in place. Changes save automatically as they type (debounced). Completed tasks can be shown/hidden.
+
+Output: Expandable EntryCard with auto-save, CompletedToggle component, updated page with toggle integration.
+
+
+
+@/home/tho/.claude/get-shit-done/workflows/execute-plan.md
+@/home/tho/.claude/get-shit-done/templates/summary.md
+
+
+
+@.planning/PROJECT.md
+@.planning/ROADMAP.md
+@.planning/STATE.md
+@.planning/phases/02-core-crud/02-CONTEXT.md
+@.planning/phases/02-core-crud/02-RESEARCH.md
+@.planning/phases/02-core-crud/02-02-SUMMARY.md
+@src/lib/components/EntryCard.svelte
+@src/routes/+page.svelte
+@src/routes/+page.server.ts
+
+
+
+
+
+ Task 1: Add expand/collapse and inline editing to EntryCard
+ src/lib/components/EntryCard.svelte
+
+Update EntryCard to support expand/collapse with inline editing and debounced auto-save.
+
+Key changes:
+1. Add `expanded` state variable
+2. When collapsed, show title + truncated content (current behavior)
+3. When expanded, show editable fields: title input, content textarea, type selector
+4. Auto-save changes with 400ms debounce using fetch to ?/update
+5. Use Svelte's slide transition for smooth expand/collapse
+
+```svelte
+
+
+
+
+
+
+
+ {#if expanded}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/if}
+
+```
+
+Features:
+- Click anywhere on header to expand/collapse
+- Checkbox click doesn't trigger expand (stopPropagation)
+- Smooth slide transition
+- 400ms debounce on input changes
+- "Saving..." indicator during save
+- Delete with confirmation dialog
+- Type can be changed after creation
+
+
+Start dev server: `npm run dev`
+- Click an entry - should expand
+- Edit title or content - should see "Saving..." briefly
+- Click again - should collapse
+- Change type - should save
+- Delete - should prompt for confirmation
+
+ EntryCard expands/collapses with inline editing and 400ms debounced auto-save
+
+
+
+ Task 2: Create CompletedToggle component and wire up showCompleted
+ src/lib/components/CompletedToggle.svelte, src/routes/+page.svelte, src/routes/+page.server.ts
+
+**CompletedToggle.svelte** - Toggle for showing/hiding completed tasks:
+
+```svelte
+
+
+
+```
+
+**Update +page.server.ts** - Accept showCompleted parameter:
+
+Modify the load function to accept a URL search param:
+
+```typescript
+export const load: PageServerLoad = async ({ url }) => {
+ const showCompleted = url.searchParams.get('showCompleted') === 'true';
+ const entries = entryRepository.getOrdered({ showCompleted });
+ return { entries, showCompleted };
+};
+```
+
+**Update +page.svelte** - Add toggle and use invalidateAll for refresh:
+
+```svelte
+
+
+
+ TaskPlaner
+
+
+
+
+
+
TaskPlaner
+
+
+
+
+
+
+
+
+
+
+```
+
+Note: The preference syncs with URL so the server can filter correctly. When toggle changes, URL updates and data reloads.
+
+
+Start dev server: `npm run dev`
+- Create a task, mark it complete
+- Should disappear from list
+- Check "Show completed" - completed task should appear
+- Refresh page - toggle state should persist
+
+ CompletedToggle shows/hides completed tasks, state persists in preferences and URL
+
+
+
+
+
+After all tasks complete:
+
+1. **TypeScript**: `npm run check` passes
+2. **Expand/collapse**: Click entry to expand, click again to collapse
+3. **Inline editing**: Title, content, type can be edited in expanded view
+4. **Auto-save**: Editing shows "Saving..." then saves (no need to click save)
+5. **Delete**: Delete button in expanded view with confirmation
+6. **Completed toggle**: Checkbox in header shows/hides completed tasks
+7. **Persistence**: Toggle state persists across page refreshes
+
+Requirements satisfied:
+- CORE-02: Edit entry ✓
+- CORE-03: Delete entry ✓ (with confirmation)
+- CORE-06: Add notes (append to content) ✓
+
+
+
+- EntryCard expands on click to show edit fields
+- Changes auto-save with 400ms debounce
+- Delete button with confirmation dialog
+- CompletedToggle shows/hides completed tasks
+- Toggle state persists in localStorage
+- TypeScript compilation passes
+
+
+
diff --git a/.planning/phases/02-core-crud/02-04-PLAN.md b/.planning/phases/02-core-crud/02-04-PLAN.md
new file mode 100644
index 0000000..8d9b4ce
--- /dev/null
+++ b/.planning/phases/02-core-crud/02-04-PLAN.md
@@ -0,0 +1,255 @@
+---
+phase: 02-core-crud
+plan: 04
+type: execute
+wave: 4
+depends_on: [02-03]
+files_modified:
+ - src/lib/components/EntryCard.svelte
+ - package.json
+autonomous: false
+
+must_haves:
+ truths:
+ - "User can swipe left on mobile to delete an entry"
+ - "Touch targets are at least 44x44px"
+ - "UI is usable on mobile devices (tested)"
+ - "Delete via swipe shows confirmation before deleting"
+ artifacts:
+ - path: "src/lib/components/EntryCard.svelte"
+ provides: "Swipe-to-delete functionality"
+ contains: "svelte-gestures"
+ - path: "package.json"
+ provides: "svelte-gestures dependency"
+ contains: "svelte-gestures"
+ key_links:
+ - from: "src/lib/components/EntryCard.svelte"
+ to: "src/routes/+page.server.ts"
+ via: "form action ?/delete"
+ pattern: "action=.*\\?/delete"
+---
+
+
+Implement swipe-to-delete gesture for mobile and verify overall mobile UX.
+
+Purpose: Mobile users can swipe left to delete entries (common mobile pattern). Final verification ensures all touch targets meet WCAG guidelines and UI works well on mobile.
+
+Output: Swipe-to-delete on EntryCard, verified mobile-friendly UI.
+
+
+
+@/home/tho/.claude/get-shit-done/workflows/execute-plan.md
+@/home/tho/.claude/get-shit-done/templates/summary.md
+
+
+
+@.planning/PROJECT.md
+@.planning/ROADMAP.md
+@.planning/STATE.md
+@.planning/phases/02-core-crud/02-CONTEXT.md
+@.planning/phases/02-core-crud/02-RESEARCH.md
+@.planning/phases/02-core-crud/02-03-SUMMARY.md
+@src/lib/components/EntryCard.svelte
+
+
+
+
+
+ Task 1: Install svelte-gestures and implement swipe-to-delete
+ package.json, src/lib/components/EntryCard.svelte
+
+Install svelte-gestures:
+
+```bash
+npm install svelte-gestures
+```
+
+Update EntryCard.svelte to add swipe-to-delete functionality:
+
+1. Import the swipe action from svelte-gestures
+2. Wrap the entry in a swipeable container
+3. On left swipe, show confirmation then delete
+4. Add visual feedback (red background revealing during swipe)
+5. On desktop, keep the delete button in expanded view (swipe is touch-only)
+
+Add to the script section:
+
+```typescript
+import { swipe } from 'svelte-gestures';
+
+// Swipe state
+let swipeOffset = $state(0);
+let isConfirmingDelete = $state(false);
+
+function handleSwipe(event: CustomEvent) {
+ const { direction } = event.detail;
+ if (direction === 'left') {
+ // Show confirmation
+ isConfirmingDelete = true;
+ }
+}
+
+function handleSwipeMove(event: CustomEvent) {
+ // Visual feedback during swipe
+ const { offsetX } = event.detail;
+ if (offsetX < 0) {
+ swipeOffset = Math.max(offsetX, -100); // Cap at -100px
+ }
+}
+
+function handleSwipeEnd() {
+ if (!isConfirmingDelete) {
+ swipeOffset = 0;
+ }
+}
+
+function cancelDelete() {
+ isConfirmingDelete = false;
+ swipeOffset = 0;
+}
+
+async function confirmDelete() {
+ const formData = new FormData();
+ formData.append('id', entry.id);
+
+ await fetch('?/delete', {
+ method: 'POST',
+ body: formData
+ });
+
+ // Refresh page to show updated list
+ window.location.reload();
+}
+```
+
+Update the template to wrap in a swipeable container:
+
+```svelte
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if isConfirmingDelete}
+
+
+
+
+ {/if}
+
+```
+
+Key behaviors:
+- Swipe left reveals red delete icon
+- If swipe distance > 60px, show confirmation overlay
+- Confirmation has Cancel and Delete buttons
+- On desktop, swipe doesn't trigger (touch-only)
+- Delete button in expanded view still works for desktop users
+
+
+npm install completes.
+TypeScript check: `npm run check` passes.
+Start dev server: `npm run dev`
+Open in browser dev tools mobile view:
+- Swipe left on an entry
+- Red background should reveal
+- Release after 60px+ swipe shows confirmation
+- Cancel returns to normal, Delete removes entry
+
+ Swipe-to-delete works on mobile with confirmation overlay
+
+
+
+
+Complete Phase 2 UI with:
+- Entry list showing tasks and thoughts
+- Quick capture bar at bottom
+- Inline editing with auto-save
+- Swipe-to-delete on mobile
+- Show/hide completed toggle
+- Mobile-responsive layout
+
+
+1. **Desktop verification** (http://localhost:5173):
+ - Create a task via quick capture - should appear in list
+ - Create a thought - should appear with purple indicator
+ - Click an entry - should expand with edit fields
+ - Edit title/content - should auto-save (see "Saving...")
+ - Mark a task complete - checkbox should fill, task may disappear
+ - Check "Show completed" - completed task reappears
+ - Delete an entry via expanded view - should prompt then remove
+
+2. **Mobile verification** (use browser dev tools mobile mode OR actual phone):
+ - Quick capture bar should be at bottom, thumb-friendly
+ - Type selector and Add button should be reachable
+ - Entries should be tappable to expand
+ - Swipe left on an entry - red trash icon reveals
+ - Complete swipe - confirmation appears
+ - Tap Delete - entry removed
+ - Touch targets feel adequately sized (not too small)
+ - Text is readable (not tiny)
+
+3. **Font/Accessibility**:
+ - Base text should be at least 16px
+ - No text smaller than 14px anywhere
+ - Buttons and checkboxes are easy to tap
+
+ Type "approved" if all checks pass, or describe any issues found
+
+
+
+
+
+After all tasks complete:
+
+1. **TypeScript**: `npm run check` passes
+2. **Swipe gesture**: Works on mobile/touch devices
+3. **Touch targets**: All interactive elements >= 44x44px
+4. **Font sizes**: Base 16px, no text under 14px
+5. **Mobile layout**: Compact list, bottom capture bar
+6. **Desktop layout**: Card style entries, adequate spacing
+
+Requirements satisfied:
+- UX-01: Mobile-friendly ✓
+- UX-02: Readable fonts ✓
+- UX-03: Cross-browser (SvelteKit handles) ✓
+
+
+
+- Swipe-to-delete works on mobile with confirmation
+- All touch targets meet WCAG 44x44px minimum
+- UI verified working on both desktop and mobile
+- User approves the UI at checkpoint
+- All Phase 2 requirements complete
+
+
+