Library page: browse, upload, and delete Media #191

Closed
opened 2026-08-12 05:57:55 +00:00 by rosa · 0 comments
Owner

Parent

Implementation spec: Media management: Library page and editor picker — implementation spec (§2.1–2.3, §3).

What to build

A signed-in user opens "Media" from the nav (or the dashboard's main actions) and lands on their Library: a newest-first grid of square tiles showing everything they've uploaded, an always-present single-file upload at the top, and warn-and-allow deletion through the app's standard confirm-page convention. Strictly per-user; the whole set on one page.

Acceptance criteria

  • The Library page renders behind session auth. Ready tiles lazy-load the full rendition (no thumbnail pipeline) and link to the Media's capability URL, labelled by filename falling back to upload date, with dimensions, content type, and date in a tooltip. Processing and Failed tiles render a placeholder plus a status badge. There is no per-Media detail page.
  • Empty state: "No media yet — images you upload appear here" above the upload form.
  • Uploading a file (under the standard media body limit) creates the Media with its captured filename, flashes "Upload received — processing", and redirects back to the Library where it appears as a Processing tile. A rejected file (size/format gate) redirects back with an error-level flash, not an error page.
  • Ready and Failed tiles carry a Delete link; Processing tiles are display-only. Failed Media are deletable, never retryable — re-uploading is the retry.
  • The confirm page shows the Media's metadata (label, status, dimensions and type when Ready, upload date) and every referencing Post — linked, labelled by title falling back to slug, with Draft/Published status — or states that none reference it. Confirming deletes, detaches, and redirects with a flash; missing or foreign ids 404.
  • The nav gains a "Media" entry and the dashboard's main actions link to the Library. The unauthenticated per-Media capability route is untouched.
  • CONTEXT.md's Library entry gains the one-line warn-and-allow deletion note (deleting detaches referencing Posts' Photos after a confirm page; references never block).
  • mise run format, mise run ci, and mise run clippy pass.

Blocked by

  • #189 — Media captures its upload filename as a display label (tile labels are filename-or-date).
  • #190 — Domain ops: list, resolve, reference, and delete Media (the grid, confirm listing, and delete).
## Parent Implementation spec: [Media management: Library page and editor picker — implementation spec](https://code.cosmicrose.dev/rosa/vernier/issues/188) (§2.1–2.3, §3). ## What to build A signed-in user opens "Media" from the nav (or the dashboard's main actions) and lands on their Library: a newest-first grid of square tiles showing everything they've uploaded, an always-present single-file upload at the top, and warn-and-allow deletion through the app's standard confirm-page convention. Strictly per-user; the whole set on one page. ## Acceptance criteria - [ ] The Library page renders behind session auth. Ready tiles lazy-load the full rendition (no thumbnail pipeline) and link to the Media's capability URL, labelled by filename falling back to upload date, with dimensions, content type, and date in a tooltip. Processing and Failed tiles render a placeholder plus a status badge. There is no per-Media detail page. - [ ] Empty state: "No media yet — images you upload appear here" above the upload form. - [ ] Uploading a file (under the standard media body limit) creates the Media with its captured filename, flashes "Upload received — processing", and redirects back to the Library where it appears as a Processing tile. A rejected file (size/format gate) redirects back with an error-level flash, not an error page. - [ ] Ready and Failed tiles carry a Delete link; Processing tiles are display-only. Failed Media are deletable, never retryable — re-uploading is the retry. - [ ] The confirm page shows the Media's metadata (label, status, dimensions and type when Ready, upload date) and every referencing Post — linked, labelled by title falling back to slug, with Draft/Published status — or states that none reference it. Confirming deletes, detaches, and redirects with a flash; missing or foreign ids 404. - [ ] The nav gains a "Media" entry and the dashboard's main actions link to the Library. The unauthenticated per-Media capability route is untouched. - [ ] CONTEXT.md's Library entry gains the one-line warn-and-allow deletion note (deleting detaches referencing Posts' Photos after a confirm page; references never block). - [ ] `mise run format`, `mise run ci`, and `mise run clippy` pass. ## Blocked by - #189 — Media captures its upload filename as a display label (tile labels are filename-or-date). - #190 — Domain ops: list, resolve, reference, and delete Media (the grid, confirm listing, and delete).
rosa added this to the v0.1 milestone 2026-08-12 18:03:57 +00:00
rosa closed this issue 2026-08-12 22:21:17 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
rosa/vernier#191
No description provided.