fix(website): improve mobile browsing and launcher downloads #611
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Depends on
#264 docs(guides): illustrate installation, settings and save transfer
MagicBeanDev/Longshot
Reference
MagicBeanDev/Longshot!611
Loading…
Reference in a new issue
No description provided.
Delete branch "bibiburl/Longshot:docs/frontend-review-wip"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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.jsonor 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.noindex. The static download page contains useful player instructions, not Worker implementation text.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.Before, mobile, and preserved download/ownership panel
Before: main @
aa95d35f, Install at the same 1440 px light viewport.After: this PR @
60a1df54, Install at 390 px, light.After: this PR @
60a1df54, home at 1440 px, light. The existing main hero is unchanged; the new callout follows it.Integration with #638, #709 and Jordan’s #768 hero (local only)
Browser checks: live local Worker
/downloadreturns 200, RC Linux download returns a 302 to the named launcher, unavailable Stable and unknown routes return 404 withnoindexand 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.
aa95d35f60a1df54Flags 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 mainaa95d35f: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:
#ffe100on#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:
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
type(scope): description) of the status line's type.main.python -I -B tests/run_all.pypasses (any failure that also fails onmainis named).third_party/untouched (a new folder with aPROVENANCE.mdinstead).When it applies
Assisted-by:trailers.tests/that reads changed source updated in this PR, not weakened.Review evidence for
18e1efcd. The full frontend changes and #264 ata0a93f11are 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
6c9edffeand 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
Mobile search — deployed baseline and combined PR
Combined guides and download experience
Your #264 screenshots, example captions, Linux executable-permission step and save/backup guidance are preserved.
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.ymlrequires a maintainer to read the exact fork commit and addpreview. That gate has not been bypassed.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.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.
Prepared
02f0299cfor 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.WIP: fix(website): improve mobile browsing and launcher downloadsto fix(website): improve mobile browsing and launcher downloadsReview-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
a0a93f11head is still an ancestor. The three proposed replacement heroes are separate concepts and are not included in this PR.my report was included in this #603, I'm completely new, did I do something wrong?
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.
Reviewed at
02f0299c. The Worker's download routes, 302s and caching hold up: I ran itsfetchagainst 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
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.website/src/repo-docs/graphics-settings.tshas two implementations of the text-field handling. This PR's adds!row.headingand loosens/Applies after (?:a )?restart\./(it drops the\.); main has #264's. One has to be chosen, andtests/graphics-settings.test.ts(around lines 31 and 245) ends up with near-duplicate tests from both.versions.jsonfails (launcher-channel.ts~83, 99, 102:root.hidden = falseonly runs after validation passes). A timeout, a non-200, or one bad field (one channel's releaseurloutside/MagicBeanDev/LongshotLauncher/releases/) hides Release candidate and Nightly entirely, and underastro devor 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
worker/index.ts~357–376) keep the static page'srel="canonical"(/download/) andog:title; only<title>and the<h1>are rewritten, so link previews are wrong./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").Sidebar.astro:4nests a<nav aria-label="Site navigation">inside Starlight's sidebar<nav>.launcher-channel.ts:58disables a download by removinghrefand addingaria-disabledto what is then a non-interactive<a>.keyboard-scroll.tsgives every table and<pre>tabindex=0whether or not it scrolls, with no accessible name, so there are extra unlabelled tab stops on wide screens.check-site.tsthen fails any future component's raw table without one.launcher-channel.ts:122; the rest of the site says "Release candidate".<small>"unavailable" text (:95).progress-board.ts:40–41renders twice per select change (inputandchange).Note: #768 replaces the front page hero with Jordan's design, which has been agreed with you. This PR's
LongshotHero.astroandHeader.astrochanges 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.
@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.
02f0299c7360a1df544eUpdated review screenshots for
60a1df54. The main description will use these current images. Before images are mainaa95d35f. Individual after images show only this PR; combined images are a local integration of #611, #638, #709 and #768, not a deployed site.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.
Addressed Jordan’s review in
60a1df54, rebased directly onto mainaa95d35f. 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.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 builtdist).Two small things for a follow-up, neither blocking:
ProgressBoard.astro:26,progress-board.ts:33-37): the filters'<details>has noopenin 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 itopenand closing it on narrow screens would avoid the shift.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: trueis 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.
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.