Commit Graph

248 Commits

Author SHA1 Message Date
ralksta
c0740f0db5 a11y: remove ScrollToTop from tab order and hide from screen readers when not visible
- Added tabIndex={-1} when button is hidden to remove from keyboard tab order
- Added aria-hidden when not visible to hide from screen readers
- Added title attribute for tooltip text

Closes #6
2026-03-11 23:33:51 +01:00
Ralksta
c845df4afb feat(lightbox): add keyboard shortcut 'i' for EXIF toggle and title tooltips on navigation buttons [#3]
Adds a keyboard shortcut (`i` or `I`) to toggle EXIF info in the Lightbox component. Also adds descriptive `title` tooltips with keyboard shortcut hints to all interactive buttons (Close, Previous, Next, Info) in the Lightbox overlay.

This improves accessibility and the overall user experience by providing more discoverable navigation options.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-03-11 23:33:00 +01:00
Ralksta
f3890fc6bc perf: memoize PhotoGrid assets map to prevent re-renders during lightbox navigation [#5]
Extracted the grid mapping logic out of the return block into a `useMemo`
hook depending on `[assets, layout, openLightbox]`. This prevents the
entire photo grid—including complex Next.js `<Image>` and `<FadeIn>`
components—from needlessly re-rendering every time the user navigates
via the lightbox arrows or presses next/prev buttons, which previously
caused `lightboxIndex` to update and trigger a re-render of the entire grid.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-03-11 23:32:40 +01:00
Ralksta
a94b55704e security: prioritize request.ip over x-forwarded-for to prevent IP spoofing [#4]
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-03-11 23:32:32 +01:00
Ralksta
96fe4db099 security: validate auth input types and limit length to prevent DoS [#1]
Added type checking and length validation to the `slug` and `password` variables in the `app/api/auth/route.ts` file to prevent potential DoS attacks via excessively long strings passed to expensive crypto functions.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-03-11 23:32:22 +01:00
ralksta
134eae94e4 feat(subpages): add optional sections with typographic TOC
- Add SubpageSectionConfig type to schema.ts
- Update config parser to handle sections with album overrides
- Refactor SubpageGridView to render TOC + section headers
- Add base CSS for subpage-toc and subpage-section in globals.css
- Add theme-specific overrides for all 5 themes (minimal, editorial,
  classic, noir, monograph)
- Update gallery.yaml.example and docs/gallery-config.md
2026-03-08 23:52:23 +01:00
ralksta
0eaadeda55 docs: clarify that album grid thumbnails adhere strictly to the cover selection performed in Immich UI 2026-03-08 23:21:25 +01:00
ralksta
25b9a92e12 feat: propagate subpage subtitle into deep AlbumDetailView headers 2026-03-08 23:16:01 +01:00
ralksta
7663bcbcd0 refactor: extract individual layout themes from globals.css into modular app/themes/*.css architecture 2026-03-08 22:57:38 +01:00
ralksta
5667ba01b8 style: align subpage header to correctly adopt layout rules from selected themes 2026-03-08 22:54:23 +01:00
ralksta
a0777e40e2 style: let theme alignment dictate subpage headers by removing hardcoded text centering 2026-03-08 22:52:44 +01:00
ralksta
3953db0ff8 style: add global typographic classes for the subpage header block 2026-03-08 22:50:36 +01:00
ralksta
425e61312d chore: update .gitignore with server.log and .agent directory 2026-03-08 22:49:14 +01:00
ralksta
6371a60d0a chore: add workflow rule for updating documentation whenever user-facing settings change 2026-03-08 22:48:06 +01:00
ralksta
a99406c382 docs: add title and subtitle documentation for subpages to gallery config 2026-03-08 22:47:38 +01:00
ralksta
32bb6cb2ca feat: allow subpages to override title and add subtitle in gallery.yaml 2026-03-08 22:46:27 +01:00
ralksta
88f03fe2ce fix: make impressum page dynamic so it reads volume settings at runtime instead of statically compiling to 404 2026-03-08 21:53:20 +01:00
ralksta
65a661ce84 chore: make .env.local optional in docker-compose 2026-03-08 21:45:10 +01:00
ralksta
05de957b66 feat: add .env instruction to setup screen 2026-03-08 21:43:26 +01:00
ralksta
b9993bd29e fix: gracefully handle Next.js static component fetch rendering when setup configs are completely empty 2026-03-08 21:38:44 +01:00
ralksta
89bb7c0038 chore: add build network context to docker-compose 2026-03-08 21:31:07 +01:00
ralksta
59394f5ba2 fix: remove invalid npm flag 'dns-result-order' 2026-03-08 21:28:56 +01:00
ralksta
801dc14de1 chore: force IPv4 DNS resolution for npm ci in Dockerfile to fix timeout lags 2026-03-08 21:28:10 +01:00
ralksta
4e4a623181 chore: enable verbose npm ci logging for debug in builder 2026-03-08 21:25:08 +01:00
ralksta
39feeb58f9 chore: add npm network timeouts to fix docker build stall on servers 2026-03-08 21:22:46 +01:00
ralksta
7a1dfdc519 chore: remove unused 3P dependencies (zod, gray-matter, bcryptjs) and switch to native implementations 2026-03-08 21:12:52 +01:00
ralksta
25aefa5b70 feat: implement graceful setup fallback screen when yaml files are missing 2026-03-08 21:04:41 +01:00
ralksta
9c1333920f chore: remove settings.yaml and gallery.yaml from repo 2026-03-08 20:56:26 +01:00
ralksta
a8b18232a0 chore: add content/about.md to .gitignore 2026-03-08 20:54:22 +01:00
ralksta
29da3368a2 chore: rename about.md to about.md.example 2026-03-08 20:54:03 +01:00
ralksta
593113e88a fix: make about.md optional and copy content folder in Dockerfile 2026-03-08 20:53:45 +01:00
ralksta
170fa6e132 chore: add default AUTH_SECRET to Dockerfile 2026-03-08 20:49:59 +01:00
ralksta
2a4b9091da chore: re-add settings and about without history 2026-03-08 20:47:08 +01:00
ralksta
23d8bf0425 refactor: apply Clean Architecture principles
- Extract EXIF and Swipe logic into custom hooks for Lightbox
- Extract Map layout data formatting into mapService
- Extract AlbumDetailView and SubpageGridView components from page router
- Restructure monolithic config.ts into clean config/ directory
2026-03-08 18:55:45 +01:00
ralksta
89dfef6144 docs: consolidate feature ideas into single backlog 2026-03-08 18:40:37 +01:00
ralksta
8472e79a35 docs: merge security & infrastructure into one collapsed section 2026-03-08 18:32:52 +01:00
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