• v0.5.0 cb79da89fb

    Owner feedback, server-side aggregation, grid keyboard culling, XMP sources
    ci / docker (push) Successful in 11m52s

    nils released this 2026-07-17 23:15:15 +00:00 | 1 commits to main since this release

    • photographer verdict/rating on photos (migration 0005), PUT endpoints
      returning the fresh per-photo aggregate; FeedbackAggregate in models is
      the single home of the merge policy (max rating, accept beats reject,
      owner counts), used by album detail, XMP export and vote responses
    • feedback rows carry share_id; per-client filter pills (incl. 'you')
      scope filters/counts/overlays by id — labels are display-only
    • XMP export modal with per-source checkboxes (?shares=…&own=…), share
      validation, id dedup, and basename merging so RAW+JPEG pairs share one
      sidecar instead of losing feedback to an unmatchable name
    • grid keyboard culling: arrow cursor (clamped, outline after first use),
      Space opens / closes the viewer, Enter/S toggle select, P/X/U and star
      keys act on the cursor photo; keyboard votes never auto-navigate
    • lightbox freezes the visible list while open, so voting a photo out of
      the active filter no longer closes the viewer mid-run
    • perf: memoized per-scope derivation map, content-visibility on grid
      cells, lightweight /pending poll decoupled from vote patches, aggregate
      recompute in one SQL statement, out-of-order response guard
    • structure: AlbumPage split into components (Modal, UploadZone +
      ActivityOverlay with failed-count, SharesPanel, XmpModal), shared
      useEscape with typing guard, expiry year guard in endOfDayIso
    Downloads