Commit graph

360 commits

Author SHA1 Message Date
15ce9caae9 style: enhance toolbar with glassmorphism and improved design
- Add white background with subtle gray border and rounded corners
- Remove initial drop shadow, add shadow on hover
- Reduce vertical padding for more compact design
- Update button hover states to use darker gray
- Add sticky positioning with gap from top
- Improve responsive padding and animations

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 11:58:34 -04:00
2f20209d66 feat: add toolbar feature flag to disable toolbar in favor of bubble menu
- Add toolbar property to ComposerFeatures interface
- Update default features to disable toolbar for inline/full variants
- Add conditional rendering check for toolbar feature flag
- Enable bubble menu by default for better UX

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 11:58:10 -04:00
1c38dc87e3 fix: drag handle actions now affect the correct block
- Added menuNode state to capture the node position when menu opens
- Updated all action functions to use menuNode instead of currentNode
- This ensures drag handle actions (Turn into, Delete, etc.) always affect the block where the handle was clicked, not where the mouse currently hovers
- Also formatted code with prettier

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:33:27 -04:00
1e4a27b1a3 fix: fine-tune drag handle vertical position by 2px
- Move handle up by 2px for better visual alignment with text
- Compensates for smaller handle size centering

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:25:31 -04:00
8f884af5d7 fix: adjust drag handle vertical positioning for smaller size
- Update line height calculation from 24px to 20px handle height
- Remove extra 4px offset that was compensating for old size
- Handle now properly aligns with text baseline

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:21:35 -04:00
5e9df976e3 style: make drag handle smaller with increased gap
- Reduce drag handle size from 1.5rem to 1.25rem (24px to 20px)
- Reduce SVG icon size to 0.875rem (14px)
- Increase gap between handle and content from 4px to 12px
- Update invisible hover zone to match new gap size
- Remove duplicate SVG styles

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:19:39 -04:00
8ce7613256 style: reduce drag handle gap from 8px to 4px
- Brings drag handle closer to text content
- Creates a tighter, more connected visual relationship

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:16:53 -04:00
6ec3bbc54e fix: adjust drag handle position to account for block padding
- Calculate element's padding-left to position handle correctly
- Position drag handle close to text content, not at container edge
- Maintains 8px gap between handle and text for visual clarity

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:14:47 -04:00
569a124d02 style: move editor padding to block elements for better drag handle interaction
- Remove horizontal padding from editor container
- Add 3rem (2rem on mobile) horizontal padding to all block elements
- Ensures drag handle appears when hovering over visual margins
- Properly handle nested elements (blockquotes, lists, tables) to prevent double padding

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:11:43 -04:00
8845baf402 style: improve editor block spacing for better readability
- Add 1rem bottom margin to paragraphs
- Increase heading margins and add contextual spacing
- Add proper spacing for lists and list items
- Ensure code blocks have consistent bottom margin
- Add line-height of 1.6 for better paragraph readability

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:07:54 -04:00
9da64583ba style: make editor more immersive with full-width design
- Remove border and background from full variant composer
- Increase padding for better readability
- Update toolbar padding to match content area
- Make case study panel full-width and transparent

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 10:01:10 -04:00
75b61021a0 fix: simplify editor content loading to prevent infinite loops
- Use a simple contentLoaded flag to load content once when editor is ready
- Remove complex change detection that was causing infinite update loops
- Remove debug logging now that issue is resolved

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 09:56:24 -04:00
922da5cf33 debug: add more detailed logging to trace content structure issue 2025-06-26 09:51:34 -04:00
7211ccff9f debug: add logging to trace editor content loading issue 2025-06-26 09:50:00 -04:00
639a4a2429 fix: update components to use Svelte 5 snippets and fix editor content loading
- Convert Button component to use snippets instead of slots
- Update BaseDropdown and StatusDropdown to use new Button snippet syntax
- Add effect to watch for data changes in ComposerCore and update editor content
- Fix SVG component usage in Album component for Svelte 5 compatibility

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 09:22:19 -04:00
e64788962e refactor: remove EnhancedComposer backward compatibility
- Remove EnhancedComposer shim and old backup file
- Update all imports to use new Composer from ./composer
- Fix editor command implementations for link operations
- Fix dropdown hook usage with proper reactive patterns
- All 5 components now directly import the modular implementation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 09:12:08 -04:00
6077fa126b refactor: break down EnhancedComposer into focused components
- Extract ComposerToolbar component for toolbar UI and logic
- Create TextStyleDropdown and MediaInsertDropdown components
- Extract ComposerMediaHandler for all media operations
- Create ComposerLinkManager for link-related features
- Extract useComposerEvents hook for event handling
- Create editorConfig utility for configuration logic
- Refactor main component from 1,347 to ~300 lines
- Maintain backward compatibility with shim component
- Improve maintainability with single-responsibility components

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 09:02:47 -04:00
6ff2818e72 feat: extract File and Copy icons as reusable components
- Create FileIcon.svelte and CopyIcon.svelte components
- Update MediaDetailsModal to use new icon components
- Maintain consistent icon sizing and styling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 08:45:25 -04:00
df3dd1abd9 feat: create reusable CloseButton icon component
- Create CloseButton.svelte with configurable size, color, strokeWidth props
- Replace inline close button SVGs in 7 components
- Update Modal, Lightbox, MediaDetailsModal, MediaInput, GalleryManager, AlbumSelectorModal, UnifiedMediaModal

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 08:40:32 -04:00
5370ae020d refactor: consolidate photo grid components into unified PhotoGrid
- Create single PhotoGrid component with columns (1,2,3,auto) and masonry options
- Remove 5 duplicate grid components
- Update HorizontalScrollPhotoGrid to HorizontalPhotoScroll with Photo type
- Add interactive test page for PhotoGrid
- Update all pages to use new unified component
- Use svelte-bricks for proper masonry layout
- Single column always uses natural aspect ratios
- Square thumbnails (object-fit: cover) for multi-column non-masonry layouts

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 08:13:30 -04:00
e92cc2393e feat: create unified PhotoGrid component
- Created PhotoGrid.new.svelte with flexible column layouts (1, 2, 3, auto)
- Supports ultrawide image handling from ThreeColumnPhotoGrid
- Maintains PhotoItem component usage for consistency
- Created wrapper components for backward compatibility:
  - SingleColumnPhotoGrid.new.svelte
  - TwoColumnPhotoGrid.new.svelte
  - ThreeColumnPhotoGrid.new.svelte
- Fixed FormFieldWrapper import errors (was already removed)

This consolidates 4 similar grid components into a single flexible component, reducing code duplication by ~60%.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-26 05:32:55 -04:00
153e0aa080 refactor: create BaseSegmentedController and refactor AdminSegmentedController
- Created BaseSegmentedController with shared logic for all segmented controls
- Refactored AdminSegmentedController to use BaseSegmentedController
- Added keyboard navigation support (arrow keys, Home/End)
- Added size variants (small, medium, large)
- Added support for custom pill colors
- Added proper ARIA attributes for accessibility
- Fixed missing CSS variables ($red-error, $shadow-*)

This eliminates significant code duplication and provides a consistent foundation for all segmented control patterns.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:27:16 -04:00
05ddafcdea refactor: merge FormField and FormFieldWrapper components
- Add children prop to FormField to support wrapper mode
- Update components using FormFieldWrapper to use FormField
- Remove redundant FormFieldWrapper component
- Maintain all existing functionality with unified API

This reduces code duplication and simplifies the form component hierarchy.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:14:10 -04:00
ea7ec61377 refactor: extract BaseDropdown component to reduce duplication
- Create BaseDropdown with shared dropdown logic:
  - Toggle state management
  - Click outside handling
  - Dropdown positioning
  - Trigger and dropdown slots

