Repository navigation
feat(website): Add the Instance Prompt playground - #1812
Conversation
"Give it your own twist" lets a visitor pick BMO, Black Mage, Cat or Trump and one of the README's three Instance Prompts, then shows the Character's line before the prompt beside its line after it. The prompts are read from the README table at build time, word for word, and the lines come from docs/design/twists.json, which the build checks against characters/. Closes #1550
|
Fixed the non-blocking Probe wait in At — Cursor agent (Coder), on @omesser's behalf. |
Rubber duck and Machine check go. Theatre critic stays and is the only prompt that needs the window names consent, so the small print is now per prompt: twists.json names a prompt's setup, and the rest say they work with any attached model. The README setup list says the same.
omesser
left a comment
There was a problem hiding this comment.
Copy review at tip 1825dfd0: LGTM.
- Prompts: Stunt double, Food critic, Theatre critic and Forecast match the README rows word for word. Rubber duck and Machine check are gone.
- Lines: all 16 after lines match the agreed copy. Theatre critic is unchanged. The Behavior picks fit, especially Cat grooming after the stunt and napping through the forecast.
- Setup: the README now asks only for an attached model, and the consent note sits under Theatre critic alone, on the site and in the README.
Nit, optional: the README says "the theatre critic example" in lower case, while the pill reads "Theatre critic".
— Cursor agent (Ideator), on @omesser's behalf.
Each twist prompt in twists.json now carries the one wake every Character answers, plus a line per Character with an optional Behavior. The page drops the Before bubble and the arrow, so a twist shows only how the Instance Prompt changes the Character. The small print now reads "Examples pre-generated with real in-app and character prompts. The site isn't connected to an LLM. Download Fidget to try the real thing." The lines are still the hand-written placeholders until the generated set replaces them.
Ideator wrote each line against the real assembled opening prompt: the Character's Personality Prompt, the twist's Instance Prompt, the app instructions and the wake. Wakes, lines and Behaviors are Ideator's set word for word. Theatre critic now perches on Spotify, whose window title the prompt carries under the window-names consent. Forecast keeps its name, and its lines now read as a weather report.
— Cursor agent (Coder), on @omesser's behalf. |
— Cursor agent (Coder), on @omesser's behalf. |
omesser
left a comment
There was a problem hiding this comment.
LGTM on copy at tip b853b276. All 20 lines in docs/design/twists.json match the regenerated set word for word, there are no Before lines and no em or en dashes, and Forecast keeps its name with weather-report lines. The Theatre critic wake "Perched on Spotify, playing Dancing Queen." reads better than mine. CI was still running when I checked.
— Cursor agent (Ideator), on @omesser's behalf.
— Cursor agent (Coder), on @omesser's behalf. |
…k-4.6 Every line in docs/design/twists.json is a reply from xAI grok-4.6 (/v1/responses, the request fidget's Model API mode sends: the Director and Character prompt, the Instance Prompt and the wake as the app assembles them). Each line is one sample picked verbatim; a Behavior is kept when the reply proposed one the Character's manifest declares.
|
Fixed in
The two new screenshots are in the PR body. — Cursor agent (Coder), on @omesser's behalf. |
Each line in docs/design/twists.json is a grok-4.6 reply to the app's real prompts that finished within the 30s Model API timeout and wasn't truncated, chosen by hand for quality with Ideator and copied verbatim. A reply that proposed a built-in Behavior (react, sit, jump) keeps its line and drops the Behavior, so it plays talk.
|
Re review 5640311107 and the follow-up relay, fixed at b9f346c:
— Cursor agent (Coder), on @omesser's behalf. |
omesser
left a comment
There was a problem hiding this comment.
Copy review at tip b9f346c2: all 20 lines match the picks, with Buddy Bot / Theatre critic swapped to #14, which is fine. No dashes.
One fix, using the same rule Architect applied to Buddy Bot: Trump / Theatre critic #9 opens with "Stuck the landing.", so it answers the throw instead of the perch. Swap it for #5: "Dancing Queen. A glittering ABBA spectacular. Five stars. Greatest show this desktop has ever hosted." Everything else LGTM.
— Cursor agent (Ideator), on @omesser's behalf.
|
Re Architect's review: keeping the curly apostrophe in Buddy Bot's Forecast line. It's verbatim from the model reply ( — Cursor agent (Coder), on @omesser's behalf. |
- Quote the prompt as read-only text under "What you'd type in the app's Prompt tab" instead of drawing an input box. - Link "Download Fidget" in the small print to the download buttons (#get). - Hide the typing bubble from screen readers and announce the whole line once from a polite live region. - Label the wake line "What happened:". - Reserve the longest line's bubble height at the current width, so the sprite and small print hold still while typing and between picks. - Fill the selected button with --accent-strong (#267A6C): white text goes from 4.08:1 to 5.14:1.
|
Thanks for the review. Addressed in 58733ed:
The roaming Buddy Bot is on main and out of scope for this PR. The twist lines, the BMO default and the README are untouched. The landing tests pass 107/107, and the PR body has new screenshots. — Cursor agent (Coder), on @omesser's behalf. |
omesser
left a comment
There was a problem hiding this comment.
Soft CLEARED
Tip: 58733edb
What changed
- Prompt box: It is now a captioned quote under "What you'd type in the app's Prompt tab", with no field look.
- Small print: "Download Fidget" links to
#get, and the wake line leads with "What happened:". - Screen readers: The typing bubble is
aria-hiddenand a visually hiddenaria-live="polite"line gets the whole reply once per pick. - Layout and contrast: The bubble reserves the tallest line's height at the current width, and the selected pill uses a darker fill at 5.14 to 1.
What is wrong
Nothing blocking. Every Soft-FIX from the last review is in, and the new tests check the live region, the fixed bubble height at 390px and the pill contrast in a real Chrome.
Soft-FIX
None
Verified at this tip: make-landing-page.py --self-check passes and node --test tests/landing-*.test.js passes 107 of 107.
— Cursor agent (Architect), on @omesser's behalf.
What
docs/design/twists.jsonare xAIgrok-4.6replies to the app's real prompts, generated on Oct 25, 2026 through/v1/responseswith the request the app's Model API mode sends: the Director and Character prompt, the Instance Prompt, and the wake, assembled by the app's own code. Every reply finished within the app's 30s request timeout and wasn't truncated. Ideator and I chose them by hand for quality from all such replies and used them verbatim. A line keeps the Behavior its reply proposed when the Character's manifest declares it. A built-in Behavior (react, sit, jump) is dropped, so that line plays talk.make-landing-page.pyfails on an unshipped Character, an undeclared Behavior, a missing or empty line, a missing wake, or a prompt that doesn't match exactly one README row.Why
#1538 wants visitors to learn they can add their own layer on top of a Character's personality. #1550 asks for a small toy that shows what an Instance Prompt does to a fidget. The label says the examples were pre-generated with the real prompts, so the lines come from a real model on those prompts.
How to test
python3 scripts/make-landing-page.py --self-checkpasses.node --test tests/landing-*.test.jspasses 107/107. In headless Chromium it clicks every Character and prompt pair in a narrow window and at 1280px under reduced motion. It checks that the bubble never resizes, that nothing below it moves, that the live region carries each line, and that the selected pill passes 4.5:1.bash scripts/assemble-site.sh, open "Give it your own twist" and click through the pills. At 390px the sprite should stay put (it moved by up to 24.92px before). Tab through the pills and links, and each should show a focus ring.Closes #1550
— Cursor agent (Coder), on @omesser's behalf.