From b66dceb10729835dd1665b2b58f289ab0ff7a45e Mon Sep 17 00:00:00 2001 From: ralksta Date: Sat, 14 Feb 2026 12:20:35 +0100 Subject: [PATCH] docs: add portfolio ideas + fix hero carousel YAML format --- content/gallery.yaml | 5 ++++- plans/IDEAS.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 plans/IDEAS.md diff --git a/content/gallery.yaml b/content/gallery.yaml index 596c6c1..6287a84 100644 --- a/content/gallery.yaml +++ b/content/gallery.yaml @@ -2,7 +2,10 @@ # Album and subpage definitions for your public gallery. # Secrets (API key, server URL) stay in .env.local. -hero: 03c0df0e-01d7-4cc7-8352-cf30d2289ad6 +hero: + - 03c0df0e-01d7-4cc7-8352-cf30d2289ad6 + - a492300b-14ca-4167-a2c9-815c820a8802 + - 7fdc0891-8e9d-48f1-9f1b-a8697c6dbea1 # Standalone albums shown directly on the homepage albums: diff --git a/plans/IDEAS.md b/plans/IDEAS.md new file mode 100644 index 0000000..4fd5678 --- /dev/null +++ b/plans/IDEAS.md @@ -0,0 +1,43 @@ +# Portfolio Ideas + +## 🧑‍💻 Developer + +- **Internationalization (i18n)** — Multi-language UI support (DE/EN). Extend YAML config with locale files +- **ISR / Stale-While-Revalidate** — Replace `force-dynamic` with Incremental Static Regeneration + on-demand revalidation +- **Image CDN / Edge caching** — Add `Cache-Control` headers on `/api/image` proxy responses to reduce Immich load +- **Structured logging** — Replace console.log with `pino` for production observability (request IDs, timings, cache hits) +- **CI/CD pipeline** — GitHub Actions: lint → typecheck → unit tests → Playwright E2E → Docker build → push to GHCR +- **Content Security Policy** — CSP headers to lock down the public-facing site +- **Privacy-friendly analytics** — Plausible or Umami (self-hosted) to track album/photo engagement + +## 📸 Photographer + +- **Photo stories / Essays** — Vertical scroll format with images + text interspersed, like a photo essay. Portfolio differentiator +- **Map view** — Minimal world map from EXIF city/country data, each dot links to an album. Mapbox GL or Leaflet +- **Monochrome / Film simulation toggle** — CSS filters for grayscale, Tri-X, Portra 400 looks across the grid +- **Before/After slider** — Draggable comparison slider in lightbox for edit showcases +- **Collections by camera/lens** — Auto-generate virtual albums from EXIF data ("Shot on Leica Q3", "Summilux 35mm") +- **Photo of the day / Favorites** — Rotate a featured hero photo, driven by tag in Immich or `gallery.yaml` + +## 👤 User / Visitor + +- **Slideshow mode** — Auto-advance through photos (3s/5s/10s). Great for exhibitions and ambient display +- **Photo sharing** — "Copy link" button in lightbox with toast + per-photo OG image generation +- **Keyboard shortcut hints** — `?` button revealing available shortcuts (arrows, Esc, F for fullscreen) +- **Fullscreen API** — Chrome-free immersive viewing in lightbox +- **Pinch-to-zoom** — Touch gesture zoom in lightbox for detail viewing +- **Album / Subpage descriptions** — Markdown description per subpage in `gallery.yaml`, shown above the grid +- **Progressive loading animation** — Ken Burns zoom/pan on ThumbHash placeholders while loading + +## 🏆 Quick Wins (High Impact / Low Effort) + +| Idea | Effort | Impact | +|------|--------|--------| +| Slideshow mode | Low | High — exhibition ready | +| Copy link + per-photo OG | Low | High — shareability | +| Album descriptions in YAML | Low | Medium — context | +| Fullscreen API in lightbox | Low | Medium — immersive | +| Monochrome toggle | Low | Medium — Leica vibes | +| ISR caching | Medium | High — performance | +| Photo stories/essays | High | Very high — differentiator | +| Map view | Medium | High — wow factor |