Files
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

5.3 KiB
Raw Permalink Blame History

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.