- verdicts table (per link, like ratings), PUT verdict endpoint, typed Verdict enum - share page: thumbs up/down, verdict filter with counts, view-scoped selection bar - lightbox: per-page shortcut table (P/X/U, 1-5/0, S), ? help overlay, action toast when a keyboard vote auto-advances - shared useLightbox hook; single keydown subscription reading live state via ref - album view: per-link thumbs and vote counts; share list shows accept/reject totals - feedback queries deduped and run concurrently; verdict counts in one scan
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
|
||||
Self-hosted client gallery for photographers. Upload RAWs/JPGs into albums,
|
||||
share them with clients via private (optionally password-protected) links,
|
||||
collect ratings and tags, and let clients download originals.
|
||||
collect accept/reject votes, ratings and tags, and let clients download
|
||||
originals.
|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -36,8 +37,10 @@ collect ratings and tags, and let clients download originals.
|
||||
revokes access immediately. Clients use unguessable share tokens, optionally
|
||||
gated by an argon2-hashed password (10 wrong guesses lock the link for
|
||||
15 minutes).
|
||||
- **Frontend**: React + Vite SPA — justified gallery, lightbox with rating
|
||||
stars and tag chips, drag-and-drop multi-file upload with progress.
|
||||
- **Frontend**: React + Vite SPA — justified gallery, lightbox with
|
||||
accept/reject thumbs, rating stars and tag chips, keyboard-driven culling
|
||||
(`P`/`X`/`U`, `1`–`5`, `?` shows all shortcuts), drag-and-drop multi-file
|
||||
upload with progress.
|
||||
|
||||
## Local development
|
||||
|
||||
@@ -135,9 +138,11 @@ Notes:
|
||||
- Each album can have any number of share links (`/s/<24-char-token>`), each
|
||||
with its own label (e.g. the client's name), optional password, optional
|
||||
expiry, and a per-link download toggle.
|
||||
- Ratings (1–5 stars) and free-form tags are stored **per link**, so create
|
||||
one link per client to keep feedback separate. The album view shows all
|
||||
feedback grouped by link label.
|
||||
- Accept/reject votes (👍/👎), ratings (1–5 stars) and free-form tags are
|
||||
stored **per link**, so create one link per client to keep feedback
|
||||
separate. The album view shows all feedback grouped by link label, and
|
||||
clients can filter their gallery by verdict (e.g. review only what's still
|
||||
undecided, or select-all + download the accepted set).
|
||||
- Clients (and you) can multi-select photos and download them — or the whole
|
||||
album — as a ZIP. Archives are streamed (each file spools briefly through a
|
||||
temp file for its checksum, then pipelines while the next one prefetches),
|
||||
@@ -150,8 +155,8 @@ Notes:
|
||||
- 10 wrong passwords lock a link for 15 minutes (fresh attempts after the
|
||||
window). A locked link shows in the album's share list with an Unlock
|
||||
button.
|
||||
- Deleting a link removes its ratings/tags; deleting photos or albums cleans
|
||||
up S3 objects via background jobs.
|
||||
- Deleting a link removes its votes/ratings/tags; deleting photos or albums
|
||||
cleans up S3 objects via background jobs.
|
||||
|
||||
## Known limitations / deliberate v1 cuts
|
||||
|
||||
|
||||
Reference in New Issue
Block a user