ReviewOS

stacks/uplink

docs(homepage): the requirements to run Uplink are split across five places

#25
Open glennmichael123 opened this 8 days ago ·
8 days ago

Part of #6.

A visitor's first question is whether Uplink will run on their Mac, and the page answers it in fragments, in five different components, with the two facts most likely to produce a bad first run sitting the furthest down. The Mac has to stay awake and a self-text may never touch the satellite link, and both of those are collapsed FAQs at the bottom. The CPU architecture of the DMG is not stated anywhere in the repository at all.

What is there today

  • macOS 13 or later exists only inside a generated caption string, resources/views/index.stx#L50, which renders as monospace metadata beside the download button at resources/views/index.stx#L326.
  • The Claude Code CLI and a plan are named once, in the download subhead at resources/views/index.stx#L320, which sits below both hero buttons (resources/views/index.stx#L183 and resources/views/index.stx#L198).
  • Full Disk Access is the second of six FAQs, resources/views/index.stx#L65-L66, inside a collapsed <details> rendered at resources/views/index.stx#L361.
  • Permission to control Messages is the third install step, resources/views/index.stx#L55, which is below the download button rather than above it (resources/views/index.stx#L329-L336).
  • The Mac staying awake is the last FAQ, resources/views/index.stx#L81-L82: "A laptop with its lid closed still sleeps unless it is on power with a display attached."
  • Nothing says whether the DMG is Apple Silicon, Intel or universal. A grep for Apple Silicon, Intel, arm64, x86 and universal across resources/ returns no matches, and app/Commands/Uplink.ts#L208-L215 hands the build to build:desktop and build:dmg without naming a target.
  • Satellite is the load-bearing claim: the <title> at resources/views/index.stx#L16, the description at resources/views/index.stx#L17 which the og tag at resources/views/index.stx#L99 renders, the premise of the h1 at resources/views/index.stx#L192, the hero subhead at resources/views/index.stx#L195, and the first how-it-works step at resources/views/index.stx#L33.
  • The qualification of that claim is the first FAQ, resources/views/index.stx#L61-L62: "try it once before you rely on it. If it does not arrive, sign the Mac into a second Apple ID and text that instead." README.md#L87-L90 says the same thing more bluntly, and both are below the download button.
  • The page never uses the words free, open source or MIT. A grep for them in resources/views/index.stx returns nothing, while package.json#L7 declares MIT and LICENSE.md#L1 is an MIT license. The only source reference is one footer clause at resources/views/index.stx#L376, plus a build-from-source link at resources/views/index.stx#L339.
  • The nav at resources/views/index.stx#L180-L184 holds two same-page anchors and the download button. There is no GitHub link, and nothing on the page links the releases page.
  • All three download links point at release.url (resources/views/index.stx#L49), which is the floating latest URL at resources/data/release.json#L5, while the version in the caption is hand maintained: release.json is written only by uplink:release at app/Commands/Uplink.ts#L223, under a comment at app/Commands/Uplink.ts#L222 that tells the maintainer to commit it. It currently says 0.1.0 (resources/data/release.json#L2) while package.json#L4 says 0.1.1.
  • CHANGELOG.md#L1 is the heading # Uplink Changelog and nothing else. LICENSE.md#L3 reads "Copyright (c) 2023 Open Web Foundation".

Proposal

  1. Add a requirements block to the download section's left column, resources/views/index.stx#L318-L341, immediately above the button at resources/views/index.stx#L322. Six items: macOS 13 or later, the CPU architecture, the Claude Code CLI and a plan, Full Disk Access for Uplink.app, permission to control Messages, and a Mac that stays awake. Drive it from a new array in the <script server> block beside install at resources/views/index.stx#L52-L56, rendered with @foreach.
  2. Put one plain line about satellite in the same block: try a self-text in satellite mode once before relying on it, and if it does not arrive sign the Mac into a second Apple ID. Link it to the full answer in the first FAQ, which needs an id on the faqs entries at resources/views/index.stx#L59-L84 and on the <details> element at resources/views/index.stx#L361, since neither is addressable today.
  3. State that Uplink is free, open source and MIT next to the version metadata at resources/views/index.stx#L326, and link LICENSE.md from there.
  4. Add a GitHub link to the nav at resources/views/index.stx#L180-L184, before the download button at resources/views/index.stx#L183.
  5. Link https://github.com/stacksjs/uplink/releases from the download section, and settle the version label while doing it: either derive it at deploy time from the releases API, or drop release.version out of downloadMeta at resources/views/index.stx#L50 and let the releases link carry it. A hand-committed number beside a floating URL cannot be kept honest.
  6. Fix LICENSE.md#L3 while in the file. Do not build a changelog page: CHANGELOG.md#L1 is a bare heading, and a second place to forget is worse than the releases link.

Requirements

  • Confirm the architecture against the shipped DMG, do not guess it. The answer is not written down anywhere in the repository, so read it off the artifact that https://github.com/stacksjs/uplink/releases/latest/download/Uplink.dmg serves and write what is true. If it is Apple Silicon only, the block has to say so, because that is the one requirement an Intel Mac owner cannot discover by trying.
  • The block goes above the button, not below it. Everything listed here is already somewhere on the page. The finding is placement, so moving a fact past the download button at resources/views/index.stx#L322 does not fix it, and adding a seventh copy in the install steps at resources/views/index.stx#L329-L336 makes it worse.
  • Reference the facts, do not duplicate them. Once macOS 13 is in the block, downloadMeta at resources/views/index.stx#L50 should not also state it, and the FAQ answers at resources/views/index.stx#L65-L66 and resources/views/index.stx#L81-L82 stay as the long form rather than being trimmed.
  • Write the satellite line as a qualification, not a disclaimer. It is one sentence in the page's own voice, matching README.md#L87-L90. It is not fine print, not a warning icon, and it does not go in a box styled to be skipped.
  • Keep the page's data-driven shape. New copy lives in typed arrays in <script server> beside install and faqs, rendered with @foreach as at resources/views/index.stx#L330, not as hand-written repeated markup.
  • No new routes and no new views. This is copy inside resources/views/index.stx plus one line in LICENSE.md.
  • No em-dashes and no en-dashes. resources/views/index.stx has none today and a reviewer will check, per AGENTS.md.

Acceptance

  • The download section, read on its own without opening a single <details>, answers all six requirements: macOS version, CPU architecture, the CLI and a plan, Full Disk Access, control of Messages, and staying awake.
  • A grep for the architecture across resources/ returns a match, and it agrees with the DMG the latest release actually serves.
  • The satellite qualification is visible without expanding anything, appears above the download button, and links to the first FAQ's full answer.
  • resources/views/index.stx contains the words free, open source and MIT beside the version metadata, with a working link to the license.
  • The nav contains a GitHub link, and the download section links the releases page.
  • Either no version number renders on the page, or the number that renders is produced by something that cannot go stale, and the mechanism is stated in app/Commands/Uplink.ts next to the release.json write at app/Commands/Uplink.ts#L223.
  • LICENSE.md#L3 carries the correct holder and year.
  • No new file under routes/ or resources/views/, and CHANGELOG.md is unchanged.
  • ./buddy lint and ./buddy typecheck pass, and a grep for the em-dash and the en-dash across resources/views/index.stx returns nothing.

Sign in to comment on this issue.