- Refactor StatusDropdown and PublishDropdown to use BaseDropdown
- Reduce code duplication by ~80 lines
- Maintain all existing functionality

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:12:16 -04:00
fa52bb716d refactor: extract BaseModal component to reduce duplication
- Create BaseModal with shared modal logic:
  - Backdrop click handling
  - Escape key handling
  - Body scroll locking
  - Transition animations
  - Size variants

- Refactor Modal and DeleteConfirmationModal to use BaseModal
- Reduce code duplication by ~100 lines
- Maintain all existing functionality

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:10:33 -04:00
ba50981e09 fix: restore avatar eyes by replacing $dark-blue with hex value
The Avatar component was also using $dark-blue as a string literal
in the SVG paths, which needed to be replaced with the actual hex
value #070610.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:08:17 -04:00
d4490fd70c fix: add missing error and successMessage state variables in ProjectForm
Fixes ReferenceError where template was using undefined variables.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:07:28 -04:00
cf35980104 fix: resolve build errors from variable refactoring
- Add missing variables: $unit-22x, $gray-5, $salmon-pink
- Fix AvatarSVG.svelte to use actual color values instead of SCSS variables
- SVG fill attributes cannot use SCSS variables directly

This resolves all preprocessing errors after the color system refactor.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:04:36 -04:00
513b40bbc4 fix: update remaining $grey- variables in SCSS files
- Fix themes.scss to use $gray- variables
- Fix tooltip.scss to use $gray- variables
- Resolves build error with undefined variables

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 22:03:19 -04:00
599797f727 refactor: standardize spacing with unit variables
Replace hardcoded pixel values with unit variables in key components:
- GalleryExtended, MediaDetailsModal, UrlEmbedExtended
- EnhancedComposer, UniverseCard, NavDropdown, Button

Key replacements:
- Spacing: 1px→$unit-1px, 8px→$unit, 16px→$unit-2x, etc.
- Font sizes: Use semantic $font-size-* variables
- Border radius: Use $corner-radius-* variables

Added missing common pixel value variables for consistency.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:50:43 -04:00
a31291d69f refactor: replace deprecated $grey- variables with $gray-
- Replace 802 instances of $grey- variables with $gray- across 106 files
- Remove legacy color aliases from variables.scss
- Maintain consistent naming convention throughout codebase

This completes the migration to the new color scale system.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:41:50 -04:00
9d201a7583 refactor: implement comprehensive color scale system
Major improvements to the color system:

1. Create proper color scales (00-100) for:
   - Gray: 14 shades from darkest to lightest
   - Red: 12 shades with brand colors
   - Blue: 12 shades for primary colors
   - Yellow: 12 shades for warnings
   - Green: 12 shades for success states
   - Orange: 12 shades for secondary accents

2. Semantic color assignments:
   - Map all semantic colors to scale values
   - Background colors use gray scale
   - Text colors use appropriate gray shades
   - Status colors (success, error, warning, info)
   - Component-specific colors reference scales

3. Backward compatibility:
   - Maintain $grey-* aliases for existing code
   - Map old variables to new scale system
   - TODO comments for future migration

This provides a more maintainable and scalable color system.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:28:37 -04:00
bd91642244 feat: add comprehensive CSS variables for colors, spacing, and animations
- Add frequently used color variables:
  - Dark colors: $black, $dark-blue, $orange-red
  - Status colors: $green-success, $red-error
  - Gray variations for backgrounds and borders

- Add shadow and overlay utilities:
  - Shadow levels: subtle, light, medium, dark, heavy
  - Overlay variations for modals and overlays
  - Border utilities for consistent borders

- Expand spacing units:
  - Add missing multipliers ($unit-7x through $unit-19x)
  - Add common pixel values for precise spacing

- Add animation/transition durations:
  - Transition speeds: instant, fast, normal, medium, slow
  - Animation speeds: fast, normal, slow, very-slow

