Brand Coherence Audit — BRAND.md

A real report, written by 59 · Brand Coherence Audit, run against this repo — dogfood output, committed unedited. This is the artifact every brief ends in: findings that cite their evidence, ranked by severity, with a fix sketch each.

Read-only judgment of whether Goal Prompts reads as one deliberate thing across logo, favicon, OG cards, icons, illustration, and graphic DNA — judged from what ships in template.html, build.py, studio.html, vitals.html, scripts/og.py, and the asset dirs (icons/, og/), not from any brand deck.

Headline: the identity is genuinely coherent where it counts — a developer-native, terminal-toned look with a real ownable signature (the family-color bar motif and the → REPORT.md deliverable glyph running from logo → hero spectrum → card borders → OG cards). It drifts in the mechanical seams: a corner-radius token that's 12px on the marketing pages and 10px on the tools, a logo that's 24px here / 22px there, a "GP" tab icon that shares nothing with the bar logo, and OG cards rendered in DejaVu instead of the site's Archivo/Plex. Consistency beats beauty — these are unify/define fixes, not redesigns.

Backlog reconciliation (2026-07-09). Most of this audit was resolved by the brand redesign that followed it. Dispositions: B1 (tab icon ≠ bar mark) — DONE: the favicon is now the 4-bar mark (same geometry as BRAND_MARK). B2 (--radius 12 vs 10 split) — DONE: radius is one token in tokens.css, shared by all four surfaces. B3 (OG cards in DejaVu) — DONE: scripts/og.py now renders in Schibsted Grotesk + IBM Plex. B4 (radius sprawl) — DONE: a --r-sm / --r-md / --r-pill scale now exists. B5 (logo 24 vs 22 drift) — FIXED this pass: the Studio/Vitals top-nav marks were bumped 22→24 to match nav/detail. B6 (no chosen icon set) — DEFERRED: the Unicode-glyph language is documented in CLAUDE.md; blessing or replacing it is a design decision. See FIXLOG.md.


1 · The identity, as shipped (one honest paragraph)

