Parent skill: adom-wiki-skillpack

The hero image — generating it, and keeping it linked

Every wiki page needs a hero: the 16:10 dark-mode billboard the page header, the landing-grid card, the Hydrogen Desktop installer, the homepage, and the adom-screensaver all reuse. A page without one shows a placeholder icon and reads as unfinished.

Generating it

Use the adom-wiki-hero-image package — it's a declared dependency of this pack, so adompkg install adom-wiki-skillpack pulls it automatically. It bundles the brand fonts + ADOM wordmark + the render pipeline, so it works standalone with no gallia dependency. Invoke it (the adom-wiki-hero / adom-wiki-hero-image skill) to render screenshots/hero.png: the app NAME as the headline, a one-line value prop, the teal→blue→purple accent, and one gorgeous shot of the real UI as a floating Windows-style webview window. Readable in one second. (Faux app windows use Windows min/max/close controls, never macOS dots.) For Family children, also carry the family chip (e.g. ADOM-USB · SNIFFER).

The hero shot: laptop width, full toolbars OPEN (show the sophistication)

The single most important choice is the screenshot. For an app, capture the laptop-browser view with every toolbar / studio / HUD / layers panel OPEN — the busy, sophisticated state, not the default empty one. A loaded part with the control panel deployed tells the viewer "this tool is capable" at a glance; a bare canvas reads as a toy. Capture at ~1440px wide (deviceScaleFactor 2 for crispness) with real content loaded, and click the panel(s) open before the shot. (Lesson from the EDA apps, 2026-06-21: John explicitly wanted the full-toolbar laptop view so users "understand how sophisticated the apps have gotten.")

The subhead carries the VALUE PROP, not a restatement of the name

The headline can be a punchy phrase; the subhead must be the value proposition — one line on what the app is for and its differentiator (e.g. "preview the InstaPCB 300µm solder-paste dots no other tool shows"). Don't waste the subhead paraphrasing the title. Keep it to ~1 line so the composer doesn't truncate it.

TODO (pack maintainers): we depend on adom-wiki-hero-image rather than folding its content in. Revisit whether to inline it here later.

The hero goes in page.json ONLY — never in the README body

The hero is set via page.jsonhero.path and the wiki renders it at the top of the page for you. Do NOT also embed it in the README (![...](.../hero.png)) — that shows the human the same image twice. README images are other screenshots. This pairs with the unlink bug below: the hero's home is page.json, full stop. → wiki-readme.

⚠️ The recurring bug: the hero gets UNLINKED on publish

This is the #1 hero problem and it looks like the image was deleted — it wasn't. The mechanism:

  • The page-header hero renders from the DB hero_type / hero_path, which the wiki indexer derives from the repo's page.jsonhero:{type,path}.
  • adompkg publish OVERWRITES page.json in the repo with the package manifest, which has no hero field. So every publish silently drops the hero reference. The PNG file is still in the repo at screenshots/hero.png; only the pointer in page.json is gone.

The same overwrite also resets the page title and brief to the package values.

The fix: push a complete page.json LAST

Order every publish so the complete page.json is the final commit:

  1. adompkg publish (registry/tarball) — this clobbers page.json in the repo.
  2. THEN push a complete page.json to POST /api/v1/pages/<slug>/files as the last step — including hero:{type:"image",path:"screenshots/hero.png"}, plus title, brief, visibility, tags. This re-indexes and re-links the hero (and restores title/brief).
  3. Confirm: GET /api/v1/pages/<slug> shows hero_type:"image", hero_path:"screenshots/hero.png".
  4. Open the page in pup and confirm the hero renders (see wiki-publish-safely).

If a hero "disappeared" on an existing page, you don't need to regenerate it — just re-push a complete page.json with the hero block and verify hero_path.

Checklist

  • screenshots/hero.png exists in the repo and is listed in package.json files[]
  • page.json has the hero block
  • Complete page.json pushed AFTER adompkg publish
  • GET /pages/<slug>hero_path set
  • Hero visually confirmed in pup