Commit graph

75 commits

Author SHA1 Message Date
6a0e9c2fdb refactor(admin): let session auth drive albums/media routes 2025-10-07 05:58:49 -07:00
f5a440a2ca feat(api/server): add posts PATCH and optimistic concurrency (updatedAt) for posts and projects 2025-08-31 11:03:27 -07:00
4f46b0e666 feat: add video upload support with ffmpeg processing
- 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>
2025-08-23 03:13:36 -04:00
f1d0453b63 feat: add comprehensive debug panel for development
- Create DebugPanel component with Now Playing, Albums, and Cache tabs
- Show real-time connection status and update intervals
- Display detailed Apple Music data for each album
- Add inline cache clearing for individual albums
- Implement Apple Music search modal for testing queries
- Add admin endpoints for cache management and API testing
- Only visible in development mode

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 21:32:59 -07:00
cb6ee326c8 fix: improve Apple Music search for singles and Japanese content
- Add fallback to search for songs when album search fails
- Handle artist name variations (with/without spaces in Japanese names)
- Create synthetic album entries for singles not found as albums
- Add search metadata to track failed searches and debug info
- Fix Hachikō preview detection by normalizing artist names

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 21:32:43 -07:00
b84a2637c0 feat: implement smart polling intervals based on track duration
- Adjust update frequency based on remaining track time
- Poll every 5s when <20s remaining, 10s for 20-60s, 15s for >60s
- Add heartbeat timestamps to track update timing
- Implement time-based fallback for tracks without Apple Music data
- Assume tracks scrobbled within 5 minutes are still playing

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 21:32:29 -07:00
4d24be2457 Fix some bad photos changes 2025-07-10 09:33:43 -07:00
103c69664b fix: improve now playing detection reliability
- Always fetch fresh data from Last.fm for now playing detection
- Add confidence-based detection with progress tracking
- Implement dynamic polling intervals (10s when playing, 30s idle)
- Add marquee animation for now playing text in header
- Fix release date formatting to show only year
- Add gradient fade effects to marquee edges
- Enhanced logging for debugging detection issues

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 01:25:31 -07:00
adf01059c2 refactor: improve utility functions and API error handling
- Enhance albumEnricher with better error handling and type safety
- Refactor lastfmStreamManager for cleaner event management
- Update lastfmTransformers with improved data validation
- Add better type guards in mediaHelpers
- Improve nowPlayingDetector logic and state management
- Enhance SSE error handling in Last.fm stream endpoint

Key improvements:
- Better error boundaries and fallback values
- More robust type checking and validation
- Cleaner async/await patterns
- Improved logging for debugging
- Consistent error response formats

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 23:21:48 -07:00
32fd4b5179 refactor: simplify LastFM stream server using extracted utilities
- Reduce from 625 lines to 115 lines (82% reduction)
- Use LastfmStreamManager to handle complex logic
- Cleaner separation of SSE streaming from business logic
- Improved error handling and state management

This completes the LastFM stream server simplification task.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 13:47:45 -04:00
95ab6d6f84 refactor: clean up dead code
- Remove commented getWeeklyAlbumChart line in lastfm server
- Remove commented console.log statement
- Note: TODO for authentication in api-utils.ts will be addressed in a separate security-focused task

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:03:07 -04:00
2bbc306762 refactor: restructure routing - albums at /albums/[slug], photos at /photos/[id]
- Move album routes from /photos/[slug] to /albums/[slug]
- Simplify photo permalinks from /photos/p/[id] to /photos/[id]
- Remove album-scoped photo route /photos/[albumSlug]/[photoId]
- Update all component references to use new routes
- Simplify content.ts to always use direct photo permalinks
- Update PhotoItem, MasonryPhotoGrid, ThreeColumnPhotoGrid components
- Update UniverseAlbumCard and admin AlbumForm view links
- Remove album context from photo navigation

Breaking change: URLs have changed
- Albums: /photos/[slug] → /albums/[slug]
- Photos: /photos/p/[id] → /photos/[id]

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 10:35:21 +01:00
274f1447a2 refactor(server): improve utilities and admin endpoints
- Enhance Apple Music client error handling
- Improve Cloudinary audit functionality
- Update Cloudinary utilities for better performance
- Enhance logger with better formatting
- Add media statistics endpoint
- Improve thumbnail regeneration process
- Update Last.fm stream with better error handling
- Add better TypeScript types throughout

Improves server-side reliability and performance.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:14:57 +01:00
78663151a8 feat(api): improve photo and media APIs with album support
- Update photo APIs to handle album associations via MediaAlbum
- Add support for album-based photo URLs
- Improve media metadata endpoint with better error handling
- Update universe API to include album relations
- Add filtering and pagination to media endpoints
- Support bulk operations for media-album associations
- Improve query performance with better includes

Enhances API flexibility for the new album system.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:13:49 +01:00
cfde42c336 feat(colors): improve color analysis with better algorithms and scripts
- Add comprehensive color analysis scripts for batch processing
- Improve color extraction algorithms in color-utils.ts
- Add endpoints for reanalyzing colors on existing photos
- Add cloudinary color extraction endpoint
- Create detailed README for color analysis scripts
- Support both single and batch color reanalysis
- Improve color palette generation accuracy

