2026-03-08 18:40:37 +01:00
|
|
|
# Portfolio Backlog & Ideas
|
|
|
|
|
|
2026-03-15 07:32:42 +01:00
|
|
|
A consolidated list of features and ideas for future versions, cleaned up from everything that has already been implemented.
|
2026-02-14 12:20:35 +01:00
|
|
|
|
|
|
|
|
## 🏆 Quick Wins (High Impact / Low Effort)
|
|
|
|
|
|
2026-03-12 11:30:45 +00:00
|
|
|
| Idea | Effort | Impact |
|
|
|
|
|
| ------------------------------ | ------ | -------------------------------------------------- |
|
|
|
|
|
| **Slideshow mode** | Low | High — exhibition ready (Auto-advance 3s/5s/10s) |
|
|
|
|
|
| **Fullscreen API in lightbox** | Low | Medium — immersive (Chrome-free) |
|
|
|
|
|
| **Download originals** | Low | High — client delivery (Button in lightbox) |
|
|
|
|
|
| **Photo of the Day** | Low | Medium — return visits (Auto-rotate hero image) |
|
|
|
|
|
| **Photo sharing** | Low | Medium — "Copy link" button in lightbox |
|
2026-03-08 18:40:37 +01:00
|
|
|
|
2026-08-23 23:18:14 +02:00
|
|
|
_Shipped: **Keyboard shortcut hints** — `?` opens the list in the lightbox, with a one-time nudge for first-time visitors._
|
|
|
|
|
|
2026-03-08 18:40:37 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 🌍 Bigger Features & Enhancements
|
|
|
|
|
|
|
|
|
|
- **ISR / Stale-While-Revalidate** — Replace `force-dynamic` with Incremental Static Regeneration + on-demand revalidation.
|
|
|
|
|
- **Client proofing** — Let clients favorite/select photos in password-protected galleries.
|
|
|
|
|
- **Map view** — Minimal world map from EXIF city/country data, each dot links to an album.
|
|
|
|
|
- **EXIF analytics page** — Visual breakdown of shooting patterns: most-used focal lengths, aperture distribution.
|
|
|
|
|
- **Before/After slider** — Drag-to-reveal comparison component for retouching showcases.
|
|
|
|
|
- **Watermarking** — Server-side watermark overlay on proxied images.
|
2026-08-23 23:18:14 +02:00
|
|
|
- ~~**Internationalization (i18n)** — Multi-language UI support (DE/EN).~~ Shipped for the visitor UI; the admin panel is still English-only.
|
2026-03-08 18:40:37 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 📖 Deep Dive Feature Plan: Photo Stories / Essays
|
|
|
|
|
|
2026-03-12 11:30:45 +00:00
|
|
|
_Vertical scroll format with images + text interspersed, like a photo essay. A major portfolio differentiator._
|
2026-03-08 18:40:37 +01:00
|
|
|
|
|
|
|
|
### Proposed Architecture
|
|
|
|
|
|
|
|
|
|
**How it works:**
|
|
|
|
|
The photographer writes standard Markdown files in `content/stories/`.
|
|
|
|
|
We extend the standard Markdown image syntax to pull images directly from Immich using the asset UUID:
|
|
|
|
|
|
|
|
|
|
```md
|
|
|
|
|
# My trip to Japan
|
|
|
|
|
|
|
|
|
|
Here is some text introducing the story.
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Implementation Layers
|
|
|
|
|
|
|
|
|
|
1. **Parser Layer (`lib/storyParser.ts`)**
|
|
|
|
|
- Parse markdown files using `marked`.
|
|
|
|
|
- Identify `asset:UUID` image nodes.
|
|
|
|
|
- Batch-fetch necessary `ImmichAsset` data to generate `ThumbHash` and Proxy-URLs.
|
|
|
|
|
- Return a structured array of blocks (e.g. `{ type: 'text', html: '...' }`, `{ type: 'image', assetId: '...', url: '...' }`).
|
|
|
|
|
|
|
|
|
|
2. **Routing Layer**
|
|
|
|
|
- `app/stories/page.tsx`: Index page showing cards for all stories (sorted by date).
|
|
|
|
|
- `app/stories/[slug]/page.tsx`: The essay reader.
|
|
|
|
|
|
|
|
|
|
3. **Design Layer**
|
|
|
|
|
- Immersive, single-column reading experience.
|
|
|
|
|
- Consecutive images can automatically adapt to side-by-side or masonry presentation depending on aspect ratios.
|
|
|
|
|
- Typography should be highly legible, matching the chosen global theme.
|