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>
- Add video MIME types support (WebM, MP4, OGG, MOV, AVI)
- Increase upload size limit to 100MB for videos
- Add ffmpeg integration for local video processing
- Generate video thumbnails at 50% duration
- Extract video metadata (duration, codecs, bitrate)
- Add database fields for video metadata
- Support video uploads in both local and Cloudinary storage
- Maintain aspect ratio for video thumbnails (1920px max width)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Install svelte-awesome-color-picker v4.0.2
- Required for enhanced bubble menu color selection
- Supports Svelte 5 with recent updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add drag handle functionality to editor blocks
- Improve dropdown menu component with better state management
- Enhance composer with AI-powered features
- Update form components to use toast notifications
- Add chevron-right and drag-handle SVG icons
- Various bug fixes and UI refinements
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Install svelte-sonner for toast notifications
- Add dependency to package.json
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive PRD documenting album system redesign
- Update README with new features and setup instructions
- Update package dependencies for new functionality
- Add required packages for geolocation and enhanced editing
- Document new album content structure and API changes
- Include migration guide for existing data
Documents the major architectural changes in this release.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add bash scripts for automated database backup and restore
- Support both full and data-only backups
- Add npm scripts for easy database management
- Add backups/ directory to .gitignore
- Include documentation for backup procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Added Redis for our cache
* GiantBomb API for image lookups (or so we thought)
* Custom fork of psn-api for recently played API
* tinyduration for unwrapping PSN's implemention of ISO 8601 durations