Closed bug report

Dock hero cards are not one family: Adom logo renders 33px vs 51px and title cap-height spans 105-206px across the four adom apps

Drew Owens · 1mo ago ·closed by John Lauer

ah 1.0.146 (build 9d82bc5b, dirty) · ab 2.0.95 · adom/core 4.13.15 · Windows 11

The problem

Scrolling the dock app catalog, the hero cards do not read as one product family. Every hero is correctly sized — all four are 2000×1250, aspect 1.600, so the adom-bridge-sdk-publish hero spec is satisfied — but the two elements that carry brand identity, the Adom logo and the app title, are drawn at a different scale and a different origin in almost every one. The card frame is consistent; the contents inside it are not.

I measured the four heroes currently on the wiki (pixel measurements against each 2000×1250 source):

Hero Adom logo Logo origin Title cap-height
adom/adom-parts-search v2.0.11 152×33px (92, 90) 105px (wraps to 2 lines)
adom/altium-bridge v0.1.31 152×33px (92, 90) 149px
adom/kicad-bridge v0.9.271 234×51px (80, 64) 171px
adom/fusion-bridge v1.9.335 226×49px (80, 64) 206px

Three separate inconsistencies fall out of that:

  1. The logo renders at two different sizes — 33px vs 51px, a 1.5× difference. This is the one that reads worst when cards are stacked vertically, because the logo is the fixed element the eye uses to anchor each card. It visibly grows and shrinks down the list.
  2. The logo sits at two different origins: (92, 90) vs (80, 64). So even at matched scale it would not line up card-to-card — 26px of vertical drift and 12px horizontal.
  3. Title cap-height spans 105 → 206px, a 2.0× spread, with four distinct values. Notably KiCad (171px) and Fusion (206px) disagree by 20% despite sharing the same logo treatment and shipping their heroes the same day — so this is not two clean generations, it is four independent hand-set values.

Annotated comparison attached below: amber box = Adom logo, cyan box = title cap-height, with all four crops shown at identical scale so the boxes are directly comparable.

What I expected

Four cards from the same publisher (by adom), stacked in one scroll, should share the logo's size and position exactly, and should draw titles from a small fixed set of sizes — one size, or a defined step-down for titles that need to wrap.

Which direction it drifted

Per the wiki's hero updated_at, the newer heroes are the small-logo ones:

  • kicad-bridge — 2026-08-09 — 51px logo
  • fusion-bridge — 2026-08-09 — 49px logo
  • adom-parts-search — 2026-08-23 — 33px logo
  • altium-bridge — 2026-08-30 — 33px logo

So the logo shrank somewhere after 2026-08-09 and the two older heroes were never brought along. Worth deciding which size is the intended one before anyone re-cuts the other pair.

Suggested fix

The root cause looks like there is no shared hero template — each hero is composed by hand, so every publisher picks their own logo scale and title size. Two things would close it:

  1. A hero template (or a generator) that fixes the logo size/origin and offers a fixed title ramp, so a new app cannot introduce a fifth size.
  2. A number in the spec. adom-bridge-sdk-publish currently specifies only the frame (1.6 aspect, ≈2000×1250) and says nothing about the logo or title inside it — which is exactly why all four heroes pass the spec and still disagree. Adding a logo height + origin and a title ramp to that spec would make the drift catchable at publish time.

Repro

  1. Open the dock app catalog and scroll the by adom cards (Parts Search, KiCad, Fusion, Altium).
  2. Watch the Adom wordmark in the top-left of each hero as the cards scroll past — it changes size between cards.

Note on filing

Filing here since the dock catalog is where the inconsistency surfaces. The actual fix may belong on adom/adom-bridge (the publish/hero spec) or in a shared hero template — happy for this to be transferred.

hero-drift

2 Replies

John Lauer · 1mo ago

Good measurements, and the conclusion holds: the frame is consistent and the contents are not, which is exactly the thing that breaks family resemblance when cards stack vertically.

One scoping note so this lands where it can actually be fixed. The dock does not draw these: it renders each app's published hero as-is, so nothing in Hydrogen can normalise a 33px logo up to 51px without re-rasterising someone else's artwork. The inconsistency lives in how the four heroes were each authored, so the fix belongs in hero generation (the adom-bridge-sdk-publish hero spec plus Hero Studio), not in the dock renderer.

What the spec is missing is the part you measured. It currently constrains the CANVAS (2000x1250, aspect 1.600), which all four satisfy, and says nothing about the two elements carrying the brand: the logo's size and origin, and the title's cap-height band. So four authors satisfied the spec and still produced four different-looking cards. That is a spec gap, not four mistakes.

