Skip to content

Re-shoot the README against the console that actually ships - #68

Merged
AndrewCTF merged 1 commit into
masterfrom
readme-media-refresh
Aug 8, 2026
Merged

Re-shoot the README against the console that actually ships#68
AndrewCTF merged 1 commit into
masterfrom
readme-media-refresh

Conversation

@AndrewCTF

Copy link
Copy Markdown
Owner

Every still in the README was taken between 2026-07-10 and 2026-07-27, before
the console rebuild landed. They show the old shell: the flat icon rail, the
old palette, panels that no longer exist at those addresses. The first thing a
visitor sees was a product that is no longer there.

Twelve stills and the hero GIF are re-shot at 1440p against live feeds, and two
scripts make the set repeatable rather than something done by hand once.

What is here

  • scripts/screenshot-readme.mjs drives each surface by a named recipe (app,
    camera, layers, tab, sub-tab, selection) and writes to the paths the README
    already embeds. Re-shooting the whole set is one command; --only NAME
    re-shoots one.
  • scripts/record-hero-gif.mjs records the four beats the hero caption claims,
    in one take: the live world, the fly-in to Europe, an aircraft selected with
    its owned track and dossier, then the hour rewound on the replay dock. It
    encodes with a per-clip palette, which is what keeps a dark globe from
    banding into mud. 7.7 MB to 2.2 MB.
  • The tests badge and the pytest comment said 1972. The suite is 2255.
  • The airspace figure's alt text claimed a seaport dossier it never showed; it
    now describes the TFR polygons and hazard layers that are in the frame.

Traps the harness had to work around

Recorded in the scripts so the next person does not rediscover them:

  • The low-end-graphics, degraded-feed and open-mode banners are notes about the
    capture box, not the product, and they ate two rows of every frame. All three
    are localStorage-dismissible; the harness sets those keys up front.
  • Playwright's actionability wait never settles on this app, because the live
    feed mutates the DOM every second. A native el.click() still bubbles an
    event React's delegated handler catches.
  • The ms-playwright cache on this box carries no chromium bundle, so both
    scripts pass an explicit executablePath.
  • The time dock's Rewind sets the playback multiplier; it does not seek.
    Using it left the replay figure on live, the one state a replay figure must
    not be in. Jump to start is the seek.
  • Info is four sections behind sub-tabs, and Workflows opens on an empty
    canvas, so both needed a click before there was anything to photograph.

Not re-shot, and why

ui-detach-toolbar.jpeg. The detach control lives in ConsoleShell, which
only the /2d route renders; the 3D console renders Console.tsx, which has
no detach affordance at all. README §11 ("tear the workspace apart") describes
something the shipping console cannot do. The same applies to the replay
figure's caption, which names a coverage chip ("recording since … · GB ·
fixes") belonging to Timeline, also 2D-only.

Both want a follow-up decision: restore those surfaces to the 3D console, or
rewrite the two paragraphs. Shooting them against /2d would drop a
different-looking console into the middle of a tour of this one, so the old
figure stays until that is decided.

Verification

bash scripts/verify.sh green: typecheck, lint, web unit, and 2255 passed +
2 skipped on the backend suite. Every figure was opened and read before being
committed, not just written to disk.

Every still in the README was taken between 2026-07-10 and 2026-07-27, before
the console rebuild landed. They show the old shell: the flat icon rail, the
old palette, panels that no longer exist at those addresses. A reader's first
impression of the project was a product that is no longer there.

Twelve stills and the hero GIF are re-shot at 1440p against live feeds, and
two scripts make the set repeatable rather than a thing somebody did by hand
once:

- scripts/screenshot-readme.mjs drives each surface by a named recipe (app,
  camera, layers, tab, selection) and writes to the paths the README already
  embeds, so re-shooting the set is one command.
- scripts/record-hero-gif.mjs records the four beats the hero caption claims,
  one take: the live world, the fly-in to Europe, an aircraft selected with
  its owned track and dossier, then the hour rewound on the replay dock. It
  encodes with a per-clip palette, which is what keeps a dark globe from
  banding. 7.7 MB down to 2.2 MB.

Things the shots had to work around, recorded so the next person does not
rediscover them:

- The low-end-graphics, degraded-feed and open-mode banners are notes about
  the capture box, not the product, and they ate two rows of every frame. All
  three are localStorage-dismissible; the harness sets those keys up front.
- Playwright's actionability wait never settles on this app, because the live
  feed mutates the DOM every second. Native el.click() still bubbles an event
  React's delegated handler catches.
- The ms-playwright cache here has no chromium bundle, so both scripts pass an
  explicit executablePath.
- "Rewind" on the time dock sets the playback multiplier; it does not seek.
  Using it left the replay figure on live, which is the one state a replay
  figure must not be in. "Jump to start" is the seek.
- Info is four sections behind sub-tabs, and Workflows opens on an empty
  canvas, so both needed a click before there was anything to photograph.

The tests badge and the pytest comment said 1972; the suite is 2255. The
airspace figure's alt text claimed a seaport dossier it never showed, and now
describes the TFR polygons and hazard layers that are in the frame.

Not re-shot: ui-detach-toolbar.jpeg. The detach control lives in ConsoleShell,
which only the /2d route renders; the 3D console renders Console.tsx, which
has no detach affordance, so README §11 describes something the shipping
console cannot do. Same for the replay figure's caption, which names a
coverage chip ("recording since … · GB · fixes") that belongs to Timeline,
also 2D-only. Both are for a follow-up: restore the surfaces, or rewrite the
two paragraphs. Shooting them against /2d would put a different-looking
console in the middle of a tour of this one.
@AndrewCTF
AndrewCTF merged commit 07b1187 into master Aug 8, 2026
2 checks passed
@AndrewCTF
AndrewCTF deleted the readme-media-refresh branch August 8, 2026 05:08
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.

1 participant