ralksta
4f1b8cfe8a
chore: ignore docs/dev/ in git, remove from tracking
2026-03-08 18:30:59 +01:00
ralksta
f53d01ba6d
chore: consolidate dev-docs and plans into docs/
2026-03-08 18:30:06 +01:00
ralksta
695609cd96
docs: collapse security and advanced docker sections in README
2026-03-08 18:27:01 +01:00
ralksta
297e63fb49
docs: refactor and declutter documentation (one-minute hero)
2026-03-08 18:25:10 +01:00
ralksta
0b1d2ae1db
feat: improve lightbox ux and accessibility
2026-03-08 18:05:34 +01:00
ralksta
8e3f984f96
chore: remove botanica theme completely
2026-03-08 17:53:47 +01:00
ralksta
a3d8917c29
docs: update license section in README to MIT
2026-03-08 17:48:38 +01:00
ralksta
74b5f45369
chore: make project open source under MIT license
2026-03-08 17:45:32 +01:00
ralksta
d83f2e4954
docs: add grid layout screenshots to theming guide
2026-03-08 16:59:18 +01:00
ralksta
c7103c984f
docs: add screenshots for all themes and hero styles
2026-03-08 16:42:32 +01:00
ralksta
81f0b38e57
docs: add production readiness info to README
2026-03-08 16:27:21 +01:00
ralksta
ea72d720df
chore: production-readiness audit fixes and linting cleanup
2026-03-08 16:26:05 +01:00
ralksta
270768d330
feat: add SEO fields to settings configuration
2026-03-08 16:19:41 +01:00
ralksta
01da5e1baa
feat: improve lightbox rendering, hero styles, and config loading
2026-03-08 16:16:15 +01:00
ralksta
09f358559e
fix: resolve hydration mismatch (error #418 ), CSP map blockages, and lightbox visibility
2026-03-07 10:18:20 +01:00
ralksta
4370603a6e
fix: resolve lightbox photo loading issue and fix lint error in vitest.setup.ts
2026-03-07 10:09:26 +01:00
ralksta
c8116242f0
fix: resolve React hydration error #418 and improve lightbox robustness by using string attributes and visible-by-default images
2026-03-07 09:50:05 +01:00
ralksta
21f9fda53a
fix: improve image proxy compatibility with CORS headers and Content-Type fallbacks to resolve broken lightbox images
2026-03-07 09:46:09 +01:00
ralksta
faab17f9cd
fix: increase rate limit and add detailed logging to diagnose broken thumbnails
2026-03-07 09:42:33 +01:00
ralksta
68e442fff5
fix: revert experimental ImmichClient refactoring and restore absolute baseline for image loading
2026-03-07 09:37:48 +01:00
ralksta
277aab54e1
fix: remove minimum length requirement for AUTH_SECRET for maximum compatibility
2026-03-07 09:35:40 +01:00
ralksta
f790aa3268
fix: restore AUTH_SECRET fallback and fix asset caching to resolve fullscreen loading issues
2026-03-07 09:32:20 +01:00
ralksta
280c5430ca
chore: full implementation of code review recommendations (security, quality, tests)
2026-03-07 09:27:47 +01:00
ralksta
6f4b441bd6
style: remove redundant FadeIn from Impressum for consistent global page transitions
2026-03-07 09:16:05 +01:00
ralksta
fd965c5a75
style: restore CSS-only transitions and update config examples
2026-03-07 09:13:36 +01:00
ralksta
59ffe37cce
docs: remove transitions from settings yaml example and lib/config
2026-03-07 09:12:24 +01:00
ralksta
a529614c19
refactor: completely remove framer-motion and page transitions
2026-03-07 09:11:40 +01:00
ralksta
59ff506b72
style: change header to fixed positioning to prevent wiggling
2026-03-07 09:07:28 +01:00
ralksta
b3f575fe6b
style: refine page transitions and remove redundant fade-ins
2026-03-07 09:06:12 +01:00
ralksta
cf5860563e
fix: resolve edge runtime and server component style build errors
2026-03-07 09:03:32 +01:00
ralksta
0fed8e6c78
feat: separate settings and gallery config, add impressum page
2026-03-07 08:34:05 +01:00
ralksta
1e079760d8
feat: add configurable page transitions with framer-motion
2026-03-07 08:30:12 +01:00
ralksta
e0bf02b31d
security: respect global exifOnHover config in API
2026-03-07 08:19:20 +01:00
ralksta
e394fe84a0
security: implement AUTH_SECRET and secure map/exif API routes
2026-03-07 08:18:23 +01:00
ralksta
2a16a9386f
feat: simplify gallery.yaml and add support for album name overrides
2026-03-05 16:52:01 +01:00
ralksta
9179a74f50
fix: prevent portrait image from being cut off on mobile
2026-02-17 16:59:12 +01:00
ralksta
76889093bf
fix: prevent Leaflet tile rendering on hidden container
...
Keep map container always visible (no display:none), overlay
loading text on top, and call invalidateSize() after init.
2026-02-15 23:14:08 +01:00
ralksta
960bab8783
fix: broaden CSP for CartoDB tile subdomains and Leaflet marker icons
2026-02-15 23:11:44 +01:00
ralksta
62a7b178d6
feat: add smart map view with location-level clustering
...
- /map page with Leaflet (CartoDB dark tiles)
- Photos clustered by city/country (not per-photo)
- /api/map endpoint with encrypted cover asset IDs
- Configurable via gallery.yaml (map: true/false)
- Conditional nav link in header
- CSP updated for Leaflet CDN and tile servers
- Theme-aware popups with cover thumbnails and album links
2026-02-15 23:07:04 +01:00
ralksta
424f7558c6
feat: add docker-compose.dev.yml for dev mode with hot reload
...
Run with: docker compose -f docker-compose.dev.yml up
Mounts source code, runs npm run dev, shows DevToolbar.
2026-02-15 22:32:21 +01:00
ralksta
23f8eadf1c
feat: add dev-only visual theme builder toolbar
...
Floating palette button (bottom-left) opens a panel to live-preview:
- Theme presets (switches data-preset + fonts + accent)
- Dark/light mode
- Photo frame style
- Film grain toggle
- Grid columns/gap sliders
Hero styles and grid layouts copy YAML to clipboard (need server re-render).
Only renders when NODE_ENV=development. Toggle: click or Cmd+Shift+T.
2026-02-15 22:27:10 +01:00
ralksta
f0d2d2e5ed
fix: make about page dynamic to prevent build-time token key mismatch
...
The about page was statically pre-rendered at build time using the
Dockerfile's dummy IMMICH_API_KEY. The portrait image token was
encrypted with sha256('build-placeholder') but decrypted at runtime
with sha256(real-key) → 400 Bad Request.
2026-02-15 22:23:16 +01:00
ralksta
ec9ad45475
fix: allow inline scripts in CSP for Next.js hydration
...
script-src 'self' was blocking all Next.js inline hydration scripts,
preventing client-side JS from running. This caused fade-in items to
stay at opacity:0 (empty grid). Added 'unsafe-inline' until Next.js
App Router supports nonce-based CSP.
2026-02-15 22:19:07 +01:00
ralksta
d2f15401c9
docs: update README and gallery-config for 7 presets, new hero styles, and gallery layouts
2026-02-15 22:04:50 +01:00
ralksta
faaad4cbc7
fix: add dummy build-time env vars to Dockerfile for Next.js page data collection
2026-02-15 21:59:53 +01:00
ralksta
4b80af1c29
feat: add noir, monograph, botanica presets + stacked/typographic/mosaic hero styles + showcase/filmstrip/editorial-flow gallery layouts
...
- 3 new theme presets: noir (darkroom analog), monograph (typographic book), botanica (organic nature)
- 3 new hero styles: stacked (fullbleed + thumbnail strip), typographic (text-only), mosaic (multi-image grid)
- 3 new gallery layouts: showcase (featured + grid), filmstrip (horizontal scroll), editorial-flow (alternating pairs)
- Extended config types, validation, and CSS tokens for all new options
- Updated theming docs with new presets table, descriptions, and example configs
2026-02-15 21:58:31 +01:00
ralksta
4e040c28f3
fix: track screenshots in git for GitHub README rendering
2026-02-15 17:19:14 +01:00
ralksta
570cabc972
feat: restyle themes to be visually distinct
...
- Minimal: Swiss Brutalist — fullbleed hero, true B&W, zero-gap grid, Geist font
- Editorial: Cinematic Magazine — warm charcoal, Bodoni Moda serif, slow transitions
- Classic: Gilded Gallery — gold accents, Cinzel headings, passepartout, ornamental dividers
Updated config presets, per-theme color palettes, ~550 lines of scoped CSS overrides,
data-preset attribute on html element, responsive breakpoints, screenshots, and docs.
2026-02-15 17:17:25 +01:00
ralksta
a9737ad8e7
feat: theming system, documentation, and photo grid regression tests
...
- Add configurable theme system with 4 presets (studio, minimal, editorial, classic)
- Theme controls fonts, colors, accent, photo frames, grain, and header dot
- Resolve themes from gallery.yaml: string shorthand or full object override
- Inject theme as CSS custom properties on <html> element
- Dynamic Google Fonts loading based on theme config
- OG image route reads accent/background from theme
- Refactor Studio overrides into conditional CSS via data-attributes
Documentation:
- Add docs/gallery-config.md with comprehensive configuration reference
- Add docs/theming.md with preset reference and custom theme guide
- Slim README to link to detailed docs
Fix CSS regression:
- Fix passepartout frame overflow:visible breaking next/image fill rendering
- Remove duplicate .photo-grid__item block that stripped overflow:hidden
Testing:
- Add e2e/photo-grid.spec.ts with 3 regression tests:
- Grid items render with real dimensions
- overflow:hidden CSS guard (catches the exact bug fixed)
- Images load with real pixel data (not blurhash)
Tooling:
- Add scripts/screenshots.ts for automated theme screenshot generation
- Handles dev server lifecycle, theme cycling, FadeIn + lazy image handling
2026-02-15 12:21:02 +01:00
ralksta
a0ee0ff433
chore: production readiness audit
...
- Move plans/ to dev-docs/, delete unused scaffold SVGs
- Create .dockerignore, rename container to immich-folio
- Extract BackLink component and toPhotoItems() helper in page.tsx
- Add keyboard accessibility (role=button, tabIndex, onKeyDown) to PhotoGrid
- Add aria-label to Lightbox EXIF toggle
- Fix React lint: replace setState-in-effect with useState initializer
- Add rate limiting to /api/auth (brute-force protection, 10 RPM)
- Add HSTS and X-DNS-Prefetch-Control security headers
- Add Secure flag to auth cookie in production
- New unit tests: rate-limit.test.ts (5), auth.test.ts (12)
- All 47 tests pass, 0 lint errors, build clean
2026-02-15 11:23:51 +01:00