Commit graph

10 commits

Author SHA1 Message Date
50b297ae2a docs: mark Task 4 list filtering utilities as complete
Task 4 was already ~90% complete when we started Phase 3:
- createListFilters utility already exists and is fully functional
- Uses Svelte 5 runes ($state, $derived) for reactivity
- Generic type-safe configuration with FilterConfig<T>
- Integrated into projects and posts list pages
- Removed ~100 lines of duplicated filtering logic

Changes in this commit:
- Add comprehensive completion documentation (task-4-list-filters-completion.md)
- Update admin modernization plan with Task 4 completion status
- Add test script to package.json for future testing
- Document testing approach (integration-tested, not unit-tested)

Testing notes:
- Rune-based code cannot be unit tested outside Svelte compiler
- Extensively integration-tested through projects/posts pages
- Manual QA complete for all filtering and sorting scenarios

Implementation details documented:
- 8 common sort functions (dateDesc, dateAsc, stringAsc, etc.)
- Filter equality matching with 'all' bypass
- Reactive updates via $derived
- Type-safe API with ListFiltersResult<T>

Media page intentionally uses manual filtering due to server-side
pagination requirements.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 01:06:38 -07:00
a0c8dda3d3 docs: update admin modernization plan with Phase 2 completion
Updates to reflect current progress:
- Added progress overview showing Phase 2 complete
- Marked Task 3 (Project Form) as complete with implementation details
- Marked Task 6 (Autosave Store) as complete with feature summary
- Updated rollout strategy with phase completion status
- Documented 42% reduction in ProjectForm size (720 → 417 lines)

Phase 2 achievements:
- Composable form stores with Svelte 5 runes
- Reusable draft recovery and navigation guards
- Generic autosave store for all forms
- Manual QA complete

Next up: Phase 3 (List utilities & primitives)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 00:40:30 -07:00
1339e81bf4 docs: mark Task 3 project form refactor as complete
Update task-3 plan document with:
- Completion status and commit reference
- Implementation results summary
- Checkboxes for completed phases
- Updated success criteria checklist

All implementation work is complete, manual QA testing pending.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 00:37:49 -07:00
34a3e370ec refactor(admin): modularize ProjectForm with composable stores
Extract reusable form patterns following Svelte 5 best practices:

**New Store Factory** (`project-form.svelte.ts`)
- Centralizes form state management with `$state` and `$derived` runes
- Provides validation, payload building, and field mutation methods
- Type-safe with ProjectFormData interface
- Reusable across different contexts

**New Helpers**
- `useDraftRecovery.svelte.ts`: Generic draft restoration with auto-detection
- `useFormGuards.svelte.ts`: Navigation guards, beforeunload warning, Cmd+S shortcut
- `DraftPrompt.svelte`: Extracted UI component for draft recovery prompts

**Refactored ProjectForm.svelte**
- Reduced from 720 lines to 417 lines (42% reduction)
- Uses new composable helpers instead of inline logic
- Cleaner separation between UI orchestration and business logic
- All form state now managed through formStore
- Draft recovery, navigation guards fully extracted

**Benefits**
- Reusable patterns for PostForm, EssayForm, etc.
- Easier to test helpers in isolation
- Consistent UX across all admin forms
- Better maintainability and code organization

Closes Task 3 of admin modernization plan (Phase 2)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 23:24:50 -07:00
0c5e9c8d13 docs: add Task 3 project form refactor plan
Document the planned refactoring of ProjectForm.svelte to use:
- Store factory for form state management
- Reusable draft recovery helper
- Reusable form guards helper
- Simplified component structure

This will reduce ProjectForm from ~719 lines to ~200-300 lines and
establish patterns for PostForm, EssayForm, and other admin forms.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 22:41:11 -07:00
39e82146d9 docs: update autosave completion guide with new API
Added implementation summary showing:
- All 5 forms now use runes-based autosave
- New reactive API without subscriptions
- Key improvements (prime, auto-idle, smart guards)
- Marked as completed January 2025

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 16:16:32 -07:00
c209417381 feat(admin): add prime() and auto-idle to autosave controller
Enhances autosave controller with missing features:
- prime(payload): Sets initial hash baseline to prevent autosaves on page load
- idleResetMs option: Auto-transitions from 'saved' → 'idle' status (default 2s)
- onSaved callback: Now receives { prime } helper for re-priming after server response
- Cleanup: destroy() now properly clears idle reset timer

All existing tests pass. Backward compatible - forms not using new features yet.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 07:54:49 -07:00
006e1db96e Add modernization plan 2025-10-07 04:49:11 -07:00
7b5af20dee docs: capture autosave roll-out plan 2025-10-07 03:18:02 -07:00
1f04a96dad feat: add Cloudinary audit functionality
- Add comprehensive audit system to identify orphaned Cloudinary files
- Create audit script with dry-run and execute modes
- Add formatBytes utility for human-readable file sizes
- Implement comparison logic between Cloudinary and database references
- Add API endpoint for programmatic access to audit functionality
- Include documentation for Cloudinary management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 16:56:05 +01:00