Releases: ECarry/photography-website
Releases · ECarry/photography-website
v2.3.0
What's New in v2.3.0
🔒 Security
- S3 upload validation: Server-side contentType whitelist (only image formats) and file size limit
- LIKE injection prevention: Escape SQL wildcards in photo search input
- Visibility enforcement: Public pages now only return photos with
visibility: "public" - Protected procedures:
photos.getOneandphotos.getManyrestricted to authenticated users
⚡ Improvements
- Database transactions:
photos.createandphotos.removewrapped in transactions for data consistency - Environment validation: Zod-based server env validation — app fails fast with clear errors on missing config
- DB connection pool caching: Prevent connection leaks during Next.js HMR in development
- ctx.db migration: All tRPC routers now use
ctx.dbinstead of direct imports (better testability) - updatedAt timestamps: Photo updates now correctly refresh the
updatedAtfield - Error handling:
photos.removere-throws TRPCError to preserve original error codes
🐳 Docker
- Added .dockerignore: Smaller build context, faster builds
- Externalized secrets: docker-compose.yml now uses
${VAR:-default}syntax, overridable via.env
🧪 Testing
- Vitest setup: Test framework with mocks for React cache, next/headers, S3 client, auth session
- 16 photo procedure tests: Full coverage of create, update, getOne, getMany, remove including edge cases
v2.2.0
What's New in v2.2.0
🐳 Docker Support
- Full Docker deployment with RustFS and Standalone modes
- Simplified deployment process
✨ Major Features
Screensaver
- Animated grid screensaver with photo flip transitions
- Settings modal with fullscreen toggle and auto-hide controls
- Photo data prefetching for smooth performance
Individual Photo Pages
- Dedicated photo detail view with metadata generation
- Blurred background image effect
- Loading skeleton state for better UX
Cloudflare Integration
- Optimized image delivery via Cloudflare image loader
- Improved performance for image-heavy pages
Enhanced Mapbox
- Multi-marker support with drag-and-drop positioning
- Map auto-centering when selecting photos in discover view
- Limited zoom level to 10 for optimal UX
🎯 Improvements
- Next.js: Upgraded from 16.0.0 → 16.0.10
- Photo sorting by date (newest/oldest first)
- Increased city sets display limit from 9 to 12
- Better screensaver grid with fixed row count and dynamic sizing
- Improved photo preview card responsive layout
🔧 Technical Updates
- Added PostgreSQL support for database flexibility
- Renamed and reorganized S3 utility functions
- Standardized zod imports and validators
- Fixed sidebar skeleton width calculation
- Addressed YouTube extension typing issues
📚 Documentation
- Added screenshots section to README
- Added warning about custom image loader configuration
📊 Statistics
- 31 commits from v2.1.0 to v2.2.0
- 75 files changed: +1,721 insertions, -1,722 deletions
Full Changelog: v2.1.0...v2.2.0
v2.1.0
What's New in v2.1.0
🎯 Major Features
Mapbox Integration
- Interactive map embeds with location toolbar functionality
- Map preview with zoom controls in MapboxToolbar dialog
- Drag rotate and drag pan controls for enhanced map interaction
- Location-based content embedding support
Editor Enhancements
- Added dedicated Heading toolbar component
- Split Color and Highlight into separate toolbar components
- Numeric font size display replacing generic Type icon
⚡ Performance
- Optimized editor toolbar performance using
useEditorStatehook
🔧 Improvements
- Extracted Tiptap editor styles to dedicated CSS file
- Improved image component responsiveness
- Normalized YouTube extension indentation (4→2 spaces)
- Simplified RichTextViewer component
🐛 Bug Fixes
- Added explicit
type="button"to prevent unintended form submissions in editor components
📊 Statistics
- 13 commits from v2.0.0 to v2.1.0
- 28 files changed: +1,846 insertions, -750 deletions
Full Changelog: v2.0.0...v2.1.0
v2.0.0
Highlights
-
City detail pages
- Added full city detail page UI with cover photo, info cards, and photo listing.
- Implemented city description editing and improved city detail layout and styling.
- Fixed URL-encoded city names in page metadata.
- Introduced a
FramedPhotocomponent and redesigned the city photo gallery layout. - Replaced the old commented photo grid with the new
FramedPhoto-based layout.
-
Discover map & photo selection
- Added a photo selection panel on the discover map with click handlers.
- Improved the photo grid layout and spacing in the discover panel.
- Implemented a mobile drawer for photo selection in the discover view.
- Added a conditional single-column layout when photos are selected.
-
Photo gallery & image handling
- Iteratively refined gallery layout, spacing, max heights, and metadata display.
- Improved empty state UI for the photo slider.
- Standardized responsive grid layouts across photo galleries.
-
Rich text editor & blog posts
- Added a Tiptap-based rich text editor with custom extensions, toolbar, and form integration.
- Implemented S3 image upload and deletion in the editor using presigned URLs.
- Updated post form schema with a
contentfield and visibility enum. - Added post edit and detail pages, plus update mutation support.
- Added a visibility filter to blog post slug queries and improved post form layout.
-
File uploader & S3 integration
- Redesigned the
FileUploaderwith a modern UI, better UX, and skeleton loading states. - Implemented safe file deletion with loading and error handling.
- Added max-width constraints and prevented deleted images from reappearing.
- Passed folder parameters to presigned URL creation and renamed Cloudflare/R2 constants and modules to S3-oriented names for clarity.
- Redesigned the
-
Dashboard, profile, and security
- Standardized dashboard layout padding and reorganized components into view modules.
- Added real-time dashboard statistics with loading states and skeletons.
- Reorganized the profile page into a tabbed interface and extracted shared auth utilities.
- Improved security and profile management with enhanced device info and styling.
- Simplified navigation user dropdown and sidebar navigation.
-
Map & geospatial data
- Added configurable map interaction controls.
- Consolidated visited countries queries into a single GeoJSON-powered endpoint.
- Adjusted dashboard layout to better accommodate maps and spacing.
-
Performance, UX, and refactors
- Optimized image quality settings and improved loading placeholders.
- Simplified multiple components, reorganized editor files, and cleaned up unused extensions.
- Replaced various legacy names and modules to improve clarity and provider flexibility.
-
Documentation
- Expanded the photo URL migration guide with more detailed upgrade steps.
- Improved the main README formatting and added a star history section.
Upgrade Notes
- Image and file handling now rely on S3-style configuration and presigned URLs.
- Rich text content and visibility are now first-class fields in the post schema.
- Some editor and dashboard components have been moved into new directory structures; custom imports may need to be updated accordingly.
v2.0.0-beta.1
🚀 Major Features:
- Upgrade to Next.js 16 with React 19 and latest React Compiler
- Implement TanStack Query v5 for advanced data fetching and caching
- Integrate tRPC v11 for end-to-end type-safe APIs
- Add comprehensive photo management with EXIF data extraction
🗺️ Enhanced Map Features:
- iPhone photo album integration with automatic location extraction
- Interactive map visualization using Mapbox GL JS
- Geolocation-based photo clustering and discovery
- Travel route visualization with photo markers
📊 Brand New Dashboard:
- Real-time analytics and statistics
- Photo upload management with drag-and-drop
- Interactive charts for photo distribution by location and time
- Travel timeline with map integration
🛠️ Technical Stack:
- Next.js 16 + React 19 + TypeScript
- TanStack Query + tRPC for data layer
- Drizzle ORM + PostgreSQL for database
- Better Auth for authentication
- Tailwind CSS + shadcn/ui for modern UI
- Cloudflare R2 for image storage
- Mapbox for mapping features
✨ Additional Improvements:
- Modern responsive design with mobile-first approach
- Advanced image optimization and lazy loading
- Real-time photo metadata extraction
- Enhanced SEO and performance optimizations
v1.0.0
What's Changed
- Slugify multi-word city names for URLs by @tinkernerd in #4
- feat: exif data in flip-card by @ChrAlpha in #5
New Contributors
- @tinkernerd made their first contribution in #4
- @ChrAlpha made their first contribution in #5
Full Changelog: https://github.com/ECarry/photography-website/commits/v1.0.0