Enhances photo color analysis for better visual presentation.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:13:12 +01:00
003e08836e feat(api): add album content support and media management endpoints
- Update album CRUD endpoints to handle content field
- Add /api/albums/[id]/media endpoint for managing album media
- Add /api/media/[id]/albums endpoint for media-album associations
- Create album routes for public album viewing
- Update album queries to use new MediaAlbum join table
- Support filtering and sorting in album listings

Enables rich content albums with flexible media associations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:11:30 +01:00
27dbdd43c0 fix: improve Cloudinary URL handling and admin navigation
- Fix extractPublicId to handle encoded URLs correctly
- Update admin media page to use goto for client-side navigation
- Add color display to media details modal
- Include color data in media API responses
- Clean up unused imports in audit page

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 02:00:00 +01:00
90b450324b feat: add admin tools for color management
- Add regenerate page for batch thumbnail and color processing
- Add API endpoint to extract colors from Cloudinary for existing media
- Add endpoints to reanalyze colors for individual or all media
- Add media statistics endpoint
- Add thumbnail regeneration endpoint for batch processing

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:59:08 +01:00
dab7fdf3ac feat: add color extraction and analysis for media
- Add dominantColor, colors, and aspectRatio fields to Media model
- Integrate Cloudinary color extraction during upload
- Add smart color selection algorithm to pick aesthetically pleasing dominant colors
- Extract and store color palette information
- Include color data in photo API responses

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:58:52 +01:00
a69f1098de Revert masonry thumbnail change 2025-06-18 04:36:47 +01:00
d73619aa24 Serve thumbnails in grid instead of full images 2025-06-17 12:49:05 +01:00
5da6f4c736 Fix Cloudinary media audit 2025-06-17 08:13:43 +01:00
ac0ecf2a92 Add broken reference cleanup functionality to Cloudinary audit
- Add cleanupBrokenReferences function to remove missing Cloudinary URLs from database
- Add PATCH endpoint to API for cleaning broken references
- Add UI section to show broken references with cleanup button
- Add confirmation modal for cleanup action
- Add console logging to debug delete button issue

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 18:57:57 +01:00
4aaf33f19e Ran linter 2025-06-16 17:05:43 +01:00
723f7acbc1 feat: enhance Media Library filtering and sorting
- Add sort functionality (newest, oldest, name A-Z/Z-A, size)
- Update media type filters: Images (JPG/PNG), Videos (MP4/MOV/GIF), Audio, Vectors (SVG)
- Replace photography filter with 'Published in' filter (Photos/Universe/Unpublished)
- Fix API to properly handle JSON array queries with array_contains
- Add comprehensive WHERE clause building for multiple filters

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 17:05:02 +01: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
6132c17a9b Add better masonry and infinite scrolling 2025-06-16 09:58:07 +01:00
4ffcb25a67 Updates for now playing 2025-06-14 18:52:13 -04:00
090b2b95bd Stream new albums over SSE 2025-06-14 14:42:08 -04:00
dd8f97979c Now playing refinements 2025-06-14 10:42:26 -04:00
f41df1d5e8 Avatar now playing reactivity 2025-06-14 00:45:03 -04:00
6a0f1d7d3f Realtime now playing 2025-06-13 22:18:05 -04:00
199abb294f Now playing 2025-06-13 21:50:13 -04:00
cc6eba7df1 Linter 2025-06-13 21:22:49 -04:00
b3979008ae Apple Music API 2025-06-13 21:22:39 -04:00
fe30f9e9b2 Youtube embeds too 2025-06-13 18:13:43 -04:00
b1ddedd586 Embed URL cards 2025-06-13 17:29:29 -04:00
f753d5fb8b Unify fullscreen editors 2025-06-13 14:17:26 -04:00
3096c0ff51 Updates to MediaUploadModal 2025-06-13 12:43:56 -04:00
00fc9b90cc Finish fixing photos architecture 2025-06-13 07:13:06 -04:00
6b44c1b7d0 Simplify photos architecture 2025-06-13 06:55:21 -04:00
610a421207 Better single photo view 2025-06-13 03:47:52 -04:00
d44bcbb80e Fix some console errors 2025-06-11 22:19:07 -07:00
3ba7f6b762 We ran the linter 2025-06-11 00:54:05 -07:00
c6ce13a530 Simplify posts
We had a lot of unnecessary complexity here due to post types that never ended up getting used.

We also made the post slug field reactive and bound to the title field.

We also fixed filters on the Universe admin page so we can filter by unpublished posts too (WIP)

We also fixed the hover state of BackButton
2025-06-11 00:53:54 -07:00
3d993d76ed Remove old post types to reduce confusion 2025-06-11 00:06:44 -07:00
c4eef0b1db Remove from Cloudinary on bulk delete 2025-06-10 21:53:33 -07:00
b3c9529e3f Fix image handling in forms 2025-06-10 20:48:02 -07:00
5edc7eb33b Fix filtering for projects 2025-06-10 19:47:14 -07:00
7869d05e1e Remove log 2025-06-10 09:44:27 -07:00