fix(website): improve mobile browsing and launcher downloads #611

Open
bibiburl wants to merge 5 commits from bibiburl/Longshot:docs/frontend-review-wip into main
Member

Type: fix · Risk: low · Tested on: Linux, Chromium 153, website and game-free tests · Needs: renewed review; existing publication blockers resolved before deployment

Why

Players need usable launcher downloads when version metadata cannot be reached, clear channel choices, and accessible guide navigation. This also repairs the integration problems identified in Jordan’s review.

How to reproduce

Seen on: Linux, Chromium 153; previous PR head 02f0299c.
Settings and switches: website defaults; static preview or a failed version-metadata request.
Steps: block /download/launcher/versions.json or use static preview; inspect an unavailable Worker download route; tab through a wide guide table.
Expected: channel routes remain selectable, error metadata describes the error, and only overflowing surfaces create extra keyboard stops.
Actual: the channel picker stays hidden; Worker error metadata still advertises the successful download page; non-scrolling tables/code create extra keyboard stops.

What changed

Replayed only the focused website changes on main aa95d35f, which already contains squashed #264. Main’s corrected Linux backup path and single settings screenshot are preserved. The graphics text-field parser and its tests are unchanged from main: there is no competing implementation or duplicate test.

  • Show all channel choices immediately; use their working redirect routes during pending/failed metadata requests. A valid response pins files to the displayed version, reports availability for every channel and preserves disabled-link semantics. Use “Release candidate” consistently.
  • Worker error pages remove the successful canonical/social metadata, publish the error title and use noindex. The static download page contains useful player instructions, not Worker implementation text.
  • Keep one sidebar navigation landmark. Name scrollable tables/code, and update keyboard stops when their width changes. Preserve native table headers and a no-JavaScript fallback; the publication checker no longer requires every raw table to be focusable.
  • Render progress filters once per change, preserve reset behavior, and start the disclosure closed so mobile users do not see it flash open.
  • Keep responsive icons, platform/file details and the shared download shell. The original hero and header are untouched: Get started and Contribute remain. A separate panel below the hero preserves Download launcher, compatibility, current launcher status and “Bring your own copy of the game.”

The download panel composes with Jordan’s replacement hero #768. This supersedes the earlier plan to change the hero in this PR; #634 is no longer a prerequisite. #638 and #709 are independently reviewable.

Screenshots

After: this PR @ 60a1df54, Install at 1440 px, light, through local Wrangler with live launcher metadata.

Current installation page

Before, mobile, and preserved download/ownership panel

Before: main @ aa95d35f, Install at the same 1440 px light viewport.

Install before

After: this PR @ 60a1df54, Install at 390 px, light.

Install mobile

After: this PR @ 60a1df54, home at 1440 px, light. The existing main hero is unchanged; the new callout follows it.

Home and download callout

Integration with #638, #709 and Jordan’s #768 hero (local only)

Combined integration, desktop light

Browser checks: live local Worker /download returns 200, RC Linux download returns a 302 to the named launcher, unavailable Stable and unknown routes return 404 with noindex and no successful-page canonical. Static-preview failure still permits all three channel choices. Install accessibility audits at 1440 and 390 report 0 violations, 0 incomplete. The corrected Linux backup path is visible, mobile tables scroll with named keyboard access, and wide surfaces lose extra tab stops.

Measurements

Verdict: metadata failures no longer hide channel choices; error-page metadata and keyboard behavior have regression coverage. This changes no game runtime or performance.

