Skip to content

feat(whimsy): a potato mascot on the human-facing surfaces (#185) - #209

Merged
lionello merged 1 commit into
masterfrom
feat/issue-185-potato-mascot
Aug 12, 2026
Merged

feat(whimsy): a potato mascot on the human-facing surfaces (#185)#209
lionello merged 1 commit into
masterfrom
feat/issue-185-potato-mascot

Conversation

@defangdevs

Copy link
Copy Markdown
Owner

Closes #185. @lionello asked for the Portal potato, so: a potato wired to an
aperture optic. Drawn from scratch — no Valve assets, no Aperture logo, no game
text — and it still reads as "potato with a glowing eye" to anyone who has never
played the game.

the mark

Where it lands

1. Favicon — there was none. HEAD_TPL shipped no <link rel="icon">, so
the workspace tab was blank and several open boxes were indistinguishable. Both
the workspace and the settings page now carry the mark as an inline data: URI:
the page stays self-contained and the tab icon costs no second request.

2. One mark on all three surfaces. docs/potato.svg is the single source.
The landing page uses it as favicon and logo, replacing the generic &#9635;
square; the settings daemon embeds those same bytes at assemble time, so the
website and a live box cannot drift to two different marks. It is aria-hidden,
so the accessible heading name stays Settings for <user> (the Playwright
getByRole('heading') assertions still match).

settings page

landing page

3. ASCII potato on the two attach dead ends — "no session named 'x'" and "no
live sessions yet". Both are full-screen, already-a-dead-end moments, so the art
costs nothing and softens a failure. Real output from the generated script,
run against a scratch tmux socket:

terminal dead ends

4. agent-box-session add stamps a small one on success — the closest thing
this CLI has to "an agent just started":

   .-~~-.
  ( (o) )
   `-~~-'
session 'main' (claude) added — the supervisor starts it within ~2s

Nothing parses those lines (checked: no test, no caller, and the web UI uses the
HTTP route, not this output).

What it deliberately does NOT touch

The session spawn preamble. Art there is prepended to the agent's prompt on
every spawn, so it would cost tokens forever and read as an instruction the
agent has to decide whether to obey. Whimsy targets humans on human surfaces.

Notes for the reviewer

  • The mark is a module source as well as a website asset, so the
    module-generated-up-to-date check materializes it and CI's path filter
    watches docs/potato.svg.
  • The ASCII art uses printf per line rather than a heredoc: these scripts are
    embedded in Nix indented strings, where a heredoc terminator would ride on the
    dedent and break the moment issue Portability: native Ubuntu/RHEL support (Nix-without-NixOS) — refactor tracker #154 Phase 2 unindents them.
  • Ugly "new session" UI #175 (ugly new-session UI) touches the same templates. This PR stays out of
    the tab bar and the session editor markup, so it should not fight that work.
  • Golden fixture regenerated with nix run .#update-golden; the diff is the
    four touched payloads and nothing else.

Checks run locally (x86_64-linux): module-generated-up-to-date,
golden-snapshot, multi-user, module-single-file, download-route,
webhook-route. The KVM-only VM tests are left to CI (no /dev/kvm on this
box).

No AWS cost, IAM, networking or migration impact.

🤖 Generated with Claude Code

https://claude.ai/code/session_01T3WmpdY3zc555sNdkY9dzQ

agent-box gets a mascot: a potato wired to an aperture optic, per Lio's
call for the Portal potato. It lands only where a human looks.

- docs/potato.svg is the ONE source of the mark. The landing page uses it
  as its favicon and its logo (replacing the generic square glyph), and
  the settings daemon embeds those same bytes at assemble time — so the
  website and a live box cannot drift to two different marks.
- The workspace and settings pages had NO favicon at all, which left the
  tab blank and made several open boxes indistinguishable. They now carry
  the mark as an inline data: URI, so the page stays self-contained and
  the tab icon costs no second request. The same mark heads the settings
  page, aria-hidden so the accessible heading name is unchanged.
- The two attach dead ends ("no session named 'x'", "no live sessions
  yet") print an ASCII potato. Both are full-screen "nothing to attach
  to" moments, so the art costs nothing and softens a failure.
- `agent-box-session add` stamps a small one on success — the closest
  thing this CLI has to "an agent just started". Nothing parses those
  lines.

Deliberately NOT in the session spawn preamble: art there would cost
tokens on every spawn and read as an instruction the agent has to decide
whether to obey. Whimsy is for humans.

Since the mark is a module source as well as a website asset, the
generated-module drift check and CI's path filter now include it.

Checks run (x86_64-linux): module-generated-up-to-date, golden-snapshot,
multi-user, module-single-file, download-route, webhook-route. Golden
fixture regenerated with `nix run .#update-golden` — the diff is the four
touched payloads and nothing else. Settings page and landing page
rendered locally; the attach dead ends run against a scratch tmux socket.

Closes #185

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3WmpdY3zc555sNdkY9dzQ
@lionello
lionello merged commit 41db540 into master Aug 12, 2026
2 checks passed
@lionello
lionello deleted the feat/issue-185-potato-mascot branch August 12, 2026 20:43
@raphaeltm

Copy link
Copy Markdown

Bahaha, I love it 😂 🥔

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.

More whimsy for a better developer experience

3 participants