feat(downloads): per-card download affordance, retire Downloads page [BUNYIP-100 2/2] #146

Merged
vas2000-work merged 2 commits from feat/bunyip-100-unified-downloads into main 2026-06-14 06:32:59 +02:00
Owner

What

BUNYIP-100, PR 2 of 2. Stacked on #145 (application-groups): branched off that branch, so until #145 merges this PR's diff against main also includes #145's commits. Review/merge #145 first. Shared surface is the Applications page (#145 refactored it into app_card + grouping; this PR adds the Download affordance).

Folds downloads into the Applications page and retires the standalone public Downloads page.

Changes (this PR's delta)

  • Per-card Download affordance. One binary and nothing else -> a one-click link; otherwise a button opens a native <dialog> listing binary download links plus docker login / docker pull copy blocks for OCI images. Non-members get an upgrade prompt.
  • Data-driven dialog. A DownloadOption enum (DirectLink / CopyBlock) + download_options(group); adding a distribution channel later is one variant plus one render arm.
  • Downloads page retired. /downloads 308-redirects to /applications; nav entry removed. The /downloads/{slug}/{asset} proxy and GET /v1/downloads stay (card links route through the proxy).
  • Catalog-only products preserved in a "More downloads" section so retiring the page loses nothing.
  • Adds layers + package icons (the layers add also fixes the blank Groups nav icon from #145).

Verification

just check-container green: fmt, clippy -D warnings, 224 lib tests. Not exercised: live <dialog>/clipboard and the download proxy (need the running stack + browser).

#BUNYIP-100

## What BUNYIP-100, PR 2 of 2. **Stacked on #145** (application-groups): branched off that branch, so until #145 merges this PR's diff against main also includes #145's commits. Review/merge #145 first. Shared surface is the Applications page (#145 refactored it into `app_card` + grouping; this PR adds the Download affordance). Folds downloads into the Applications page and retires the standalone public Downloads page. ## Changes (this PR's delta) - **Per-card Download affordance.** One binary and nothing else -> a one-click link; otherwise a button opens a native `<dialog>` listing binary download links plus `docker login` / `docker pull` copy blocks for OCI images. Non-members get an upgrade prompt. - **Data-driven dialog.** A `DownloadOption` enum (`DirectLink` / `CopyBlock`) + `download_options(group)`; adding a distribution channel later is one variant plus one render arm. - **Downloads page retired.** `/downloads` 308-redirects to `/applications`; nav entry removed. The `/downloads/{slug}/{asset}` proxy and `GET /v1/downloads` stay (card links route through the proxy). - **Catalog-only products preserved** in a "More downloads" section so retiring the page loses nothing. - Adds `layers` + `package` icons (the `layers` add also fixes the blank Groups nav icon from #145). ## Verification `just check-container` green: fmt, clippy `-D warnings`, 224 lib tests. Not exercised: live `<dialog>`/clipboard and the download proxy (need the running stack + browser). #BUNYIP-100
feat(downloads): per-card download affordance, retire Downloads page
Some checks failed
Check / fmt / clippy / build / test (pull_request) Has been cancelled
f1a1d21015
BUNYIP-100 PR 2 of 2 (stacked on the application-groups PR). Folds downloads into the Applications page so there is no separate public Downloads page.

Each application card gains a Download affordance: with exactly one binary asset and nothing else it is a one-click link; otherwise a button opens a `<dialog>` listing every option (binary download links plus `docker login` / `docker pull` copy blocks for OCI images). Non-members see an upgrade prompt instead. The dialog is data-driven via a `DownloadOption` enum (DirectLink / CopyBlock) and `download_options`, so adding a distribution channel later is one variant plus one render arm.

The standalone `/downloads` page now 308-redirects to `/applications`, and its nav entry is removed. The `/downloads/{slug}/{asset}` BFF proxy and `GET /v1/downloads` stay: the card links route through the proxy. Catalog-only products (non-hosted, which only appeared on the Downloads page before) are surfaced in a "More downloads" section so retiring the page loses nothing.

Reuses the existing `command_block` + clipboard handler and `format_size`; adds `layers` and `package` icons to the icon set (`layers` also fixes the blank Groups nav icon from PR 1).

Verified: `just check-container` green (fmt, clippy -D warnings, 224 lib tests). Not exercised here: the live dialog/clipboard interaction and the download proxy, which need the running stack and a browser.

#BUNYIP-100

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into feat/bunyip-100-unified-downloads
All checks were successful
Create release / Create release from merged PR (pull_request) Has been skipped
Check / fmt / clippy / build / test (pull_request) Successful in 1m0s
4f68ac3506
vas2000-work deleted branch feat/bunyip-100-unified-downloads 2026-06-14 06:33:00 +02:00
Sign in to join this conversation.
No reviewers
No labels
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.

Dependencies

No dependencies set

Reference
psa-systems/bunyip!146
No description provided.