v3.0.0-beta.0
Pre-release
Pre-release
3.0.0-beta.0 (2026-01-15)
⚠ BREAKING CHANGES
- Deployment now requires external reverse proxy for SSL/HTTPS
Features
- add Apple Liquid Glass templates, image security settings, and automated releases (6033461)
- add complete translation support for backup admin page (e9f92e6)
- Add CSS template system with custom gallery styling support (0da45e6)
- add event management, gallery customization, and release automationFeature/event rename (40ee671)
- add feedback management enhancements (0064122)
- add GitHub Actions workflow for Docker image builds (4029559)
- add multi-administrator support with RBAC and fix backup/restore for S3 (892e47d)
- admin: external media import modal + thumbnail fixes for reference events\n\n- Photos tab: replace inline external folder picker with a modal opened via "Import from External Folder" button next to "Upload Photos"; add info that all pictures in the selected folder will be imported.\n- Admin thumbnails: align list endpoint to /api/admin/photos/:eventId/photos and always return thumbnail_url to trigger on-demand generation; normalize external paths to avoid duplicated folder segments (e.g., individual/individual) that broke resolver; improve thumbnail logging.\n- Use authenticated image fetching on admin feedback pages to prevent 401s in automation.\n- i18n: add backup.external.warning strings; complete German backup/restore coverage; add common keys (notSet, of, up, select, selected).\n- Docs: add Local (npm) setup for EXTERNAL_MEDIA_ROOT in deployment guide.\n\nRefs #17 – gallery feature request: #17 (49c7778)
- admin: refine header layout and logo placement (d64e7d0)
- allow admin email updates in UI (#36) (3c2a79a)
- beta/stable release channels with update notifications and bug fixes (3c7dc20)
- beta/stable release channels with update notifications and bug fixes (#98) (3c7dc20)
- completely rewrite GitHub mirror to create new history from target commit (febacb7)
- consolidate setup scripts and guides into unified solution (29a8ff9)
- docker: add PUID/PGID and user mapping to avoid bind mount permission issues; feat(setup): prompt for admin email interactively; docs: PUID/PGID in .env.example (410a33f)
- enhance mirror-to-github workflow with commit-based history filtering (b4b09c1)
- events: add CSS template selector to event edit page (6a6c2cd)
- exclude Claude contributor from GitHub mirror workflow (abbcdb1)
- fix analytics dashboard and implement complete Umami integration (45ce988)
- gallery/filters: add Rated and Commented filters (UI + backend).\n\n- UI: add star (Rated) and message (Commented) buttons to feedback filter bars (desktop + mobile)\n- Backend: support filter=rated, commented, and combinations via aggregate counts/queries (b03760a)
- gallery: add quick Like/Favorite actions on thumbnails across layouts (6368f10)
- gallery: always-visible feedback indicators on grid tiles; fallback image rendering in lightbox/hero; auto-auth from shared-link token; fix external photo resolver\n\n- GridGallery: bottom-left icons for like/rated/comment on every tile\n- Hero layout grid: added same indicators (non-intrusive icons)\n- Lightbox/Hero: add fallbackSrc to display thumbnail if original fails\n- GalleryAuth: auto-store token from /gallery/:slug/:token and hydrate event\n- Backend gallery photo route: use resolvePhotoFilePath for external-media\n\nfix(admin): move photo feedback badges to bottom-right on admin grid tiles\n\nfix(dashboard): add missing i18n keys for activity types + fallback to formatter\n\nfix(admin/feedback): correct thumbnail URL base + robust date parsing\n\nRefs: #19 (6948aaa)
- gallery: compact vertical icon-only feedback filter in PhotoFilterBar; remove wide buttons to prevent overflow\n\n- Desktop: vertical icon stack (All/Grid, Likes, Favorites) outside scroll area\n- Mobile: vertical icon stack below categories\n- Keeps existing category bar layout and count\n\nRefs: #19 (465f997)
- i18n: add translations for settings tabs (c030e87)
- implement 4 new features with bug fixes and refactoring plan (77a4bfd)
- implement beta/stable release channels with update notifications (617e778)
- implement comprehensive backup and restore system with S3 support (f6a79c8)
- implement feedback filter for liked/favorited photos (Issue #17) (41857ec)
- implement gallery feedback system with version tracking for backups (dc1419c)
- implement gallery logo customization (Issue #17) (909e760)
- lightbox: keep feedback usable while navigating (6368f10), closes #19
- Multi-administrator RBAC, CSS templates & security hardening (#78) (16b3ab0)
- native: auto-serve SPA when dist exists (unless SERVE_FRONTEND=false); add clear logging; serve index.html for /admin (fb16b7b)
- native: build frontend and serve SPA from backend (SERVE_FRONTEND); fix Cannot GET /admin on native installs (9fe10bc)
- native: serve built frontend from backend; build frontend during install/update; ensure env flags (SERVE_FRONTEND, FRONTEND_DIR) (61ad2d6)
- overhaul public landing page and backup tooling (2a4d388)
- select: add per-tile checkbox selection in Admin grid and all gallery layouts; tile click opens viewer; checkbox toggles selection; auto-enable selection mode; add testids (9fda54b)
- setup/docker: auto-set PUID/PGID from invoking user and chown bind-mount folders; create missing data/events dirs (0618b78)
- setup: remove --admin-password; print admin credentials from ADMIN_CREDENTIALS.txt; fix ADMIN_URL to avoid /admin/admin; update native service commands (84d0f63)
- support per-gallery password toggle (5d6c061)
- update GitHub mirror workflow to start history from specific commit (08da01f)
Bug Fixes
- add missing route for feedback management page (517128f)
- add missing translations and fix BackupHistory useTranslation error (99e4778)
- Add settings translations and fix manual backup process (#82) (476fcce)
- admin/feedback: use correct event id when rendering photo thumbnails (4c7b49a), closes #19
- admin: prevent category badge overlap in grid (d64e7d0)
- align backend port to 3000 across all configurations (3a8d53f)
- Align nginx backend port for production Docker deployments (v2.2.2) (#88) (e0bd19a)
- auto-convert old date formats to new date-fns syntax (e1aca6b)
- backup: add lastBackup alias and totalBackups for frontend compatibility (749100c)
- backup: allow manual backups when automated backups are disabled (e6dd89e)
- ci: add QEMU setup for multi-arch builds and skip for PRs (0d36a27)
- clear notifications via API (#35) (013be18)
- complete backup page translations and improve UI (7387a5e)
- complete restore page translations and fix structure (618e269)
- configure github-release plugin to use GitHub API instead of Gitea (2624ea6)
- correct GitHub repository path in Drone CI release config (247e154)
- correct import statements for api in backup JSX files (30f6780)
- correct malformed gallery URLs in admin panel View Gallery links (3074748)
- correct password generator function name in reset password route (65d796b)
- correct script name in Gitea mirror workflow (828d6bc)
- cors: scope CORS to /api only and avoid throwing on disallowed origins; prevents static asset 500s on native (90bb21e)
- critical database connection pool exhaustion issues (8588133)
- db: improve PostgreSQL connection check in wait-for-db.sh (e85a68a)
- display new password after admin password reset (bd8b885)
- Docker Swarm DNS resolution and backup status display (v2.2.3) (082d8ab)
- Docker Swarm DNS resolution and backup status display (v2.2.3) (082d8ab)
- force github-release plugin to use GitHub API instead of Gitea (558a966)
- frontend: add missing externalMedia service and mount admin external-media routes; verify Vite build (ab324f1)
- gallery thumbnails not loading (404 errors) #96 (e3c3c4c)
- gallery/filters: always apply global liked/favorited filters by aggregate counts (ignore guest_id); resolves mismatch between client guest_id and server identifier (526dcd8)
- gallery/filters: make feedback filters work globally when no guest_id is provided; remove guest_id from client photos query\n\n- Backend /api/gallery/:slug/photos: if filter present and guest_id missing, filter by like_count/favorite_count\n- Frontend useGalleryPhotos: stop passing random guestId (does not match server guest_identifier)\n\nThis makes Liked/Favorited filters reflect photos with aggregate feedback counts as expected. (5b2561b)
- gallery/sidebar: compact icon-only feedback filter in sidebar (vertical, small) to avoid overflow; use GalleryFilter variant=compact (ff89f96)
- gallery: feedback filter headline + horizontal icons in sidebar (compact variant); ensure sidebar content scrolls (flex-col container) (3a6d061)
- handle auth errors and JSON parsing in admin panel (b2ae5f1)
- handle legacy non-JSON logo paths when replacing logo (0d5ce48)
- harden gallery downloads and per-gallery auth (fc1bf53)
- implement 9 production enhancements and security fixes (c584369)
- improve admin credentials display and configuration (ad495a9)
- improve version bump workflow with better conflict resolution (c787510)
- JSON serialize favicon and logo URLs for PostgreSQL storage (b83f427)
- Multi-administrator RBAC, CSS templates & security hardening (#80) (37d4e1c)
- multiple improvements and CI/CD updates (bf70567)
- native/http: disable CSP upgrade-insecure-requests and HSTS unless ENABLE_HSTS=true; prevents HTTPS upgrades on HTTP installs (24b4a31)
- native: correct setup paths to /opt/picpeak/app, update repo URL, add sqlite prod support; docs path fixes (b992b15)
- native: remove obsolete workers service; restart only backend; add API request logging and preflight handler; keep static assets outside CORS (f3604b4)
- nginx: add Docker DNS resolver for Swarm/dynamic service discovery (049837f)
- nginx: Add Docker DNS resolver for Swarm/dynamic service discovery (v2.2.3) (cc1ddfd)
- photos: category changes now persist and display correctly (#77) (d9da98c)
- photos: resolve upload category selection and improve feedback buttons (#77) (856d533)
- prefer admin token on admin routes (#23 #28) (d4404e3)
- prevent unnecessary image recompression and fix SQLite migration #95 (3cdc0ea)
- remove description field from migration 035 app_settings inserts (22cc406)
- remove file requirement from GitHub release in Drone CI (8335916)
- remove formatBoolean calls from migration 032 - critical production fix (0502ed3)
- remove unnecessary publish-manifest job from Docker workflow (986b101)
- remove unused formatBoolean import from migration 033 (1238db5)
- remove updated_at field from password reset query (ed0243e)
- remove updated_at from app_settings inserts in multiple migrations (4c42b4c)
- replace github-release plugin with direct curl API call (76a466c)
- resolve backend startup errors in development (f8fb1c3)
- resolve branding display issues and invitation parsing errors (1931d73)
- Resolve branding display issues and invitation parsing errors (v2.2.1) (#86) (d7ecf83)
- resolve CI/CD version bump race condition (0bf4764)
- resolve database connection error for analytics settings (95939d5)
- resolve date formatting error in event creation (c51d756)
- resolve development environment issues (61299a3)
- resolve duplicate logger declaration and syntax error in rate limit service (0fe6d73)
- resolve feedback validation issues from GitHub issue #16 (f26beca)
- resolve feedback validation issues from GitHub issue #16 (67ff415)
- resolve GitHub issues #4, #8, #9, and #10 (934d6dd)
- resolve GitHub mirror workflow cherry-pick failure with merge commits (d6adde4)
- resolve language-specific column issues in core migrations (62617f6)
- resolve migration conflicts and duplicate numbering (a401fbd)
- resolve multiple feedback management issues (ad75818)
- resolve multiple issues from GitHub issue #14 (e91209f)
- resolve port configuration issues and database column mismatch (6de64a1)
- resolve PostgreSQL migration issues for development environment (ee855a3)
- resolve production UI and API issues (d5790ad)
- resolve SIGPIPE error in GitHub mirror workflow file cleanup (b7c8953)
- resolve translation interpolation issue for download button (c1e10f1)
- security: upgrade Alpine base image to fix libpng and c-ares CVEs (b706eeb)
- setup/native: correct repo URL, paths, and systemd for native install; support sqlite in production knex config (87b8414)
- setup/native: Debian 12 compatibility (reliable RAM detection, sudo-less run_as_user, git safe.directory); ensure SQLite data dir; use user for migrate (dc482e6)
- setup/native: handle forced updates safely by fetch+checkout/reset instead of pull; stable on rewritten histories (3697344)
- setup/update: detect native installs first (/opt/picpeak/app/backend or systemd unit); avoid false docker updates on root (adf576f)
- simplify Drone github-release step to avoid shell parsing issues (94f10e1)
- stabilize uploads and guest feedback filters (aaaf598)
- update all deployment guide links in README.md (6389b9d)
- update deployment guide with critical URL configuration and nginx port fixes (1cadce1)
- update form-data and multer to address security vulnerabilities (7750170)
- update Gitea mirror workflow to selectively remove scripts (296430e)
- update GitHub mirror action to support fine-grained personal access tokens (827eb48)
- use admin API for Umami config in analytics page (a54a2c0)
- use plugins/gitea-release for Drone CI/CD (0c783c6)
- use plugins/github-release for Drone CI/CD (f926cd3)
- watermark upload JSON parsing and image quality preservation (0e3b50d)
Documentation
- add minimum system requirements section to README (4615a5d)
- add PUID/PGID note for Docker bind mounts to avoid permission issues (0178e71)
- add transparency note about AI-assisted development (35e360d)
- add warnings about $ character in Docker Compose passwords (87d1761)
- clarify VITE_API_URL usage; remove FRONTEND_API_URL; add storage vars; simplify compose mounts and external DB example (refs #18) (758c085)
- compose: fix backend healthcheck path; remove frontend VITE_API_URL env and document /api proxy (refs #18) (ecbc488)
- fix deployment/admin routing and CORS guidance; add AGENTS.md; ignore AGENTS.md (refs #18) (dad1787)
- follow-up on PR #15 — clarify VITE_API_URL usage, compose mounts, and admin routing (refs #15) (e9171c7)
- readme: reflect new External Media reference mode and update roadmap (gallery feedback status) (ee13556)
- replace email addresses with GitHub issue links (0c989ce)
- update deployment guide with GitHub Container Registry images (2c9a56f)
Code Refactoring
- simplify deployment structure with direct port exposure (6492cb9)