Files
advance-photo-gallery-web-sdk/.claude/memory/requirements.md
T
KaushikRK99 7673fc63ea feat: enhance styling and layout for toolbar, map components, and editor
- Updated toolbar styles for improved layout and appearance, including padding and margin adjustments.
- Introduced new styles for scale menu and compact dropdowns.
- Enhanced map pin tooltips with better positioning and hover effects.
- Added new styles for map sheet filters, including search and date range controls.
- Improved editor styles for a more cohesive look and feel, including transport controls for video editing.
- Expanded GeoLocation interface to include additional address fields and formatted address.
- Updated MediaItem interface to include storage reference and uploadedBy fields.
- Enhanced MediaComment interface with author details for better user identification.
- Introduced GalleryUser interface to represent signed-in users in the host app.
2026-07-23 07:34:20 +05:30

63 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Requirements backlog (complete)
Status: ✅ done · 🚧 in progress · ⬜ planned · 🔑 needs key/creds. Cross-ref `/docs/ROADMAP.md`.
## Done (Phases 13)
- ✅ 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`/`borderRadius` props.
- ✅ Gemini generative editor (Remove BG/Restore/Colorize/Replace Sky/prompt) — 🔑 needs billed key (free=429).
## Now / next (in user's priority order) — all ✅ done
1.**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.
2.**Supabase backend + storage** (🔑): Postgres data + Supabase Storage adapter (run `docs/supabase-setup.sql`
once). Backend is the source of truth on load. The CRM host supplies its own **incremental** data-door adapter
(`applyChanges` + `putMedia`); localStorage remains the zero-config dev default.
3. ✅ Face clustering → People; OCR (tesseract.js) → Documents + searchable text; semantic search
(transformers.js / CLIP) — all free, in-browser.
4. ✅ Full video editor + annotations (timeline engine, no ffmpeg); ✅ macOS-parity **custom video player**.
## New requests (early sessions — now all done)
-**Editor: straighten / tilt** (angle slider) — rotate by arbitrary degrees.
-**Crop: free-form AND fixed-ratio** — a selected ratio (e.g. 1:1) is kept while dragging; also free crop.
-**Import sync of existing metadata**: IPTC/XMP keywords + location read on import (exifr) alongside object detection.
-**Web-meaningful UI** (deep pass): "All Projects" → **"All Albums"**; removed "App Store"; sidebar tabs / corner
radius / touch-ups reviewed for a web gallery matching macOS.
-**Search dropdown defaults**: Recently Viewed / Recently Edited / Recently Added when the search field is focused.
-**Info → map click opens full Map** centered on that photo's location.
-**Map parity w/ macOS**: click a tag → that tag's images grouped by date; thumbnail pins; location sheets.
-**Local-model fallback**: `@imgly/background-removal` (free, in-browser) wired for Remove Background — no key needed.
-**Everything free**; build our own where no free option (analysis/OCR/faces/semantic/bg-remove all run in-browser).
-**Memory in project `.claude/` folder** (this folder) — done.
- ✅ More **advanced features** — versioning + audit log, comments, advanced video editor, sharing, password lock,
glass design polish, custom video player (open-ended; new requests continue below).
## Host-app embedding & CRM integration (2026-07-23) — done
> The SDK now embeds into a host product (LynkedUp CRM), not only the standalone demo. All of it is opt-in.
-**Embedded layout** (`embedded`) + **chrome suppression** (`chrome`, `DEFAULT_CHROME`) + **`hiddenViews`** +
**`keyboardShortcuts`** flag; live `setConfig` re-applies theme/tokens/identity/chrome without remount.
-**Host identity** (`currentUser: GalleryUser`) → identity-stamped **comments** (`authorId/author/authorAvatar`,
delete only own), **uploads** (`MediaItem.uploadedBy`, never overwritten), **versions** (author on each). Info panel
shows "Uploaded by" + per-version author. `be-crm` still owns `owner_principal_id` (display-only here).
-**`shareBaseUrl`** (host owns share-link base) + **full-screen** (`defaultFullscreen`, `.apg--fullscreen`,
`setFullscreen`/`toggleFullscreen`).
-**Full `ThemeTokens` map (52 keys)** → CSS vars (sanitized); floating glass toolbar + `.apg-scalemenu` dropdown.
-**Incremental adapter**: `applyChanges(StateChanges)` (diff-based, serialized, rollback-on-reject) +
`putMedia(id, blob, meta) → StoredBlob {ref,url}`; `MediaItem.storageRef`. Types `StateChanges`/`StoredBlob` exported.
-**Server-backed Recently-Deleted lock** (`lockProvider { status, set, verify }`) replaces the device-local hash;
`lockConfigured` = UI truth; `lockError` = wrong-password vs unavailable.
-**Editable caption + multi-line `note`** in Info (searchable); **full-address reverse geocoding** (Nominatim,
persisted); **map** fly-to / count badge / hover mini-slider / date-range location filter.
-**UI fixes**: Info-panel inline `<video>` preview; comments as cards + spacing/divider; video-editor custom
transport outside the transformed frame; map tooltip `user-select:none` + edge-clamping.
- ⬜ Still open: real multi-user auth / permissions in the host (SDK identity is display-only; backend is the authority).
## 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.