Goal Prompts ships as a dark, IDE-flavored catalog for developers: an ink-black surface (--ink #14181E), monospaced labels and filenames (IBM Plex Mono), a four-bar equalizer mark whose colors are drawn straight from a 17-family color taxonomy, and a recurring → FILENAME.md motif that literally renders the thing you get. The tone — severity chips, "evidence not vibes," curl | sh, .md reports at your repo root — matches the copy's claim ("turn your agent into a senior code auditor") tightly: it looks technical, rigorous, and command-line-native, and it means to. It reads as one product about 90% of the time; the other 10% is small mechanical drift between the marketing pages and the two standalone tools, and between the live site and its generated share images.


2 · Asset census

AssetWhere / countSourceDrift
Wordmark + bar mark (4 rects, amber/green/blue/purple, rx1.7)inline SVG on 4 surfaces (BRAND_MARK build.py:300; template:326, studio:188, vitals:95)hand-authored SVG, viewBox 0 0 24 2424px w/ .mark class on landing+detail vs 22px without it on Studio+Vitals
Favicon — "GP" monogram, amber text on dark square (rx13)data-URI SVG on all 4 surfaces (FAVICON build.py:307)hand-authoredinternally consistent, but unrelated to the bar mark
PWA iconsicons/icon-192.png, icon-512.png (raster)rastermark unverifiable from source — must be pinned to one canonical mark
Default OGog.png (root); used by landing, Studio, playbooksrasterone static card
Per-brief OGgenerated by scripts/og.py → family-color left bar + big mono id + title + FAMILY -> OUTPUT.md · domainPillowrenders in DejaVu Sans / DejaVu Mono, not Archivo/Plex (og.py:57–90); uses ASCII -> not the site's
Search iconone inline stroke SVG magnifier (template:467)hand-authoredthe only functional UI icon
UI "icons"Unicode glyphs → ▸ ✓ × ↗ (content:"→ " ×5, ×2, chevrons)system/mono fontrender varies by OS/font; no chosen icon set
Hero illustration.art/.report "BUGS.md" mockups (CSS/HTML)in-codeon-brand — mirrors the real report shape

3 · Findings (ranked by user-facing visibility)

B1 — The tab/app icon and the logo are two different identities (most-seen)

Every header shows the 4-bar equalizer; every browser tab shows a "GP" monogram (FAVICON, build.py:307). They share a background color and nothing else — no bars, no shape language. The favicon and PWA icons (icons/icon-192/512.png) are the single most-viewed brand touchpoint (tabs, bookmarks, installed-app, home screen), and they don't echo the mark users see on the site. Unify: rebuild the favicon + PWA icons from the bar mark (or a 1–2 bar reduction of it) so tab and header agree.

B2 — --radius is 12px on marketing, 10px on tools (systemic, whole-surface)

--radius:12px (template.html:32, build.py:323) vs --radius:10px (studio.html:31, vitals.html:29). Because nearly every card, button, panel, and input uses var(--radius) (×23), every rounded corner on Studio and Vitals is 2px sharper than the same component on the landing and detail pages. It's invisible per-element and obvious side-by-side — the tools feel subtly like a different product. Unify: one --radius value everywhere.

B3 — OG cards render in the wrong typefaces

scripts/og.py draws share cards with DejaVuSans-Bold / DejaVuSansMono (og.py:63–90) — PIL's bundled fonts — while the site ships Archivo + IBM Plex Mono. So the first impression on Twitter/Slack/LinkedIn is set in fonts the site never uses, and the same card swaps the brand's for an ASCII ->. The card composition is beautifully on-brand (family bar, mono id, FAMILY -> OUTPUT.md); only the fonts betray it. Unify: point og.py at fonts/archivo-latin-var.woff2-equivalent TTFs and use .

B4 — Radius sprawl: ~12 distinct corner radii, buttons included

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16px + 999px + 50%. Even the button family disagrees: .btn 10px, .nav-cta 9px, .copy/.iconbtn/.cc 8px. There's no rounding signature — a look is partly a consistent radius, and this one is a smear. Unify: a 3-step radius set (sm 8 / md 12 / pill 999 + 50% for dots) mapped over all values.

B5 — Logo size/markup drift (minor)

The mark is 24×24 with the .mark class (flex:none) on landing+detail but 22×22 without .mark on Studio+Vitals (§2). Same geometry, inconsistent render size and flex behavior. Unify: one BRAND_MARK include on all four surfaces (Studio/Vitals currently hand-copy their own <svg>).

B6 — No icon set was ever chosen (define gap)

One SVG icon (search) + Unicode glyphs (→ ▸ ✓ × ↗) carry the whole UI. For a terminal-aesthetic dev tool this is defensible and even on-brand — but the glyphs render differently across OS/fonts, and there's no defined set to grow into. Define: either bless the Unicode set explicitly (document the exact glyphs + a mono fallback) or adopt one lightweight stroke set matched to the search icon's weight. Don't add a second icon style ad hoc.

What's already coherent (protect it)

  • The bar motif is a real ownable through-line: nav logo (4 bars) → hero

.spectrum (17 bars, template:347) → every card's border-left:3px family color → OG card's left bar (og.py:61) → the 17-family palette. Swap the wordmark and this still identifies the product. This is the brand's best asset — keep everything pointed at it.

  • The → REPORT.md motif (.out::before, .fname::before, OG footer) is

distinctive and states the value prop in one glyph. Ownable.

  • Shadow DNA is a single signature — 3 shadows, all

0 20–30px 50–70px -30–40px rgba(0,0,0,.8–.9), used sparingly on report mockups; elevation is otherwise borders + surface tint. Coherent and restrained.

  • Gradient DNA — subtle panel linears + accent-colored hero radial glows —

is consistent across surfaces.

  • Personality match is strong: dark/mono/terminal tone ↔ "senior code

auditor / evidence not vibes" copy. No tonal whiplash.


4 · The coherence kit (the decisions that make it one thing)

  • One mark, everywhere. Rebuild favicon + icons/*.png from the bar mark

so tab, home-screen, and header agree (B1). Retire the standalone "GP" monogram or make it a bar-derived lockup.

  • One --radius. Pick 12 (or 10) and set it in all four :roots (B2).
  • A 3-step radius scale (--r-sm 8 / --r-md 12 / --r-pill 999 + 50%),

mapped over the ~12 current values (B4); align the button family to one.

  • OG in brand fonts. Ship Archivo + Plex TTFs to og.py; use (B3).
  • One BRAND_MARK include consumed by Studio/Vitals too — kill the

hand-copied <svg> variants and the 24/22 size split (B5).

  • Bless the icon language (B6): document the Unicode glyph set + mono

fallback, or adopt one stroke set at the search icon's weight — pick one, write it down, don't mix.

  • Codify the two ownable signatures — the family bar and the

→ FILE.md motif — as named, protected brand elements so future surfaces (emails, sponsored playbooks, partner lockups) inherit them instead of reinventing a look.

Ranked by surface area: B1 (favicon/app icon) and B2 (radius) touch the most eyeballs for the least work; B3 (OG fonts) fixes every social preview; the rest is consolidation.


Report only — judged from shipped files, nothing edited. The two highest- visibility, lowest-effort fixes are B1 (make the tab icon echo the bar logo) and B2 (one --radius across all four surfaces). Which fixes should I make?