Commit Graph

6 Commits

Author SHA1 Message Date
Jeff Emmett 96d9a6971c feat: split map view into 50/50 map + bounds-filtered photo grid
On map view the body container now shows the Leaflet map on one half
and a photo grid on the other half. The grid renders only photos
whose GPS falls inside the map's current bounds, and re-renders on
moveend/zoomend so panning and zooming filters the visible photo set
live. Stacks vertically on narrow viewports.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:49:25 -04:00
Jeff Emmett b4e801e17f feat: auto-provision heatmap API key + move banner below sections
The heatmap iframe now requests an Immich API key via /api/api-keys
(asset.read, asset.view) on first load, caches it in localStorage,
and passes it via ?apiKey= so the user doesn't have to paste one.

Banner moved to the bottom of the /explore scroll container, below
People and Places.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:47:18 -04:00
Jeff Emmett 7be768e2db feat: pinch-zoom, heatmap iframe, and scroll strips on /explore
- Enable native mobile pinch-zoom by rewriting the viewport meta.
- Strip Content-Security-Policy / X-Frame-Options from HTML responses
  so heatmap.jeffemmett.com can be iframed in.
- On /explore: inject a collapsible heatmap iframe at the top, and
  replace People + Places sections (truncated grid with 'view more')
  with horizontally-scrollable strips fetched from /api/people and
  /api/search/cities.
- Re-run injection on history pushState + MutationObserver to cover
  Svelte SPA route changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:41:14 -04:00
Jeff Emmett 2418298d77 feat: PWA auto-update detection for injected script
server.js: hash live-search.js into INJECT_VERSION, expose
/api/custom/inject-version, set no-store on HTML so inline version
tag stays fresh.

live-search.js: compare baked window.__LS_VERSION vs server version
every 2 min + on visibility change; show banner, auto-unregister
service worker, clear caches, and reload when a new version ships.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:26:04 -04:00
Jeff Emmett 40dd22e3ad feat: replace Place dropdowns with search input + forced map view
Hijacks #location-selection in Immich's search filter modal: hides
country/state/city comboboxes, injects a text input that opens the
live-search overlay directly in map view for pan/zoom exploration.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 12:14:47 -04:00
Jeff Emmett 38bdcf25dc feat: add search-app proxy with WebSocket support and upload buffering
Adds immich-proxy (search-app) with live search injection, WebSocket
proxying for socket.io, and 10GB upload buffering via Traefik middleware.
Moves Traefik routing from immich-server to proxy. Updates valkey 8→9.
Adds backlog tasks for drone sync and Syncthing reconnection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:47:53 -04:00