Skip to content

feat(site): 404 page, numbers from uptide 0.6.0 at build time, one dim - #4

Merged
lucasbraum merged 1 commit into
mainfrom
claude/exciting-cerf-g01c4c
Oct 10, 2026
Merged

lucasbraum merged 1 commit into
mainfrom
claude/exciting-cerf-g01c4c

Conversation

@lucasbraum

Copy link
Copy Markdown
Contributor

Three changes: one light-theme dim color, a root 404 page, and landing numbers that come from uptide-dev/uptide at build time instead of being typed in.

1. Light dim #6A675F everywhere

  • Landing CSS: --dim changes from #76736B to #6A675F, the same as the docs site. The old value fell just under 4.5:1 for small text on #F4F2EC.
  • og-image.html: the $ prompt and the tag line use #6A675F. The dot grid's rgba(118,115,107,…) is the same color, so it becomes rgba(106,103,95,…). og.png is re-rendered.
  • Docs site: the CSS comment and docs-site/README.md no longer describe a difference.
  • Test: checks that #76736B no longer appears in any of these files.

2. site/404.html

  • Content: the two-blue mark and lowercase wordmark linking to /, the one line "This page is not here.", and links to / and /docs/. It has light and dark themes from the landing tokens, noindex, and no em dashes.
  • Absolute URLs: GitHub Pages serves this file for every missing path at any depth, so every URL in it (fonts, favicon, links) is absolute.
  • Deploy: scripts/assemble-site.mjs copies site/ whole, so the page lands at _site/404.html, the artifact root. Tests cover the page and the copy.

3. Numbers from uptide 0.6.0

Packs and version are rendered at deploy, not written into the page.

  • Slots: index.html has data-uptide slots with non-numeric fallbacks. scripts/landing-data.mjs fills them from the uptide checkout that the docs build already makes:
    • the version, from packages/cli/package.json;
    • each pack's precision, recall, status and ground-truth repositories, from its verification.json and ground-truth.json.
      It renders 0.6.0 and 4 verified packs: ai, react, stripe and zod.
  • Range column: the version range lives in each pack's TypeScript metadata, not in JSON. It is read from the README table that uptide generates (scripts/docs-packs.ts, enforced by its CI).
  • Cross-check: every other column of that README table must equal what the JSON gives, using the README's own rounding. If a package is in one but not the other, or any value differs, the deploy fails. So the landing and the README cannot disagree.
  • Placement: the table sits under "Honest by design" (#packs). "Supported today" lists the packs, and the fix explanation links to the table instead of naming zod and stripe.

Every other number traces to a public run, and the build checks it.

  • Terminal blocks: each <pre> names its public source (data-source="docs/commands/check.md", README.md, docs/commands/fix.md). It must be a run of consecutive lines of a code block in that file, or the deploy fails.
  • Drift already found: this check showed the landing's check block was no longer 0.6.0's output, which adds the compiled 11 of 11 files… lines and a plan suggestion. The block is now generated from those exact lines.
  • Privacy statement: checked word for word against docs/privacy.md, the same way uptide's own test checks it. It now includes 0.6.0's paragraph on check/verify loading your TypeScript.
  • Removed, because no public run backs them:
    • the supabase list run (273 outdated, commit 9d1661d, uptide 0.4.0);
    • its four stat tiles and the footnote;
    • "about a second on a small repo, 20 seconds on the supabase monorepo" in the hero.
  • Hero: now shows the first lines of the published storefront check run.
  • Also traced: Node 20 (engines), the default models and the $1 cap (docs/models.md), exit code 1 (docs/commands/fix.md), and UPTIDE_TELEMETRY=1 (docs/telemetry.md). For the files the page reads, main and the v0.6.0 tag are identical today.

Smaller fixes

  • Packs table on phones: it scrolls horizontally instead of using the stacked mobile layout, which would hide the Precision/Recall headers. The scroll region is focusable and labeled.
  • Header link: the "Star on GitHub" header link had no accessible name below 560px, where its text is hidden. It now has aria-label. This was the only Lighthouse failure.

Checks

  • Lighthouse accessibility (13.5.0): 100 on / and /404.html, light and dark, mobile and desktop presets. Dark runs used --force-dark-mode, and the background colors in Lighthouse's own screenshots confirm each theme rendered.
  • 404 serving: with a local server that answers like GitHub Pages, /docs/no/such/page/ returns 404 with this page and its fonts load.
  • Links: scripts/check-links.mjs finds 2,668 internal links on 45 pages, none broken.
  • Tests: node --test 'test/*.test.mjs' passes 19 tests. The new ones include fake-checkout tests proving that a README/JSON disagreement, a changed number in a terminal block, and a missing or unknown slot each fail the build.

Screenshots

Light Dark
/ hero hero light hero dark
/#packs packs light packs dark
404 at /docs/no/such/page/ 404 light 404 dark

The full-page captures in docs/screenshots/site-landing/ are refreshed too.

Notes

  • Reads main, not the release tag. The page shows whatever main of uptide-dev/uptide says, because it uses the docs checkout. Today main and v0.6.0 agree. If main gets a new pack or a version bump before an npm release, the landing will show it before npx uptide has it. Pinning the landing's data to the latest release tag would be a small follow-up if you want that.
  • Upstream changes can block deploys. If uptide's README packs table ever goes stale relative to the JSON, or a run in its docs changes, the daily deploy fails instead of publishing a mismatch. The error names the file and the value.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VcwhsQvN6vtpRCe4uwfe8z


Generated by Claude Code

- Light dim is #6A675F on the landing page and its social preview
  (og.png re-rendered), as on the docs site: 4.5:1 for small text.
- site/404.html: the wordmark linking to /, one line, links to / and
  /docs/, both themes, absolute URLs since Pages serves it everywhere.
  The deploy copies site/ whole, so it is published at the root.
- The packs (count, list, and the table with precision, recall and
  ground-truth repositories) and the version are rendered at deploy from
  each pack's verification.json and ground-truth.json in the uptide
  checkout the docs build makes. The range comes from uptide's generated
  README table, and every other column must equal the JSON, so the page
  and the README cannot disagree.
- Every terminal block names its public source and must match it, so a
  drifted run fails the deploy. The check block and the privacy
  statement are updated to 0.6.0's output.
- Removed numbers no public run backs: the supabase list run, its tiles
  and footnote, and the hero timings.
- The header's GitHub link keeps a name when its text is hidden on
  mobile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcwhsQvN6vtpRCe4uwfe8z
Signed-off-by: Claude <noreply@anthropic.com>
@lucasbraum
lucasbraum merged commit e5f4d5a into main Oct 10, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants