Merged
Conversation
fix: CI workflow fixes for protected branches
chore(beta): release 3.0.1-beta.0
Previously watermarks were applied on-the-fly when viewing photos in the lightbox, causing 1+ minute load times for high-resolution images. This change pre-generates watermarked versions during upload and when watermark settings change, enabling instant image loading (~50-100ms). - Add database migration for watermark_path tracking (061) - Add watermarkGeneratorService for batch operations - Extend watermarkService with save-to-disk capability - Modify gallery endpoint to serve pre-generated files - Add background regeneration when branding settings change - Add npm script for migrating existing photos Closes #112
The upload button was hidden in the sidebar on mobile devices, requiring users to open the menu to find it. Now it appears directly in the topbar for easy access on all screen sizes. - Remove !isMobile condition from header upload button - Add responsive text (short on mobile, full on desktop) - Remove duplicate upload button from sidebar Fixes #113
feat: pre-generated watermarks and mobile upload button improvements
chore(beta): release 3.1.0-beta.0
PostgreSQL's json column type returns parsed values directly (boolean false instead of string "false"). The backend code used a truthy check which failed for boolean false values, causing null to be returned instead of the actual false value. Changed condition from `if (setting.setting_value)` to explicit null check `if (setting.setting_value !== null && setting.setting_value !== undefined)` and added handling for already-parsed json column values. Fixes #117
Document the API_URL environment variable that is used for constructing URLs for assets (logos, images) in email notifications. Without this setting, the system defaults to http://localhost:3001 which causes broken images in production emails. Added to both root and backend .env.example files with clear documentation about its purpose and importance.
Add global settings to make event_date and expiration optional when creating galleries. This supports non-event use cases like portraits, corporate shoots, etc. New features: - Settings toggles in Settings → Event Creation tab - "Require event date" checkbox with warning about random URL identifiers - "Require expiration date" checkbox with warning about manual archiving - Galleries without date use random hex suffix in slug (e.g. portrait-smith-a1b2c3) - Galleries without expiration never expire (stay active until archived) Backend changes: - New migration for settings and nullable columns - Conditional validation based on settings - Updated slug generation with random suffix fallback - Updated expiration checker to skip null expires_at - Updated gallery access control for null expiration Frontend changes: - New checkboxes in EventsTab with warnings - Conditional event date field (shows optional label) - No Expiration message when expiration disabled - Updated types for nullable event_date and expires_at Closes #118
…tion-beta feat: add optional event date and expiration settings
chore(beta): release 3.2.0-beta.0
- Remove hidden sm:block wrapper hiding upload button on mobile for Grid layout - Add upload button to GallerySidebar using existing allowUploads/onUploadClick props - Ensures upload button is visible in both header and sidebar on all devices Closes #113
…tion-beta fix: mobile upload button visibility in gallery (#113)
chore(beta): release 3.2.1-beta.0
- Remove hidden sm:block wrapper hiding upload button on mobile for Grid layout - Add upload button to GallerySidebar using existing allowUploads/onUploadClick props - Ensures upload button is visible in both header and sidebar on all devices Closes #113
…tion-beta fix: mobile upload button visibility in gallery (#113)
chore(beta): release 3.2.2-beta.0
The gallery /photos and /info endpoints were not returning the allow_user_uploads field, causing the upload button to never show in the frontend since the value was always undefined/false.
…tion-beta fix: mobile upload button not visible in gallery (#113)
chore(beta): release 3.2.3-beta.0
Fixed inconsistent storage path fallbacks that caused 500 errors when serving thumbnails. The paths were using '../../storage' (2 levels up) instead of '../../../storage' (3 levels up) when STORAGE_PATH env var is not set. Affected files: - backend/src/routes/gallery.js - backend/src/services/photoService.js - backend/src/services/eventService.js
…tion-beta fix: correct storage path resolution in multiple files (#96)
chore(beta): release 3.2.4-beta.0
- Update .card class to use explicit Tailwind colors instead of CSS variables, preventing gallery theme from affecting admin UI - Add .card-themed and .input-themed classes for gallery components that need to use theme CSS variables - Add dark mode support to CardHeader and CardFooter components - Update .input class to use explicit colors for proper light/dark mode - Update dark mode selectors for consistency (.dark .class)
Update ghost button variant to use proper dark mode colors: - Add dark:hover:bg-neutral-700 for hover state - Add dark:text-neutral-300 for better icon/text visibility - Fixes too-dark edit and view gallery buttons in Events table
Admin Dark Mode: - Add AdminDarkModeContext with light/dark/system preference - Update all admin components with Tailwind dark: classes - Add dark mode toggle in admin header - Persist preference in localStorage SEO Settings: - Add robots.txt configuration in Settings > SEO tab - Block AI crawlers (GPTBot, ChatGPT-User, etc.) with toggle - Custom robots.txt rules management - Add RobotsMetaTags component for gallery pages - Backend service for dynamic robots.txt generation - Database migration for SEO settings storage UI/UX Improvements: - Consistent dark mode styling across all admin pages - Update gallery components with themed CSS classes - Fix input, card, and button styling for dark mode
Feat/new features
chore(beta): release 3.12.0-beta.0
- Update hero photo help text to mention category override capability - Add hint in category manager about default hero photo fallback - Add placeholder text in gallery preview for hero section - Ensure live preview updates correctly for header/divider style changes
chore(beta): release 3.13.0-beta.0
- Fix masonry/mosaic layout regression where tiles displayed uniform heights instead of respecting image aspect ratios. Changed from fixed 150-500px height constraints to dynamic constraints based on column width. - Add hero image optimization pipeline generating 1920x1080 images for full-width hero sections instead of using low-quality thumbnails. - New /hero/:photoId endpoint serves optimized hero images with watermark support and automatic generation/caching. - Add hero_url field to photos API response for frontend consumption. - Migration 069 adds hero_path column to photos table.
fix: restore aspect-ratio layouts and improve hero image quality (#180)
chore(beta): release 3.13.1-beta.0
…e date sorting - Add Update Instructions Dialog with environment-specific commands (Docker/Git/Standalone) - Add email notification settings for new version alerts - Add "Sort by Capture Date" option using EXIF metadata extraction - Fix E2E tests by loading environment variables via dotenv - Add test-images/ and backend/*.db to .gitignore Closes #181
…structure - Disable production source maps and hide nginx version - Reduce JSON body limit from 10gb to 50mb (uploads use multer, not JSON) - Strip database info and error details from health endpoint - Mask reCAPTCHA secret key in admin settings API responses - Whitelist sort/order query parameters in events and photos endpoints - Stop reflecting arbitrary origins in static file CORS headers - Align nginx security headers with backend Helmet CSP, remove deprecated X-XSS-Protection - Strip EXIF metadata from generated thumbnails and hero images - Bind postgres/redis dev ports to localhost in docker-compose configs - Add safeExec utility (spawn with shell:false) to prevent command injection - Convert all exec/execAsync calls in backup, restore, and database backup services to use safe spawn-based helpers
Surface the existing original_filename from the database in the admin photo grid hover overlay and photo viewer sidebar, so photographers can correlate uploaded images with their Lightroom/disk originals. Only shown when it differs from the system-generated filename. Gallery guests remain unaffected.
feat: original filename in admin UI, update dialog, and security hardening
chore(beta): release 3.14.0-beta.0
When expires_at is null (no expiration), the status logic defaulted days to 0, causing all non-expiring events to display as "Expired". Now returns "Active" immediately when there is no expiration date.
feat: original filename in admin UI, update dialog, security hardening, and bug fixes
chore(beta): release 3.15.0-beta.0
…o .env.example (#189) - Replace deprecated docker-compose (v1) with docker compose (v2) in README - Add missing ADMIN_PASSWORD to .env.example so new users don't get a blank-string warning and can actually log in after first setup
fix: docker compose v2 syntax and add missing ADMIN_PASSWORD to .env.example (#189)
chore(beta): release 3.15.1-beta.0
Resolved conflicts in CHANGELOG.md, backend/package.json, and frontend/package.json. Version set to 3.15.1.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges the full beta branch into main, bringing all features and fixes from v3.0.0-beta through v3.15.1.
Highlights since last main release (v2.4.0)
Conflict Resolution
Test plan