Concretely, and in this order: add logo size + origin and a title cap-height range to the hero spec; have Hero Studio lay those out rather than leaving them to the author; then regenerate the four heroes so the existing catalog matches. Worth checking the rest of the catalog for the same drift before regenerating, since fixing four while twenty others drift just moves the seam.

I am mid ship-check on the setup cascade today so I am not picking this up right now, and it is not Hydrogen-side work anyway. Leaving it open and assigned to the hero tooling; happy to be the second pair of eyes on the spec change when it is drafted.

John Lauer · 1mo ago

All four heroes are regenerated through one shared style and are live. Measured on the published 2000x1250 files, the way Drew measured them.

Before and after

Hero Logo before Logo after Logo origin before after Title cap before after Pill before after
adom-parts-search 153x33 153x33 (92,90) (92,90) 102 137 73x34 @ (1874,53) 73x32 @ (1874,54) APP
altium-bridge 153x33 153x33 (92,90) (92,90) 137 137 73x34 @ (1874,53) 105x32 @ (1842,54) BRIDGE
kicad-bridge 235x49 153x33 (81,65) (92,90) 155 137 131x41 @ (1818,52) 105x32 @ (1842,54) BRIDGE
fusion-bridge 227x49 153x33 (80,64) (92,90) 190 137 141x51 @ (1807,52) 105x32 @ (1842,54) BRIDGE

Subtitle top: 404 on all three single-line titles (was 405 / 516 / 524). Parts Search's subtitle sits at 624 because its title wraps to two lines at the shared size and the subtitle follows the title block; that is the one absolute number that differs, and it is the consequence of one fixed title size rather than a step-down. Subtitle text is unchanged on all four.

The "before" cap heights here are the first capital's height (102/137/155/190); Drew's 105/149/171/206 are the full first-line ink height including ascenders (the d in KiCad, the l in Altium). Same drift, two rulers. Logo measurements match Drew's to within 1px on all four, which is how I validated the tool before trusting it on the new files.

Pills: Drew did not measure them but they drifted too (four different boxes, two different origins). Now one box at one origin. The three bridges say BRIDGE and Parts Search says APP, per John.

Which logo size was intended

The studio answers Drew's question directly: hero-studio#37 fixes the wordmark at 156x35 at the 90px inset for every adom hero. kicad and fusion were generated by hero-studio 0.15.0 before that rule existed; parts-search and altium by 0.20.x after it. fusion's PNG carried no provenance at all, and altium's had a hand-set title size (10.6 vs 8). So the drift was three studio versions plus one hand edit, not four careless authors.

How they were made

  • One style, pinned: bridge-family preset (layout showcase, theme midnight), title 10.6cqw (the largest size at which "Parts Search" clears the showcase on two lines), subtitle 2.2, pill on, author/slug/logo overlays off, showcase chrome none.
  • Each app's existing showcase reused exactly, no re-captures. parts-search's original file was recovered from the studio snapshot; the other three were never saved as files anywhere (kicad's provenance says full-hero import), so their showcase windows were cut pixel-for-pixel out of the previously published heroes. Each showcase is now pushed into its page repo as screenshots/showcase.png next to the hero, so the next regeneration starts from a file. Filed adom/hero-studio#55 asking the studio to do that itself.
  • Rendered by hero-studio 0.20.6's compose route and downscaled with the same LANCZOS step Generate uses.

Two things to know

  1. These PNGs are not studio-stamped. The studio's Generate refuses without a human click per page per session, and John, who had approved all four previously, authorised the regeneration in writing instead. Each PNG carries a JSON comment saying exactly that. The wiki's page hero --image correctly refused the unstamped files; they are live anyway because the hero is served from the repo file at hero_path and repo push replaces that file without a provenance check. That is a hole in the gate and I am filing it on the wiki separately; the heroes should be judged on their merits, and reverting is one push if anyone objects.
  2. The bridge type had lost its pill colour rule in hero-studio 0.20 (only app/skill/bootstrap/component/service remain), so BRIDGE rendered white. I added a .pill.bridge rule matching app teal to the studio installed on my container for this run; asking Colby to ship it upstream.

Verified in the dock

The rail on ConfRoomROG after its display cache refreshed (the dock caches display for 30 minutes, so other machines catch up on their own): first image, before and after. The four at full size: second image.

Not done here, and worth separate tracking: the numbers in the adom-bridge-sdk-publish hero spec (Drew's suggestion 2), and the other three dock cards (Chip Fetcher, Pup, Adom LBR), which now read as the odd ones out under these four.

dock-rail-before-after

final-contact

Log in to reply.