These variables provide a foundation for replacing hardcoded values.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:20:19 -04:00
5875a52b47 refactor: standardize z-index values with CSS variables
- Create _z-index.scss with systematic z-index constants
- Replace 60+ hardcoded z-index values across 19 components
- Establish consistent layering hierarchy:
  - Base layers (1-3)
  - Interactive elements (10-200)
  - Overlays and modals (1000-1100)
  - Top-level elements (1200-10000)

This improves maintainability and prevents z-index conflicts.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:18:20 -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
c20b9a1f85 refactor: remove 13 unused SVG files
Remove unused icons:
- dashboard.svg
- metadata.svg

Remove unused illustrations:
- jedmund-blink.svg
- jedmund-headphones.svg
- jedmund-listening-downbeat.svg
- jedmund-listening.svg
- jedmund-open.svg
- jedmund-signing-downbeat.svg
- jedmund-singing.svg
- logo-figma.svg
- logo-maitsu.svg
- logo-pinterest.svg
- logo-slack.svg

These files were identified as unused in the SVG analysis.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:02:13 -04:00
ddfe1cac8f refactor: remove 5 unused components
- Remove Squiggly.svelte
- Remove PhotoLightbox.svelte
- Remove Pill.svelte
- Remove SVGHoverEffect.svelte
- Remove MusicPreview.svelte

These components were identified as unused in the codebase analysis.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 21:00:49 -04:00
a04d48e549 feat: enhance editor with drag handle and UI improvements
- 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>
2025-06-25 01:06:46 +01:00
fb01527469 feat: add tooltips to link bubble menu buttons
- Create reusable tooltip action using Tippy.js
- Add tooltips to link menu buttons (copy, edit, open, remove)
- Implement visual feedback with green flash animation on URL copy
- Configure bubble menu scale animation for smooth appearance
- Add scoped tooltip styles with dark theme

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-25 01:06:17 +01:00
ae15e7978c fix: reorder universe card content and update truncation logic
- Move embeds to display before text content in UniversePostCard
- Show full content for non-essay posts (no truncation)
- Increase essay truncation limit from 150 to 300 characters
- Add styles to hide duplicate embeds in rendered content

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 18:07:51 +01: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
3654a18cbe refactor: update album page layout to match project case study design
- Wrap album and photo content in Page component
- Use consistent white rounded rectangle container
- Update styles to work with Page component structure
- Improve visual hierarchy and spacing
- Match the design pattern used in project pages

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 02:05:36 +01:00
a9cbdbf280 fix: remove invalid isPhotography check for albums
- Remove check for non-existent isPhotography field on Album model
- Albums now display correctly when published
- Fixes "Content not found" error for published albums

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 02:01:28 +01:00
7a3cde0575 fix: resolve CSS global selector placement errors
- Fix :global() selector placement in nested SCSS
- Move nested selectors out to comply with Svelte CSS rules
- :global() can only be at start or end of selector, not middle

Fixes compilation error when viewing albums on public site

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:59:05 +01:00
e305bf15ef refactor: replace button text changes with toast notifications
- Update all admin forms to use toast messages
- Remove temporary "Saving..." button text changes
- Remove inline error/success message displays
- Keep buttons disabled during operations
- Show loading, success, and error toasts appropriately

Updated components:
- AlbumForm: Save operations with descriptive messages
- StatusDropdown: Remove loading text from buttons
- MediaDetailsModal: Save, delete, and copy operations
- ProjectForm: Create and update operations
- EssayForm: Publish and save draft operations
- SimplePostForm: Create and update posts
- PhotoPostForm: Publish photo posts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:56:26 +01:00
1a155e5657 feat: implement toast notification system
- Create toast store wrapping svelte-sonner
- Add Toaster component to root layout
- Configure admin-aware positioning
- Style toasts to match design system
- Add helper functions for common toast types

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:47:35 +01:00
ce13e5225d feat(ui): update components and stores for album support
- Update NavDropdown with album navigation support
- Enhance UniverseAlbumCard with better styling
- Update album-stream store for new album structure
- Improve now-playing-stream with better error handling
- Add TypeScript improvements throughout
- Better component prop validation