Hardware: Linux x86_64, Chromium 153 and the pinned Node/npm environment; no GPU or gameplay benchmark.
Scene: built website on loopback, desktop 1440 px and mobile 390 px, light and dark themes.
Method: functional test counts on the named untouched baseline and PR branch; one live release-collection observation where listed, not an interleaved performance measurement.
How to reproduce: in website/, run npm ci, npm run build, npm run check and node --test tests/*.test.ts; at the repository root run python -I -B tests/run_all.py. Use local Astro preview for static behavior and Wrangler for download routes.

Check Before: main @ aa95d35f After: this PR @ 60a1df54
Website tests 75 pass, 1 existing failure 92 pass, same 1 failure
Game-free suite 509 pass, 14 fail, 70 skip 509 pass, same 14 fail, 70 skip
Static site build 16 pages 17 pages, including the shared download shell

Flags and settings

None. No game, launcher or deployment setting changes.

Testing

Tested: pinned npm ci; site build; focused download/metadata/keyboard regressions; full website tests; publication check; complete game-free suite; git diff --check. Browser evidence is recorded with the screenshots below. A temporary local combination of #611, #638, #709 and #768 merges without conflict.

The website failure is the existing graphics-settings.test.ts “HDR Native condition accepts current prose but remains required” assertion, reproduced on untouched main. Publication checks still reject existing branded progress-feed titles (issues #603, #615 and #715, depending on the collection snapshot); no new route, asset or anchor failure. The same 14 failing files reproduce on untouched main aa95d35f: tests/test_appimage_player_build.py, tests/test_bake_portability.py, tests/test_cpm_discovery.py, tests/test_crash_dialog.py, tests/test_env_on.py, tests/test_lift_cleanup_error.py, tests/test_linux_preflight.py, tests/test_make_game_cache.py, tests/test_mods_size_table.py, tests/test_options_budget_once.py, tests/test_pipeline_tour.py, tests/test_readback_late.py, tests/test_vk_pgo.py, tests/test_walk_key.py. No new failing files.

Combined integration: #611 + #638 + #709 + #768 merges cleanly, builds 18 pages and runs 125 website tests successfully with the same existing HDR-condition failure. Sixteen checks (home, Install, Transfer a save and Launcher × desktop/mobile × light/dark) have no horizontal overflow. A separate #768 mobile-light tagline contrast finding remains: #ffe100 on #146cea, 20 px normal text, 3.67:1, below 4.5:1. This PR does not modify that hero; resolve it in the hero review before deployment.

Not tested: game/launcher execution, Firefox/Safari, real Windows/Steam Deck, Cloudflare production deployment. No game was built or launched. Browser checks use the actual built site; live download behavior uses local Wrangler.

Must be tested:

  • Cloudflare production, by hand after approved rollout: open Install and Download, select each available channel, and exercise an unavailable route, expecting version/file links to agree and the shared error page to retain its error status. Resolve the existing publication blockers before any deployment.

Risks

Metadata may fail or change; channel routes remain usable and downloaded-file links are pinned once metadata succeeds. Width-sensitive focus stops depend on browser layout; no-JavaScript content remains reachable. Revert this website change to disable it.

Compatibility: no save paths are relocated, no launcher/game behavior or renderer ABI changes, no new dependency. Existing artwork and guide screenshots remain unchanged. The new callout leaves #768’s hero/header design intact.

Issues

See #264, #634, #638, #709, #768 and the linked review above. Existing website publication cleanup is tracked separately in #731.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: trailers.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Before/after screenshots attached with named commits and viewport/theme information.
  • Docs updated.
**Type:** fix · **Risk:** low · **Tested on:** Linux, Chromium 153, website and game-free tests · **Needs:** renewed review; existing publication blockers resolved before deployment ## Why Players need usable launcher downloads when version metadata cannot be reached, clear channel choices, and accessible guide navigation. This also repairs the integration problems identified in [Jordan’s review](https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/611#issuecomment-24093). ## How to reproduce **Seen on:** Linux, Chromium 153; previous PR head `02f0299c`. **Settings and switches:** website defaults; static preview or a failed version-metadata request. **Steps:** block `/download/launcher/versions.json` or use static preview; inspect an unavailable Worker download route; tab through a wide guide table. **Expected:** channel routes remain selectable, error metadata describes the error, and only overflowing surfaces create extra keyboard stops. **Actual:** the channel picker stays hidden; Worker error metadata still advertises the successful download page; non-scrolling tables/code create extra keyboard stops. ## What changed Replayed only the focused website changes on main `aa95d35f`, which already contains squashed #264. Main’s corrected Linux backup path and single settings screenshot are preserved. The graphics text-field parser and its tests are unchanged from main: there is no competing implementation or duplicate test. - Show all channel choices immediately; use their working redirect routes during pending/failed metadata requests. A valid response pins files to the displayed version, reports availability for every channel and preserves disabled-link semantics. Use “Release candidate” consistently. - Worker error pages remove the successful canonical/social metadata, publish the error title and use `noindex`. The static download page contains useful player instructions, not Worker implementation text. - Keep one sidebar navigation landmark. Name scrollable tables/code, and update keyboard stops when their width changes. Preserve native table headers and a no-JavaScript fallback; the publication checker no longer requires every raw table to be focusable. - Render progress filters once per change, preserve reset behavior, and start the disclosure closed so mobile users do not see it flash open. - Keep responsive icons, platform/file details and the shared download shell. The original hero and header are untouched: Get started and Contribute remain. A separate panel below the hero preserves Download launcher, compatibility, current launcher status and **“Bring your own copy of the game.”** The download panel composes with Jordan’s replacement hero #768. This supersedes the earlier plan to change the hero in this PR; #634 is no longer a prerequisite. #638 and #709 are independently reviewable. ## Screenshots After: this PR @ `60a1df54`, Install at 1440 px, light, through local Wrangler with live launcher metadata. ![Current installation page](https://git.magicbean.dev/attachments/3682299b-a44a-4d25-be2a-8626d8d9f745) <details><summary>Before, mobile, and preserved download/ownership panel</summary> Before: main @ `aa95d35f`, Install at the same 1440 px light viewport. ![Install before](https://git.magicbean.dev/attachments/4367f233-dfdf-4c5a-aaea-9db811c0b4a4) After: this PR @ `60a1df54`, Install at 390 px, light. ![Install mobile](https://git.magicbean.dev/attachments/e3c1c67b-75d9-4d67-bc35-6fa482f681c3) After: this PR @ `60a1df54`, home at 1440 px, light. The existing main hero is unchanged; the new callout follows it. ![Home and download callout](https://git.magicbean.dev/attachments/7f0e6f89-a8ab-486e-98e6-220563242259) </details> <details><summary>Integration with #638, #709 and Jordan’s #768 hero (local only)</summary> ![Combined integration, desktop light](https://git.magicbean.dev/attachments/831eadcb-c1b5-4098-9ee6-770c96456496) </details> Browser checks: live local Worker `/download` returns 200, RC Linux download returns a 302 to the named launcher, unavailable Stable and unknown routes return 404 with `noindex` and no successful-page canonical. Static-preview failure still permits all three channel choices. Install accessibility audits at 1440 and 390 report **0 violations, 0 incomplete**. The corrected Linux backup path is visible, mobile tables scroll with named keyboard access, and wide surfaces lose extra tab stops. ## Measurements **Verdict:** metadata failures no longer hide channel choices; error-page metadata and keyboard behavior have regression coverage. This changes no game runtime or performance. Hardware: Linux x86_64, Chromium 153 and the pinned Node/npm environment; no GPU or gameplay benchmark. Scene: built website on loopback, desktop 1440 px and mobile 390 px, light and dark themes. Method: functional test counts on the named untouched baseline and PR branch; one live release-collection observation where listed, not an interleaved performance measurement. How to reproduce: in website/, run npm ci, npm run build, npm run check and node --test tests/*.test.ts; at the repository root run python -I -B tests/run_all.py. Use local Astro preview for static behavior and Wrangler for download routes. | Check | Before: main @ aa95d35f | After: this PR @ 60a1df54 | |---|---|---| | Website tests | 75 pass, 1 existing failure | 92 pass, same 1 failure | | Game-free suite | 509 pass, 14 fail, 70 skip | 509 pass, same 14 fail, 70 skip | | Static site build | 16 pages | 17 pages, including the shared download shell | ### Flags and settings None. No game, launcher or deployment setting changes. ## Testing **Tested:** pinned `npm ci`; site build; focused download/metadata/keyboard regressions; full website tests; publication check; complete game-free suite; `git diff --check`. Browser evidence is recorded with the screenshots below. A temporary local combination of #611, #638, #709 and #768 merges without conflict. The website failure is the existing `graphics-settings.test.ts` “HDR Native condition accepts current prose but remains required” assertion, reproduced on untouched main. Publication checks still reject existing branded progress-feed titles (issues #603, #615 and #715, depending on the collection snapshot); no new route, asset or anchor failure. The same 14 failing files reproduce on untouched main `aa95d35f`: `tests/test_appimage_player_build.py`, `tests/test_bake_portability.py`, `tests/test_cpm_discovery.py`, `tests/test_crash_dialog.py`, `tests/test_env_on.py`, `tests/test_lift_cleanup_error.py`, `tests/test_linux_preflight.py`, `tests/test_make_game_cache.py`, `tests/test_mods_size_table.py`, `tests/test_options_budget_once.py`, `tests/test_pipeline_tour.py`, `tests/test_readback_late.py`, `tests/test_vk_pgo.py`, `tests/test_walk_key.py`. No new failing files. **Combined integration:** #611 + #638 + #709 + #768 merges cleanly, builds 18 pages and runs 125 website tests successfully with the same existing HDR-condition failure. Sixteen checks (home, Install, Transfer a save and Launcher × desktop/mobile × light/dark) have no horizontal overflow. A separate #768 mobile-light tagline contrast finding remains: `#ffe100` on `#146cea`, 20 px normal text, **3.67:1**, below 4.5:1. This PR does not modify that hero; resolve it in the hero review before deployment. **Not tested:** game/launcher execution, Firefox/Safari, real Windows/Steam Deck, Cloudflare production deployment. No game was built or launched. Browser checks use the actual built site; live download behavior uses local Wrangler. **Must be tested:** - Cloudflare production, by hand after approved rollout: open Install and Download, select each available channel, and exercise an unavailable route, expecting version/file links to agree and the shared error page to retain its error status. Resolve the existing publication blockers before any deployment. ## Risks Metadata may fail or change; channel routes remain usable and downloaded-file links are pinned once metadata succeeds. Width-sensitive focus stops depend on browser layout; no-JavaScript content remains reachable. Revert this website change to disable it. **Compatibility:** no save paths are relocated, no launcher/game behavior or renderer ABI changes, no new dependency. Existing artwork and guide screenshots remain unchanged. The new callout leaves #768’s hero/header design intact. ## Issues See #264, #634, #638, #709, #768 and the linked review above. Existing website publication cleanup is tracked separately in #731. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` trailers. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Before/after screenshots attached with named commits and viewport/theme information. - [x] Docs updated.
Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Render maintained menu code with bundled fonts and deterministic UI-only state; record capture and reviewed sources separately. Share the image with the settings guide and validate site paths containing spaces.

Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Assisted-by: Codex (OpenAI)
Add real-view captures for Manage saves, game file selection and import confirmation with isolated synthetic state. Keep capture dependencies and source review in the screenshot manifest, and verify image links and transfer-step placement.

Assisted-by: Codex (OpenAI)
Stage and fingerprint the Launcher statistics opt-out and explicit NuGet configuration. Recapture neutral example paths, guard fixture ownership, document contributor review, restore Frizti, and retain main's complete HDR wording. Review the settings image against rebased menu sources.

Assisted-by: Codex (OpenAI)
docs(settings): refresh the development menu example
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 6s
CI / Workflow lint (actionlint) (pull_request) Successful in 9s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 8s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 4s
f035bbd54f
Recapture the real menu after main changed the output-resolution label to reduced. Record current capture provenance and label the guide image as an illustrative development build.

Assisted-by: Codex (OpenAI)
docs(guides): simplify instructions and align save transfers
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 8s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 11s
Third-party parts / As their notes say (pull_request) Successful in 14s
PR description / Description follows the template (pull_request_target) Successful in 4s
Website / Website on Cloudflare (pull_request_target) Successful in 1m11s
d7c62a39d4
Shorten launcher guide copy, make screenshots the full-size links, and align transfer steps and captions with the article. Repair the stale Audio output restart test without weakening its assertion.

Assisted-by: Codex (OpenAI)
docs(guides): review screenshots against current main and simplify mobile navigation
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 5s
Third-party parts / As their notes say (pull_request) Successful in 6s
PR description / Description follows the template (pull_request_target) Successful in 3s
Website / Website on Cloudflare (pull_request_target) Successful in 1m55s
b905befe78
Integrate main cf605c85 and record why all nine changed menu dependencies leave the retained Graphics capture accurate. Preserve capture provenance. Keep one mobile hamburger per page and remove the duplicate Menu row.

Assisted-by: Codex (OpenAI)
fix(website): unify mobile hamburger styling
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 6s
Third-party parts / As their notes say (pull_request) Successful in 10s
PR description / Description follows the template (pull_request_target) Successful in 3s
Website / Website on Cloudflare (pull_request_target) Has been skipped
31a18758e3
Use Starlight icons and shared button styles for home and guide navigation, including light/dark and expanded states.

Assisted-by: Codex (OpenAI)
docs(install): restore Linux launcher permission step
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 6s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 6s
beanstalk/approval awaiting maintainer approval
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Failing after 5s
b792d80516
Restore the AppImage executable-permission instruction before Build and link the platform setup guides.

Assisted-by: OpenAI Codex
docs(guides): refresh captures from current menu and launcher
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 9s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 11s
Third-party parts / As their notes say (pull_request) Successful in 15s
PR description / Description follows the template (pull_request_target) Failing after 7s
beanstalk/approval Test farm not requested
e4627be1ee
Integrate main b2911d33, regenerate seven UI-only screenshots, record capture provenance and refresh version-specific guidance. Support registered menu text fields in the website catalogue and neutralize the new item name reported in issue 584.

Assisted-by: OpenAI Codex
Integrate main e9bed614. Record the Graphics source review and new threaded-rendering dependency while retaining original capture provenance. Update the restart-list regression and distinguish installed and portable Windows backup locations.

Assisted-by: GPT-6 Astra

Co-Authored-By: GPT-6 Astra <[email protected]>
docs(guides): integrate final main snapshot for review
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 10s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 12s
Third-party parts / As their notes say (pull_request) Successful in 14s
PR description / Description follows the template (pull_request_target) Successful in 6s
a0a93f11fe
Integrate main 2b1d38c6 and record that all 59 menu inputs and the capture helpers still match the reviewed sources. Keep original image provenance unchanged.

Assisted-by: GPT-6 Astra

Co-Authored-By: GPT-6 Astra <[email protected]>
Add responsive artwork, clearer release metadata and a shared download shell. Keep publication and source guards intact.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Merge bibiburl/docs/guide-screenshots at a0a93f11, preserving its seven original UI images, provenance, source guards, save instructions and matching navigation controls.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
fix(website): refresh progress filters after native reset
All checks were successful
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 12s
CI / Workflow lint (actionlint) (pull_request) Successful in 18s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 20s
Third-party parts / As their notes say (pull_request) Successful in 29s
PR description / Description follows the template (pull_request_target) Successful in 15s
Website / Website on Cloudflare (pull_request_target) Has been skipped
18e1efcd1a
Handle change-only selection events and defer reset rendering until the browser has restored the form values.

Assisted-by: OpenAI Codex

Co-Authored-By: OpenAI Codex <[email protected]>
Author
Member

Review evidence for 18e1efcd. The full frontend changes and #264 at a0a93f11 are included; #264 remains open. Kept WIP as requested by the author.

Built and checked locally: 16 pages, 871 local links/assets/anchors, 91 website tests. Combined full game-free run: 500 passed / 13 failed / 69 skipped; all 13 failures also occur on unchanged main 6c9edffe and are named in the description. Screenshot integrity plus all recorded source/fixture checks pass using exact Launcher b1d9f7a9. No game, fresh capture, real save transfer or production deployment.

These screenshots are Chromium views, not real-device or cross-browser certification. Deployed baseline screenshots were taken on 2026-11-14; the deployment commit is unknown. PR screenshots are the combined branch. The progress-only final commit does not change the pictured home/guide styling.

Homepage — deployed baseline and combined PR

Before: deployed site, 2026-11-14, desktop light
After: PR 18e1efcd, desktop light
After: PR 18e1efcd, desktop dark

Mobile search — deployed baseline and combined PR

Before: deployed site, 390px, oversized search input
After: PR 18e1efcd, 390px, compact search input

Combined guides and download experience

Your #264 screenshots, example captions, Linux executable-permission step and save/backup guidance are preserved.

Install at 390px, including the preserved guide screenshots and live launcher version
Settings example from PR 264, dark theme at 390px
Save-transfer guide at 390px, preserving steps and backup paths
Progress at 390px with collapsed filter summary and results
Shared download shell at 390px

A local Worker preview is running on the author's machine at http://127.0.0.1:4327/. It is not remotely accessible. A hosted preview has not been published: .forgejo/workflows/website.yml requires a maintainer to read the exact fork commit and add preview. That gate has not been bypassed.

Review evidence for **18e1efcd**. The full frontend changes and **#264 at a0a93f11** are included; #264 remains open. Kept WIP as requested by the author. Built and checked locally: 16 pages, 871 local links/assets/anchors, 91 website tests. Combined full game-free run: 500 passed / 13 failed / 69 skipped; all 13 failures also occur on unchanged main 6c9edffe and are named in the description. Screenshot integrity plus all recorded source/fixture checks pass using exact Launcher b1d9f7a9. No game, fresh capture, real save transfer or production deployment. These screenshots are Chromium views, not real-device or cross-browser certification. Deployed baseline screenshots were taken on 2026-11-14; the deployment commit is unknown. PR screenshots are the combined branch. The progress-only final commit does not change the pictured home/guide styling. ### Homepage — deployed baseline and combined PR ![Before: deployed site, 2026-11-14, desktop light](https://git.magicbean.dev/attachments/cd95b1c3-4825-4733-9002-384d8ae8c076) ![After: PR 18e1efcd, desktop light](https://git.magicbean.dev/attachments/69306d98-706a-441f-9db9-56346f92080d) ![After: PR 18e1efcd, desktop dark](https://git.magicbean.dev/attachments/d904a44e-dce1-411e-b7ac-bbf2cc07a888) ### Mobile search — deployed baseline and combined PR ![Before: deployed site, 390px, oversized search input](https://git.magicbean.dev/attachments/f0616f17-06db-4045-8f71-d6f0922ba7fb) ![After: PR 18e1efcd, 390px, compact search input](https://git.magicbean.dev/attachments/bea42975-f9f6-4f53-a65d-5551d6a533b0) ### Combined guides and download experience Your #264 screenshots, example captions, Linux executable-permission step and save/backup guidance are preserved. ![Install at 390px, including the preserved guide screenshots and live launcher version](https://git.magicbean.dev/attachments/2a0b076f-477d-47d0-b098-964e42c8101f) ![Settings example from PR 264, dark theme at 390px](https://git.magicbean.dev/attachments/af0c315e-56cf-4b4f-b273-d77102f82ede) ![Save-transfer guide at 390px, preserving steps and backup paths](https://git.magicbean.dev/attachments/c829bb2d-8eb3-4b7c-be44-92de38a01cd9) ![Progress at 390px with collapsed filter summary and results](https://git.magicbean.dev/attachments/23aafa3a-61cf-4f2a-a9e4-630a695d5062) ![Shared download shell at 390px](https://git.magicbean.dev/attachments/136bf5bc-9e3c-4b4b-a30b-19c87e43f9cf) A local Worker preview is running on the author's machine at http://127.0.0.1:4327/. It is not remotely accessible. A hosted preview has not been published: `.forgejo/workflows/website.yml` requires a maintainer to read the exact fork commit and add `preview`. That gate has not been bypassed.
Author
Member

Final browser checks confirm site search results, the responsive fairy-image swap, reduced motion, channel switching, and metadata-failure fallback. The description now links the screenshots and precisely records the axe results: home/install/progress/download have no reported violations; settings and save-transfer each retain an empty table-header and scrollable-table keyboard-access finding. These guide-table items are explicit WIP follow-ups, not claimed passing. PR #264 remains fully included and unchanged in its original images/provenance. No code changed after 18e1efcd.

Final browser checks confirm site search results, the responsive fairy-image swap, reduced motion, channel switching, and metadata-failure fallback. The description now links the screenshots and precisely records the axe results: home/install/progress/download have no reported violations; settings and save-transfer each retain an empty table-header and scrollable-table keyboard-access finding. These guide-table items are explicit WIP follow-ups, not claimed passing. PR #264 remains fully included and unchanged in its original images/provenance. No code changed after 18e1efcd.
Author
Member

Clarified that the remaining guide-table keyboard/axe recheck is on Linux Chromium at 390px; Firefox/Safari and real-device checks remain separate. Description validation passes; WIP status is retained as requested.

Clarified that the remaining guide-table keyboard/axe recheck is on Linux Chromium at 390px; Firefox/Safari and real-device checks remain separate. Description validation passes; WIP status is retained as requested.
fix(website): make guide tables and code keyboard accessible
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 9s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 9s
Third-party parts / As their notes say (pull_request) Successful in 10s
PR description / Description follows the template (pull_request_target) Failing after 16s
02f0299c73
Name the guide table columns and keep horizontal scroll surfaces keyboard reachable without client JavaScript. Preserve table semantics and show focus clearly.

Assisted-by: Codex (OpenAI)
Author
Member

Prepared 02f0299c for review with guide table/code keyboard fixes and 92 passing website tests. Do not approve #611 before #264 is approved; merge #264 first and reconcile its final result here. Added the formal dependency and status/blocked label. The clean build generates 16 pages, but live Forgejo feed timeouts currently prevent a passing publication check; this remains explicitly required before merge. The three new hero concepts are separate and are not part of this PR.

Prepared 02f0299c for review with guide table/code keyboard fixes and 92 passing website tests. Do not approve #611 before #264 is approved; merge #264 first and reconcile its final result here. Added the formal dependency and status/blocked label. The clean build generates 16 pages, but live Forgejo feed timeouts currently prevent a passing publication check; this remains explicitly required before merge. The three new hero concepts are separate and are not part of this PR.
bibiburl changed title from WIP: fix(website): improve mobile browsing and launcher downloads to fix(website): improve mobile browsing and launcher downloads 2026-11-15 00:22:48 +00:00
Author
Member

Review-preparation update at 02f0299c.

Do not approve #611 before #264 is approved. Review feedback is welcome now, as requested by the author. #611 now formally depends on #264 and carries status/blocked. Merge #264 first, then reconcile its final merged result here before merging #611. A dependency is not an approval lock; if #264 closes without merging, the approval/merge hold still applies. No approval or merge was performed.

Fixed the previously recorded guide accessibility findings: meaningful first-column headers, keyboard-focusable tables and code blocks, and visible focus rings. The code-highlighter fallback is applied after its transformation, and the built-site check verifies the final markup. Both settings and save transfer report zero axe violations at 390px in light and dark mode; automated contrast checks still include manual-review items. ArrowRight scrolls the table and long command by 40px while retaining focus. The guides fit 320, 390 and 1120px without page overflow.

All seven #264 PNGs and capture provenance remain unchanged; its current a0a93f11 head is still an ancestor. The three proposed replacement heroes are separate concepts and are not included in this PR.

Settings table with named Input column and visible keyboard focus, 390px, dark theme
Save-location table with named Installation column and visible keyboard focus, 390px, dark theme

Review-preparation update at **02f0299c**. **Do not approve #611 before #264 is approved.** Review feedback is welcome now, as requested by the author. #611 now formally depends on #264 and carries `status/blocked`. Merge #264 first, then reconcile its final merged result here before merging #611. A dependency is not an approval lock; if #264 closes without merging, the approval/merge hold still applies. No approval or merge was performed. Fixed the previously recorded guide accessibility findings: meaningful first-column headers, keyboard-focusable tables and code blocks, and visible focus rings. The code-highlighter fallback is applied after its transformation, and the built-site check verifies the final markup. Both settings and save transfer report zero axe violations at 390px in light and dark mode; automated contrast checks still include manual-review items. ArrowRight scrolls the table and long command by 40px while retaining focus. The guides fit 320, 390 and 1120px without page overflow. All seven #264 PNGs and capture provenance remain unchanged; its current a0a93f11 head is still an ancestor. The three proposed replacement heroes are separate concepts and are not included in this PR. ![Settings table with named Input column and visible keyboard focus, 390px, dark theme](https://git.magicbean.dev/attachments/7fd1bb48-8057-448e-ab7a-5740aabb7867) ![Save-location table with named Installation column and visible keyboard focus, 390px, dark theme](https://git.magicbean.dev/attachments/85649ffa-01f5-488f-8e27-6cf1852fd917)
First-time contributor

my report was included in this #603, I'm completely new, did I do something wrong?

my report was included in this #603, I'm completely new, did I do something wrong?
Author
Member

Marked ready for review at the author’s explicit request (#611 was already non-WIP). #264 is merged; the remaining approval/merge order stays #611 → #634 → #638. The description records the current merge conflicts and outstanding validation; unchecked work remains unchecked. Dependencies and blocked labels are preserved. No code, approval, merge or deployment was performed.

Marked ready for review at the author’s explicit request (#611 was already non-WIP). #264 is merged; the remaining approval/merge order stays #611 → #634 → #638. The description records the current merge conflicts and outstanding validation; unchecked work remains unchecked. Dependencies and blocked labels are preserved. No code, approval, merge or deployment was performed.
madebyjordan requested changes 2026-11-15 11:01:46 +00:00
Dismissed
madebyjordan left a comment

Reviewed at 02f0299c. The Worker's download routes, 302s and caching hold up: I ran its fetch against the built shell with mocked releases, and /download, a channel's file, a missing channel and an unknown path all answer as they should. The website tests pass. Changes needed before merge, most of them from the merge with main:

Blocking

  1. Rebase rather than merge main in. Main has #264 squashed; this branch merged #264's head (a0a93f11), so a merge conflicts in seven files, and two of them are traps. Replaying only #611's own four commits (00a62f06, 93f3c0e0, 18e1efcd, 02f0299c) onto main avoids both:
    • docs/saves.md: the PR's side of the Linux backups row is the old one. Taking it drops main's ~/.local/share/longshot/save-backup/ correction (LongshotLauncher#80); only the new "Installation" column header should come over.
    • docs/graphics-and-controls.md: the PR's side re-adds the settings screenshot block that main already has just below, so taking it shows the picture twice.
  2. website/src/repo-docs/graphics-settings.ts has two implementations of the text-field handling. This PR's adds !row.heading and loosens /Applies after (?:a )?restart\./ (it drops the \.); main has #264's. One has to be chosen, and tests/graphics-settings.test.ts (around lines 31 and 245) ends up with near-duplicate tests from both.
  3. The channel picker never shows when versions.json fails (launcher-channel.ts ~83, 99, 102: root.hidden = false only runs after validation passes). A timeout, a non-200, or one bad field (one channel's release url outside /MagicBeanDev/LongshotLauncher/releases/) hides Release candidate and Nightly entirely, and under astro dev or a static preview it never appears. Main always showed it with JavaScript. Downloads still fall back to the best channel, but the choice should stay visible.

Should fix

  1. The Worker's 404 pages ("No such download", "No stable launcher yet", worker/index.ts ~357–376) keep the static page's rel="canonical" (/download/) and og:title; only <title> and the <h1> are rewritten, so link previews are wrong.
  2. The static /download/ page is in the search index (data-pagefind-body), so site search shows its developer fallback ("Live versions and file sizes are available when this site is served with its download Worker").
  3. Accessibility:
    • Sidebar.astro:4 nests a <nav aria-label="Site navigation"> inside Starlight's sidebar <nav>.
    • launcher-channel.ts:58 disables a download by removing href and adding aria-disabled to what is then a non-interactive <a>.
    • keyboard-scroll.ts gives every table and <pre> tabindex=0 whether or not it scrolls, with no accessible name, so there are extra unlabelled tab stops on wide screens. check-site.ts then fails any future component's raw table without one.
  4. Wording and smaller points:
    • The hero's Contribute button becomes Download launcher, which the description doesn't mention.
    • The rc channel is "Preview launcher" in launcher-channel.ts:122; the rest of the site says "Release candidate".
    • Only Stable has the <small> "unavailable" text (:95).
    • progress-board.ts:40–41 renders twice per select change (input and change).
    • The mobile filters render open and then collapse.

Note: #768 replaces the front page hero with Jordan's design, which has been agreed with you. This PR's LongshotHero.astro and Header.astro changes will need redoing on top of it; the hero's download link and compatibility line can move there.

Review drafted with Claude Code and checked by Jordan.

Reviewed at 02f0299c. The Worker's download routes, 302s and caching hold up: I ran its `fetch` against the built shell with mocked releases, and `/download`, a channel's file, a missing channel and an unknown path all answer as they should. The website tests pass. Changes needed before merge, most of them from the merge with main: **Blocking** 1. **Rebase rather than merge main in.** Main has #264 squashed; this branch merged #264's head (a0a93f11), so a merge conflicts in seven files, and two of them are traps. Replaying only #611's own four commits (00a62f06, 93f3c0e0, 18e1efcd, 02f0299c) onto main avoids both: - `docs/saves.md`: the PR's side of the Linux backups row is the old one. Taking it drops main's `~/.local/share/longshot/save-backup/` correction (LongshotLauncher#80); only the new "Installation" column header should come over. - `docs/graphics-and-controls.md`: the PR's side re-adds the settings screenshot block that main already has just below, so taking it shows the picture twice. 2. **`website/src/repo-docs/graphics-settings.ts` has two implementations of the text-field handling.** This PR's adds `!row.heading` and loosens `/Applies after (?:a )?restart\./` (it drops the `\.`); main has #264's. One has to be chosen, and `tests/graphics-settings.test.ts` (around lines 31 and 245) ends up with near-duplicate tests from both. 3. **The channel picker never shows when `versions.json` fails** (`launcher-channel.ts` ~83, 99, 102: `root.hidden = false` only runs after validation passes). A timeout, a non-200, or one bad field (one channel's release `url` outside `/MagicBeanDev/LongshotLauncher/releases/`) hides Release candidate and Nightly entirely, and under `astro dev` or a static preview it never appears. Main always showed it with JavaScript. Downloads still fall back to the best channel, but the choice should stay visible. **Should fix** 4. The Worker's 404 pages ("No such download", "No stable launcher yet", `worker/index.ts` ~357–376) keep the static page's `rel="canonical"` (`/download/`) and `og:title`; only `<title>` and the `<h1>` are rewritten, so link previews are wrong. 5. The static `/download/` page is in the search index (`data-pagefind-body`), so site search shows its developer fallback ("Live versions and file sizes are available when this site is served with its download Worker"). 6. Accessibility: - `Sidebar.astro:4` nests a `<nav aria-label="Site navigation">` inside Starlight's sidebar `<nav>`. - `launcher-channel.ts:58` disables a download by removing `href` and adding `aria-disabled` to what is then a non-interactive `<a>`. - `keyboard-scroll.ts` gives every table and `<pre>` `tabindex=0` whether or not it scrolls, with no accessible name, so there are extra unlabelled tab stops on wide screens. `check-site.ts` then fails any future component's raw table without one. 7. Wording and smaller points: - The hero's Contribute button becomes Download launcher, which the description doesn't mention. - The rc channel is "Preview launcher" in `launcher-channel.ts:122`; the rest of the site says "Release candidate". - Only Stable has the `<small>` "unavailable" text (`:95`). - `progress-board.ts:40–41` renders twice per select change (`input` and `change`). - The mobile filters render open and then collapse. Note: #768 replaces the front page hero with Jordan's design, which has been agreed with you. This PR's `LongshotHero.astro` and `Header.astro` changes will need redoing on top of it; the hero's download link and compatibility line can move there. *Review drafted with Claude Code and checked by Jordan.*
Author
Member

@ChuchoTheCatLord You haven’t done anything wrong—thank you for reporting it. #603 was mentioned because the website’s automatic checks flagged wording imported from its title. That is something for us to handle on the website; it does not mean your report was invalid or caused the game problem. You don’t need to change your report because of this PR.

@ChuchoTheCatLord You haven’t done anything wrong—thank you for reporting it. #603 was mentioned because the website’s automatic checks flagged wording imported from its title. That is something for us to handle on the website; it does not mean your report was invalid or caused the game problem. You don’t need to change your report because of this PR.
bibiburl force-pushed docs/frontend-review-wip from 02f0299c73
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 9s
Guide screenshots / Guide images and local UI source review (pull_request) Successful in 9s
Third-party parts / As their notes say (pull_request) Successful in 10s
PR description / Description follows the template (pull_request_target) Failing after 16s
to 60a1df544e
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 6s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
2026-11-15 12:24:47 +00:00
Compare
Author
Member

Updated review screenshots for 60a1df54. The main description will use these current images. Before images are main aa95d35f. Individual after images show only this PR; combined images are a local integration of #611, #638, #709 and #768, not a deployed site.

611-before-main-install

611-after-install

611-after-install-mobile

611-after-home

combined-home-1440-light

Combined integration: no merge conflicts, 18 pages built, 125 website tests pass with the same existing HDR-condition failure. All 16 viewport/theme/route layout checks have no horizontal overflow. The mobile light hero from #768 has a separate tagline contrast finding (3.67:1 versus 4.5:1 required); the download and release-tab changes do not edit that hero.

Updated review screenshots for `60a1df54`. The main description will use these current images. Before images are main `aa95d35f`. Individual after images show only this PR; combined images are a local integration of #611, #638, #709 and #768, not a deployed site. ![611-before-main-install](https://git.magicbean.dev/attachments/4367f233-dfdf-4c5a-aaea-9db811c0b4a4) ![611-after-install](https://git.magicbean.dev/attachments/3682299b-a44a-4d25-be2a-8626d8d9f745) ![611-after-install-mobile](https://git.magicbean.dev/attachments/e3c1c67b-75d9-4d67-bc35-6fa482f681c3) ![611-after-home](https://git.magicbean.dev/attachments/7f0e6f89-a8ab-486e-98e6-220563242259) ![combined-home-1440-light](https://git.magicbean.dev/attachments/831eadcb-c1b5-4098-9ee6-770c96456496) Combined integration: no merge conflicts, 18 pages built, 125 website tests pass with the same existing HDR-condition failure. All 16 viewport/theme/route layout checks have no horizontal overflow. The mobile light hero from #768 has a separate tagline contrast finding (3.67:1 versus 4.5:1 required); the download and release-tab changes do not edit that hero.
Author
Member

Addressed Jordan’s review in 60a1df54, rebased directly onto main aa95d35f. Preserved main’s corrected backup path and single settings image; fixed channel failure fallback, error metadata, accessibility and filter behavior. The download/compatibility/own-copy panel now sits below the unchanged hero and merges cleanly with #768 and #638. Current screenshots and baseline-matched validation are in the main post. Please re-check this head; the combined review also identifies a separate mobile tagline contrast issue in #768.

Addressed Jordan’s review in 60a1df54, rebased directly onto main aa95d35f. Preserved main’s corrected backup path and single settings image; fixed channel failure fallback, error metadata, accessibility and filter behavior. The download/compatibility/own-copy panel now sits below the unchanged hero and merges cleanly with #768 and #638. Current screenshots and baseline-matched validation are in the main post. Please re-check this head; the combined review also identifies a separate mobile tagline contrast issue in #768.
madebyjordan left a comment

Re-checked at 60a1df54: approved. Every point from the earlier review is fixed or no longer applies. It merges cleanly with main and with #768, the build passes, and the 404 pages now drop the canonical and og tags (checked against the built dist).

Two small things for a follow-up, neither blocking:

  1. /progress/ on desktop (ProgressBoard.astro:26, progress-board.ts:33-37): the filters' <details> has no open in the built HTML, and the script opens it on desktop after load. So the filters appear closed, then open and push the results down. Without JavaScript they stay closed at every width. Rendering it open and closing it on narrow screens would avoid the shift.
  2. The install page's default channel (format-install.ts:40-41, launcher-channel.ts:65,89): Release candidate is the hard-coded checked channel, and the links point at /rc/… until the live data answers. Once a stable launcher exists, a click during the fetch (up to 10 s), or after it fails, gets the release candidate. Defaulting to the Worker's best-channel route (/download/launcher/<os>) until the data arrives would avoid it. soon: true is now unused.

Minor: every Markdown table and code block gets the same label ("Data table", "Code example", keyboard-scroll.ts:14) whether or not it scrolls.

Review drafted with Claude Code and checked by Jordan.

Re-checked at 60a1df54: approved. Every point from the earlier review is fixed or no longer applies. It merges cleanly with main and with #768, the build passes, and the 404 pages now drop the canonical and og tags (checked against the built `dist`). Two small things for a follow-up, neither blocking: 1. **/progress/ on desktop** (`ProgressBoard.astro:26`, `progress-board.ts:33-37`): the filters' `<details>` has no `open` in the built HTML, and the script opens it on desktop after load. So the filters appear closed, then open and push the results down. Without JavaScript they stay closed at every width. Rendering it `open` and closing it on narrow screens would avoid the shift. 2. **The install page's default channel** (`format-install.ts:40-41`, `launcher-channel.ts:65,89`): Release candidate is the hard-coded checked channel, and the links point at `/rc/…` until the live data answers. Once a stable launcher exists, a click during the fetch (up to 10 s), or after it fails, gets the release candidate. Defaulting to the Worker's best-channel route (`/download/launcher/<os>`) until the data arrives would avoid it. `soon: true` is now unused. Minor: every Markdown table and code block gets the same label ("Data table", "Code example", `keyboard-scroll.ts:14`) whether or not it scrolls. *Review drafted with Claude Code and checked by Jordan.*
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 6s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 9s
PR description / Description follows the template (pull_request_target) Successful in 5s
Website / Website on Cloudflare (pull_request_target) Has been skipped
This pull request has changes conflicting with the target branch.
  • website/src/lib/public-copy.ts
  • website/tests/public-copy.test.ts
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'docs/frontend-review-wip:bibiburl-docs/frontend-review-wip'
git switch 'bibiburl-docs/frontend-review-wip'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
MagicBeanDev/Longshot!611
No description provided.