- Removed canonical URL field from MetadataPanel component and related interfaces
- Added URL validation function to ensure feature image and canonical URLs are valid HTTP/HTTPS
- Updated Ghost API to skip invalid URLs when publishing posts
- Simplified metadata state management by removing canonicalUrl from initial state and update handlers
- Added author dropdown menu in publish step to select post author
- Implemented Ghost authors API endpoint to fetch available authors
- Modified post publishing to include selected author in Ghost API payload
- Added author state management in post editor context
- Auto-select first available author when loading author list
- Added loading and error states for author fetching
- Updated types and interfaces to support author data structure
- Added public bucket integration for serving media files directly instead of through API proxy
- Updated image picker to use new MediaLibrary component with improved UI/UX
- Removed selectedImageKeys prop dependency from EditorShell and StepEdit components
- Modified image upload endpoints to automatically copy files to public bucket when configured
- Added fallback to API proxy URLs when public bucket copy fails
- Improved image picker dialog
- Added pagination controls with Previous/Next buttons for stock photo results
- Implemented rate limit tracking and display showing API usage and reset time
- Enhanced stock photo search to support page navigation and results count
- Added new types for API responses and rate limit information
- Refactored stock photos API route with helper functions for better code organization
- Added validation and transformation functions for
- Replaced Unsplash API integration with Pexels API for stock photo search and import
- Updated API response transformation to match frontend expectations with Pexels data structure
- Removed Unsplash-specific download tracking and attribution requirements
- Modified environment configuration to use PEXELS_API_KEY instead of UNSPLASH_ACCESS_KEY
- Updated UI text and attribution links to reference Pexels instead of Unsplash
- Simplifie
- Added new Stock Photos tab in Media Library for searching and importing Unsplash photos
- Implemented search functionality with preview thumbnails and attribution info
- Added one-click import feature to save photos directly to user's library
- Created detailed setup documentation (STOCK_PHOTOS_QUICK_START.md and STOCK_PHOTOS_SETUP.md)
- Added UNSPLASH_ACCESS_KEY configuration to .env.example
- Enhanced MediaLibrary component with tabs,
- Added URL switching from blob to server URL after successful clip upload
- Implemented memory cleanup by revoking blob URLs when no longer needed
- Updated clip state to include server-generated URL using bucket and key data
- Improved error handling to preserve existing URL if server doesn't return storage data
- Changed database credentials in .env for improved security
- Added detailed implementation plan for content statistics feature (CONTENT_STATISTICS_PLAN.md)
- Created summary documentation for content statistics feature (CONTENT_STATISTICS_SUMMARY.md)
- Removed legacy MySQL root password and simplified database config variables
- Updated database name to use production naming convention (voxblog_prod)
- Added file upload button with multi-file support alongside existing paste functionality
- Implemented handleFileUpload function to process multiple image files sequentially
- Added file input reference and reset logic to allow repeated uploads
- Included upload progress indicator showing count of files being processed
- Added validation to skip non-image files with error messaging
- Enhanced UI with disabled state during upload to prevent concurrent
- Updated all components with responsive breakpoints for mobile-first design
- Added touch-friendly controls with proper spacing and small button sizes
- Implemented responsive layouts that stack/wrap on mobile screens
- Created detailed mobile compatibility documentation
- Enhanced horizontal scrolling for data grids and steppers on mobile
- Optimized media library grid for smaller screens
- Added iOS safe area inset padding for bottom
- Changed admin frontend port from 3000 to 3300 across all configuration files
- Changed API backend port from 3001 to 3301 across all configuration files
- Updated health check endpoints to use new ports in CI/CD workflow
- Modified documentation and deployment guides to reflect new port numbers
- Updated Caddy and Nginx reverse proxy configurations to use new ports
- Created new LOCAL_TESTING.md with detailed instructions for setting up local development environment
- Added step-by-step setup guide covering Docker installation, environment configuration, and common commands
- Included troubleshooting section with solutions for common issues like port conflicts and build failures
- Added development workflow guidelines and testing checklist for quality assurance
- Documented performance tips and best practices for Docker
- Fixed stale closure bug in streaming content by using useRef to properly accumulate content instead of relying on state closure
- Added auto-scrolling functionality to keep latest content visible during generation
- Implemented smooth scrolling behavior and improved HTML styling for better readability
- Added content buffer reset when starting new generation
- Enhanced documentation with detailed explanation of the closure problem and solution
- Moved streaming state (isGenerating, content, tokens, errors) from StepGenerate to usePostEditor hook
- Added new state management to allow continuous AI generation when navigating between editor steps
- Updated EditorShell to pass streaming state and setters down to StepGenerate component
- Added detailed documentation explaining streaming persistence architecture and user experience
- Removed local state from StepGenerate in favor of props
- Added streaming UI components with live content preview and token counter
- Implemented new generateContentStream service for SSE-based content generation
- Created comprehensive STREAMING_UI_GUIDE.md documentation with implementation details
- Added streaming toggle checkbox with default enabled state
- Enhanced StepGenerate component with progress bar and animated streaming display
- Added error handling and graceful fallback for streaming failures