Enhances UI components for the new album system.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:15:12 +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
b8d965370b feat(admin): update admin pages with new editor and workflows
- Update media management page with album associations
- Enhance media audit page with better reporting
- Improve regenerate thumbnails page
- Update post pages to use EnhancedComposer
- Update universe compose page with new editor
- Update ProjectForm to use EnhancedComposer
- Add better error handling and loading states
- Improve form validation across admin pages

Modernizes admin workflows with unified components.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:14:41 +01:00
52df43b667 feat(editor): improve gallery and image components
- Enhance GalleryExtended with better layout options
- Update GalleryPlaceholder with improved media selection
- Improve ImagePlaceholder with better preview handling
- Add support for multiple gallery layouts
- Improve component styling and interactions
- Better integration with UnifiedMediaModal

Enhances content editing with improved media components.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:14:23 +01:00
0d4bf6d53f feat(admin): update admin components with improved UI and icons
- Add album and media icons for better navigation
- Update AdminNavBar with new routes and improved styling
- Enhance GalleryUploader with better drag-and-drop support
- Improve ImagePicker and ImageUploader components
- Remove unused ImageUploadPlaceholder component
- Update MediaDetailsModal with album association features
- Improve Modal component styling and animations
- Add PostDropdown for post management actions

Modernizes the admin interface with better usability.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:14:08 +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
02e41ed3d6 feat(photos): enhance photo viewing with improved grids and metadata
- Add PhotoGrid component as base for photo grid layouts
- Update PhotoItem with color placeholder loading states
- Enhance PhotoMetadata display with better formatting
- Improve PhotoViewEnhanced with smoother transitions
- Update single and two-column grid layouts
- Fix photo routing for album-based photo URLs
- Add support for direct photo ID routes
- Improve photo page performance and loading states

Creates a more polished photo viewing experience.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:13:31 +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
e488107544 feat(admin): update album management UI for content support
- Update AlbumForm to use EnhancedComposer for content editing
- Add AlbumSelector component for album selection workflows
- Update AlbumListItem with improved styling and metadata display
- Enhance album edit/create pages with new content capabilities
- Add support for geolocation data in album forms
- Improve form validation and error handling

Modernizes the album management interface with rich content editing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:12:54 +01:00
8627b1d574 feat(editor): add geolocation support for content editing
- Add geolocation Tiptap extension for embedding maps
- Create GeolocationExtended component for rendering map embeds
- Create GeolocationPlaceholder for editor insertion
- Add GeoCard component for displaying location data
- Support latitude, longitude, zoom level, and optional labels
- Enable location-based content in albums and posts

Allows editors to embed interactive maps with specific locations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:12:34 +01:00
b548807d88 refactor(admin): consolidate media modals into UnifiedMediaModal
- Create UnifiedMediaModal to replace MediaLibraryModal and bulk album functionality
- Remove redundant MediaLibraryModal and MediaSelector components
- Add media-selection store for better state management
- Add AlbumSelectorModal for album selection workflows
- Add InlineComposerModal for inline content editing
- Improve modal reusability and reduce code duplication

Streamlines media selection with a single, flexible modal component.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:12:13 +01:00
6604032643 refactor(editor): consolidate editors into unified EnhancedComposer
- Create EnhancedComposer as the single unified editor component
- Remove redundant editor components (Editor, EditorWithUpload, CaseStudyEditor, UniverseComposer)
- Add editor-extensions.ts for centralized extension configuration
- Enhance image placeholder with better UI and selection support
- Update editor commands and slash command groups
- Improve editor state management and content handling

Simplifies the codebase by having one powerful editor component instead
of multiple specialized ones.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-24 01:11:57 +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
bb434d40dc Change default view 2025-06-19 11:27:21 +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
aa0677090b feat: enhance photo loading with color placeholders
- Use dominant color as placeholder background while images load
- Add aspect ratio support for proper image dimensions
- Improve loading state with smoother transitions
- Remove shimmer animation in favor of solid color placeholders

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:59:23 +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
b0ecd54243 Enhance photos page with multiple view modes
- Add support for masonry, single, two-column, and horizontal view modes
- Implement wide width mode (1100px) for more columns
- Add padding adjustments for horizontal scroll mode
- Load all photos automatically in horizontal mode
- Preserve scroll position on navigation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:55:32 +01:00
26ef48fa95 Update ViewModeSelector with new view modes
- Add two-column view mode option
- Import new view mode icons
- Hide selector on mobile devices
- Update ViewMode type to include all options

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:55:18 +01:00
049b6be57f Add new photo grid view components
- SingleColumnPhotoGrid: Displays photos in a single centered column
- TwoColumnPhotoGrid: Splits photos evenly between two columns
- HorizontalScrollPhotoGrid: Shows photos in a horizontal scrolling view

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:55:04 +01:00
ba37e9829e Add and update view mode icons
- Update view-single icon with text representation
- Add view-horizontal icon with side scroll indicator
- Add view-two-column icon for two-column layout
- Simplify width-normal and width-wide icons

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:54:50 +01:00
b2488bd301 Add ViewModeSelector component with width controls
- Create ViewModeSelector component with masonry view mode button
- Add width toggle controls (normal 700px / wide 900px)
- Create width-normal and width-wide SVG icons
- Integrate component into photos route with smooth transitions
- Use SCSS variables throughout for consistent styling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-18 10:26:14 +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
1867187635 Fix broken reference deletion 2025-06-17 08:45:09 +01:00
090e29f9d9 Fix Cloudinary max selection and row selection 2025-06-17 08:25:49 +01:00
5da6f4c736 Fix Cloudinary media audit 2025-06-17 08:13:43 +01:00
fdf1ce5e21 Update README and add titles to admin routes 2025-06-17 07:41:29 +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
c6fd8cf292 refactor: convert Media Library actions to dropdown menu
- Replace individual buttons with dropdown menu for secondary actions
- Add 'Audit Storage' and 'Select Files' options to dropdown
- Keep Upload as primary action button
- Add chevron-down icon with proper stroke styling
- Implement click-outside handler for dropdown

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 17:04:32 +01:00
655a8a05a5 feat: add Cloudinary audit admin UI
- Create audit page at /admin/media/audit with 2x2 summary grid
- Add interactive table with file selection and batch operations
- Implement delete functionality with confirmation modal
- Add chevron-left icon for navigation
- Style with consistent admin UI patterns
- Include loading states and error handling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 16:56:39 +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
5bd4c40342 Fix masonry gap 2025-06-16 13:32:16 +01:00
f540aed895 Add new layout to album pages and remove tests and PhotoGrid 2025-06-16 10:10:59 +01:00
6132c17a9b Add better masonry and infinite scrolling 2025-06-16 09:58:07 +01:00
47e9e300db Update Universe character count and Photos og:desc 2025-06-16 01:38:15 +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
1bbc4260de Update album component motion and interaction 2025-06-14 14:33:29 -04:00
188e95f597 Update Album to use new Svelte 5 motion 2025-06-14 14:17:59 -04:00
4a99aca101 Use new Avatar component 2025-06-14 14:09:08 -04:00
b7e9deb087 Fix visual bug with Albums 2025-06-14 11:42:41 -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
a468668858 Fix styling of embeds in public site 2025-06-13 18:34:59 -04:00
fe30f9e9b2 Youtube embeds too 2025-06-13 18:13:43 -04:00
1f7b388a6c Clean up URL cards 2025-06-13 17:40:55 -04:00
b1ddedd586 Embed URL cards 2025-06-13 17:29:29 -04:00
bcbf7e3121 Fix component deprecated errors 2025-06-13 15:12:46 -04:00
57ec5ca9aa Fix unused CSS selector warnings 2025-06-13 15:05:18 -04:00
a75c8323ee Fix button font 2025-06-13 15:02:19 -04:00
81af86ae7f Add sorts in admin interface 2025-06-13 14:50:22 -04:00
f753d5fb8b Unify fullscreen editors 2025-06-13 14:17:26 -04:00
f1ab953b89 Style changes 2025-06-13 13:03:24 -04:00
3096c0ff51 Updates to MediaUploadModal 2025-06-13 12:43:56 -04:00
824e44a1ef Track while scrolling 2025-06-13 07:53:22 -04:00
fcf5f87177 Buttons stay under your mouse on navigation 2025-06-13 07:42:30 -04:00
d1c7a777ed Phot next/prev buttons follow you 2025-06-13 07:39:24 -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
1c1b930e34 Better photos interface 2025-06-13 05:03:37 -04:00
09e83618c9 Different filmstrip, zooming images 2025-06-13 04:34:34 -04:00
610a421207 Better single photo view 2025-06-13 03:47:52 -04:00
c50b8e2e53 Add view on site button 2025-06-12 03:28:34 -07:00
c615791090 Fix slug 2025-06-12 03:28:05 -07:00
d63574a09f Fix markdown link saving 2025-06-12 02:07:12 -07:00
46d655e8f0 Better OpenGraph and HTML metadata 2025-06-11 23:58:11 -07:00
d44bcbb80e Fix some console errors 2025-06-11 22:19:07 -07:00
e07cde3837 Fix logo container size on mobile 2025-06-11 21:59:08 -07:00
6c2555b7c9 Fix sticky toolbar in editor 2025-06-11 02:09:59 -07:00
a8bee8d9da Fix footer positioning 2025-06-11 02:03:26 -07:00
c38511ed62 Fix Edra issues and spacing 2025-06-11 02:00:10 -07:00
0f8b8c9f2a Fix problematic onTransaction call 2025-06-11 01:53:39 -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
318f33709f Fix post types 2025-06-10 23:53:17 -07:00
0503e20b5d Make text colors consistent 2025-06-10 23:33:41 -07:00
ff87fa4e4b Fix markdown rendering 2025-06-10 23:07:59 -07:00
a423125eee Add RSS item in footer 2025-06-10 22:41:48 -07:00
8f166344b8 Add about menu item 2025-06-10 22:38:02 -07:00
451d5b0f9e Make back button consistent 2025-06-10 22:24:24 -07:00
c4eef0b1db Remove from Cloudinary on bulk delete 2025-06-10 21:53:33 -07:00
e43fd6335f Textarea component and Project form updates 2025-06-10 21:45:24 -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
bbced97929 Button unification 2025-06-10 19:09:23 -07:00
90735d2c83 Spacing and mobile design fixes 2025-06-10 12:06:02 -07:00
510255f1bd Make font-scaling more consistent 2025-06-10 10:29:52 -07:00
205244584f Mobile layout adjustments 2025-06-10 10:22:08 -07:00
f2a6bf3f99 Add dropdown for mobile nav 2025-06-10 09:44:34 -07:00
7869d05e1e Remove log 2025-06-10 09:44:27 -07:00
315a4ba102 Mobile fixes for horizontal scrolling 2025-06-10 09:44:23 -07:00
204cba0e6d Fix nesting errors 2025-06-10 09:21:39 -07:00
78ae1d0756 Update empty states 2025-06-10 09:15:09 -07:00
03eba54fe5 Fix more typography 2025-06-10 02:50:46 -07:00
c71ccd086b Fix some styling in project detail pages 2025-06-10 02:48:34 -07:00