3.5 KiB
3.5 KiB
Requirements backlog (complete)
Status: ✅ done · 🚧 in progress · ⬜ planned · 🔑 needs key/creds. Cross-ref /docs/ROADMAP.md.
Done (Phases 1–3)
- ✅ macOS-Photos UI: sidebar, toolbar, Library (Years/Months/All), Collections, Map (map/satellite/grid), People, Recently Deleted (locked), lightbox, light/dark/semi-dark, responsive to 280px, a11y, nonce CSP.
- ✅ Albums (CRUD/nested/smart), source auto-classify, recycle bin, duplicates, multi-select, import (file+drag), export, EXIF (GPS/date/camera) on import.
- ✅ Object detection (TF.js, free) → tags/search/find-similar/Objects browser/object focus.
- ✅ Annotations (rect/oval/line/arrow/double-arrow measurement/text/freehand + colors) in editor + lightbox.
- ✅ Info panel (full metadata + mini-map). Themes menu +
accentColor/borderRadiusprops. - ✅ Gemini generative editor (Remove BG/Restore/Colorize/Replace Sky/prompt) — 🔑 needs billed key (free=429).
Now / next (in user's priority order)
- 🚧 Custom camera (#1): getUserMedia preview; capture photo; record video; switch front/back; grid; live annotation + measurement; geolocation on capture (permission); auto object-detect after capture.
- ⬜ Supabase backend + storage (#last, 🔑): Postgres data + Supabase Storage. No localStorage reliance — backend is the source of truth. Ask user for creds (URL, anon key, service-role key, bucket) with steps.
- ⬜ Face clustering → People; OCR (tesseract.js) → document search; semantic "show me beach photos" (transformers.js / Hugging Face CLIP) — all free, in-browser.
- ⬜ Video editor + annotations; macOS-parity player polish.
New requests (this session — must add)
- ⬜ Editor: straighten / tilt (angle slider) — rotate by arbitrary degrees.
- ⬜ Crop: free-form AND fixed-ratio — when a ratio (e.g. 1:1 square) is selected, dragging/stretching the crop box keeps that aspect ratio; also free crop.
- ⬜ Import sync of existing metadata: if an imported/mobile image already has tags (IPTC/XMP keywords) + location + details, read and apply them (exifr supports XMP/IPTC). Keep object detection + object albums.
- 🚧 Web-meaningful UI (deep pass): "All Projects" → "All Albums" (this is a web gallery, not iOS); remove "Open App Store" (meaningless on web); review sidebar tabs, corner radius, touch-ups so everything is meaningful for a web gallery and matches macOS more closely.
- ⬜ Search dropdown defaults: show quick filters Recently Viewed, Recently Edited (+ Recently Shared) when the search field is focused.
- ⬜ Info → map click opens full Map centered on that photo's location.
- ⬜ Map parity w/ macOS: locations + images + tags; latest image shown for a tag; click a tag → open that tag's images grouped by date (date-wise). Tag = album-like view, date-grouped.
- ⬜ Local-model fallback: if Gemini key missing/invalid, use a local model. Concretely wire
@imgly/background-removal(free, in-browser) for Remove Background so it always works without a key. - ⬜ Everything free; build our own if no free option.
- ✅ Memory in project
.claude/folder (this folder) — done. - ⬜ More advanced features (open-ended; user will add more later).
Notes
- getUserMedia needs HTTPS or localhost (dev OK). Permissions-Policy already allows camera/mic/geolocation=self.
- When Supabase is wired, switch the demo adapter from localStorage → Supabase and drop localStorage reliance.