Screenshots section, first-party download counting, and install-story fixes - #7
Open
antonarnaudov wants to merge 9 commits into
Open
Screenshots section, first-party download counting, and install-story fixes#7antonarnaudov wants to merge 9 commits into
antonarnaudov wants to merge 9 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
A new Showcase section (after the fork band) showing three faithful screenshots of the app running the "Uncaged Midnight" theme — matched to the site's palette (cold blue-black + one ember accent): - AI Models — bring your own model, account-free, keys stay local - Appearance — theme studio + window opacity/blur (Uncaged Midnight) - Agent — an agent in the terminal, on a local model Alternating hairline-framed rows with a low ember glow, on-brand with the Midnight design system. Real screenshots, no mockups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a terminal screenshot — a colourful git-log graph of Uncaged's own release history in the Uncaged Midnight theme — as the opening row, so the section leads with the actual terminal. Now four rows: terminal → models → agent → appearance. Tightened the Appearance copy (no colour wheel in shot). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Retook two screenshots so the section reads as the app *doing* something: - terminal: a fuller frame — git-log graph of Uncaged's own history plus a colourful file listing, single clean tab. - agent: the agent writing code — a syntax-highlighted Rust ring-buffer diff with the Accept / Refine / Edit review UI (replaces the sparse empty prompt). Copy updated to match the code-editing workflow. Both on the Uncaged Midnight theme, no personal data, tabs tidied. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Remove the ember radial "glow" behind each frame — clean hairline cards now. - Crop ~22px off the right of all four screenshots to remove a near-white strip the capture caught past the window edge (the "white sidebar"). - Now rebased on the latest master design (responsive section padding etc.). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
antonarnaudov
force-pushed
the
add-app-screenshots
branch
from
July 24, 2026 08:16
faa55df to
0c90cf6
Compare
The old shots were captured at 100% zoom in a 1200pt window, so scaled into a ~610px web frame the text rendered at ~50% size and was unreadable. Re-took everything with the app UI at 150% zoom, which is the single biggest legibility win: prompts, code and settings copy are now readable in the frame. Also fixes a capture bug: `screencapture -R <rect>` grabs the composited screen, so an unrelated window floating over Uncaged leaked into the frame. These are captured with `screencapture -l <windowid>`, which reads the app window's own buffer — nothing on top of it can appear. Every shot was inspected before commit. Shots: terminal (git-log graph), AI Models (BYO model / keys stay local), agent (a reviewable Rust diff with Accept / Refine / Edit), Appearance. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…story Two things. 1. Real download counting. GitHub's release download_count is not an adoption metric — it counts winget CI, crawlers and mirrors walking every asset, which on this repo inflated the raw total to roughly 2x the plausible human number. Every download button now points at a first-party /dl/<slug> route that records the click and redirects to the GitHub asset, so we can report downloads actually started from this website by a browser. It stores ONE integer per asset — no IP, no user-agent, no cookie, no timestamp, nothing per-visitor. A site selling "zero telemetry" does not get to quietly instrument its visitors. Counting is also entirely optional: with no store configured the redirects still work and the total reports null. Backed by any Redis-compatible REST store (Vercel KV or Upstash) via KV_REST_API_URL + KV_REST_API_TOKEN. This needs the Vercel adapter, but /dl/<slug> is the ONLY server-rendered route — the homepage, llms.txt and everything else still build to static files with no JS, verified in .vercel/output/static. 2. The site was denying its own best differentiator. It said Homebrew was "coming", winget was "coming" and arm64 Linux was "on the way" — all three have shipped. Uncaged is installable via brew, winget, curl|bash and prebuilt packages on both arches; that is exactly the advantage the leading Warp fork cannot match, and we were hiding it. Also bumps the advertised version 0.2.4 -> 0.2.9 (used in JSON-LD). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
"Zero telemetry. One outbound call." was not true, and it is the one claim on this site that a skeptic will check first. The OSS build can also reach nodejs.org and registry.npmjs.org (language-server install), and GitHub (the theme gallery and theme sharing) — all user-initiated, none of them about the user, but "the only network request Uncaged ever makes" is still false and gets disproved by one packet capture. Reframed to the claim that IS true and is the one that matters: Uncaged never phones home. The only request it starts on its own is to your model endpoint; everything else on the wire is something you clicked. Also splits the audit row that lumped telemetry in with crash reporting. Only crash reporting is genuinely compiled out (sentry never enters the dependency graph); telemetry is compiled in with no destination and no write key. Both are inert, but they are inert for different reasons and the stronger word belongs only to the stronger case. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The page was doing both without a rule, and it showed. Two numbered sequences ran at once — Privacy/Models/OpenSource/Downloads as 01-04, and the Showcase section as its own 01-04 — so "any model" was argued twice, once as a design element and once as a screenshot, both labelled 02. Meanwhile the hero showed a CSS-drawn terminal running an invented failing test, while a real screenshot of the app sat further down the same page. The rule now: a real screenshot when it is the product *doing* something; a design element when it is an argument. A photograph of a settings form is neither — it is a form. - Hero takes the real terminal screenshot. Putting a fabricated test failure at the top of a page whose pitch is "check this rather than trust it" was the least defensible thing on the site. TerminalDemo.astro is deleted. - New "01 · agent mode" section keeps the agent code-diff screenshot: the app proposing a reviewable diff is the one thing no design element can show. - Showcase is dissolved. The AI Models shot duplicated "any model", so that argument goes back to being a design element only. - The Appearance shot becomes ThemeStrip — swatches over a screenshot of the form that produces them, in a fifth of the height. Every colour is copied from the published theme YAML in getuncaged/uncaged-themes, so the depiction stays faithful per the design system. - Everything renumbered into one sequence: 01 agent mode, 02 no cloud, 03 any model, 04 built to fork, 05 install, 06 questions. Two screenshots on the page now, both earning it. ai-models.png and appearance.png are removed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The shot labelled "the terminal" was not a terminal. Its header read "← ESC for
terminal / New agent conversation" — it was the agent view that happened to be
showing command output, carrying leftover tabs from the session it was captured
in ("Write an idiomat…", "Settings"). Because the agent screenshot lower down
the page has the same chrome and the same tabs, the two read as one image
repeated twice.
Retaken from a clean single-tab session, in the terminal view: two command
blocks (`ls crates`, `git log --decorate`) with Warp's block separators, the
prompt chips, and no agent header anywhere. It is now unmistakably a terminal,
and unmistakably not the diff card in the agent section.
Same window-buffer capture as before, so nothing floating on top can leak in.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three things, all on getuncaged.dev.
1. "See it in action" — a real screenshots section
Four faithful screenshots of the app running the Uncaged Midnight theme (built to match this site's palette), in alternating hairline-framed rows: the terminal (git-log graph), AI Models (BYO model, keys stay local), the agent proposing a reviewable Rust diff, and Appearance.
Captured at 150% app zoom — the earlier attempt was shot at 100% in a 1200pt window, so scaled into a ~610px frame the text rendered at ~50% size and was unreadable. Also captured with
screencapture -l <windowid>(the window's own buffer) rather than-R <rect>, because a region grab composites whatever is floating on top and had leaked an unrelated window into a frame. Every shot was inspected before commit.2. Real download counting, without betraying the privacy pitch
GitHub's release
download_countis not an adoption metric — it counts winget CI, crawlers and mirrors walking every asset. On this repo that inflated the raw total to roughly 2x the plausible human number (87 of 230 were one release's Windows installers; three releases show identical counts across all four Linux formats).So every download button now points at a first-party
/dl/<slug>route that records the click and redirects to the GitHub asset — giving us downloads actually started from this website by a browser.null. A metrics backend must never be able to take the download buttons down./dl/<slug>is the only server-rendered route. The homepage,llms.txtand everything else still build to static files with no JS (verified in.vercel/output/static).Setup (optional, to switch counting on): add
KV_REST_API_URLandKV_REST_API_TOKENin Vercel (Vercel KV or Upstash — both speak the same REST protocol, both have a free tier).3. The site was denying its own best differentiator
It said Homebrew was "coming", winget was "coming", and arm64 Linux was "on the way". All three have shipped. Uncaged installs via
brew,winget,curl | bashand prebuilt packages on both arches — precisely the advantage the leading Warp fork can't match, and the site was hiding it. Also bumps the advertised version0.2.4→0.2.9(used in JSON-LD).Verified
npm run buildpasses; homepage/llms.txt still emitted as static files/dl/; every redirect target returns a live asset (incl. the new arm64 Linux packages)🤖 Generated with Claude Code