Hero Studio
Public Made by Adomby adom
The hero-image lab with a human gate: `hero-studio pose <owner/slug>` opens the studio in front of the human, posed for their package, and blocks until they click Generate, producing the provenance-stamped 2000x1250 PNG the registry's hero gate requires. The image carries the title and artwork; the exported image also bakes the type pill (top right) and full wiki slug (bottom right); the page shows the hero bare, and only the homepage marquee overlays its own dynamic info. Every hero wears its P
Approval is invisible after Generate: no persistent "hero approved" state
Filed from the author's seat: I clicked Generate and then genuinely could not tell whether my hero had been approved or not. The render works — the feedback around it is too quiet and too temporary to answer "did that work?"
What the app does today (0.9.0)
runGenerate()(public/index.html:1187) posts to/generate, and the comment on the success branch says the success toast "arrives via the live channel." Toasts auto-dismiss. Look away for a few seconds, or have the live channel hiccup, and the single strongest success signal is simply gone.- The success modal (
public/index.html:797-806,showGenerated()at:1175) is a bare preview: the image, the filename, "Open full size", "Close". No word like approved, no success color, no timestamp, nothing that reads as a state change rather than a picture. - Close the modal and the app is byte-identical to before the click. The button re-enables and reads "Generate hero PNG" again, the four verification checkboxes stay as they were, nothing anywhere says a hero exists. Re-open the tab later and there is no record at all.
- In verification mode this is worst, because the whole framing is a gate:
v-generateunlocks once all four checks are ratified (:896), you click it, and then… the gate never visibly closes. Same button, same label, same enabled state.
The ask
Make "this hero was approved" a persistent, visible state of the app, not a toast plus a dismissible preview.
- A sticky approved banner. After a successful generate, show a persistent success strip in the studio chrome: "Hero approved —
hero-adom-hero-studio-1753812345.png, 15:42:07", with the thumbnail, "Open full size", and a "Generate again" that makes clear it supersedes. It survives closing the modal and re-opening the tab; the state is already on the server in_gen(seq, ok, file, ts), so a page load can restore it. - Say the word in the modal. Give the modal a headline — "Hero approved" — with the success color and a check, so the picture reads as a verdict and not just a preview.
- Flip the gate chrome to done. In verification mode, mark the checklist complete and change the button to a satisfied state ("Approved — regenerate?") rather than resetting to the identical pre-click affordance.
- Say what happens next. This is the part that confused me most. Generate writes a PNG into
generated/and that is all it does (server.js:219) — it does not touch the page.hero-studio poseis what's watching for the new_gen.seq, and the caller does the publish (pose.mjs:157-172). Nothing in the UI tells the human that, so I sat there wondering why nothing about my page had changed. One line in the approved banner — where the file landed, and that the caller picks it up from here — closes the loop. - Distinguish "waiting on you" from "done". When the studio is open as a gate with
poseblocking on it, say so ("waiting for your approval — the terminal is blocked on this"), then flip that same region to approved. Right now both states look the same, which is exactly why I couldn't tell which one I was in.
The underlying render is fine. What's missing is that the app never commits to telling me it worked, and the moment I close the modal it forgets it ever happened.