Brand & style guide
Rocky look same everywhere: plain gray rock, big teal eyes, two arms, two legs, little white-and-teal sneakers. Always a full outfit! Outfit tell you verdict or topic. Rocky stays Rocky!

Character lock (never change)
- Plain dark gray rock body. No stripes, ever. No bands, no patterns.
- Always wearing a full outfit. Never bare. Faces-only emojis are the one exception (head only).
- Big teal eyes with white highlights, small friendly mouth.
- Two arms, two legs, little white-and-teal sneakers.
- Hats sit on his head. No chin straps (hard hat included).
- Verdict colors: Real = green · Half-real = yellow/amber · Vapor = red · Testing = teal / white lab coat.
- Topic costumes match the repo's category (gallery below).
- Holiday & sports costumes: on hold. The outfit switcher and overlays were removed on 2026-10-17. If they come back: real art only, plain colors, no team logos, no hand gestures.
- Retired / rejected: stripes, five spider legs, the hand-drawn SVG Rocky, Pebble Bot, Rocky Crab, chin straps, the old stamp badge, the foam finger, logo options C1 and D2.
Logo system (locked 2026-10-17)

C2 · Header wordmark
Green “Rocky Tested”, the “o” is Rocky’s face in goggles. Site header and banners. Min height 24 px.
/img/logo/rocky-tested-wordmark-*.webp
D1 · Badge lockup
Lab-coat Rocky in a circle + ROCKY / TESTED. Primary lockup for social cards, decks, stickers. Min height 48 px.
/img/logo/rocky-tested-badge-*.webp · SVGD1 circle · Icon
The circle alone. Favicon, app icons, X avatar. Min size 16 px (favicon), 32 px elsewhere.
/img/logo/rocky-tested-icon-*.webpClear space & size
- Clear space: keep empty space around the logo equal to the height of Rocky’s face in the “o” (C2) or ¼ of the circle’s diameter (D1). No text or art inside that zone.
- Minimum size: C2 wordmark 24 px tall on screen · D1 badge 48 px tall · circle icon 16 px (favicon only), 32 px everywhere else.
- Backgrounds: cream, white or mint. On busy or dark backgrounds, put the logo on a cream rounded card.

Do: use the files as-is
Scale evenly, on cream or white.

Don’t: recolor it
The wordmark stays green; Rocky stays gray.

Don’t: stretch or squash
Keep the proportions.
Don’t: use retired logos
Not C1, not D2, not the old stamp badge, not the amaze face + text wordmark.
Verdict outfits

Green hoodie + cap, thumbs up
rocky-real-*.webp
Yellow vest + hard hat, magnifier
rocky-half-real-*.webp
Red hazmat suit, unimpressed
rocky-vapor-*.webp
White lab coat + goggles, flask
rocky-testing-*.webp
Navy cap, teal tee, clipboard. Home hero + default.
rocky-ship-it-*.webpFaces (reaction emojis)
Head-only reactions for small spots: empty states (thinking / curious), errors and 404 (facepalm / shook), claim results (amaze / side eye / nope). Files: rocky-face-NAME-256|96|48.webp

amaze!
It's real. Big win.

proud
Author shipped a fix / Rocky's fix merged

curious
New submission, empty states

shook
Surprise result, 404

thinking
Measuring, waiting on data

side eye
Claim is stretched (half-real rows)

mind blown
Way better than claimed

nope
Claim failed (vapor rows)

crying laughing
Friendly fun, never at a person

facepalm
Errors, broken links, 404

love it
Community favorites, thank-yous

sus
Recycled hype, unverified claims
Topic outfits
Each category gets a costume that says what the repo does. On review pages the topic Rocky is the big picture, with a small Testing badge.

Vision
beret, glasses, camcorder
rocky-topic-vision
Phishing / email
bucket hat, fishing vest, rod with an envelope
rocky-topic-phishing
CAD
blue work shirt, pencil, blueprint
rocky-topic-cad
Trading bots
navy suit, candlestick chart
rocky-topic-trading-bots
Coding agents
teal hoodie, headphones, laptop
rocky-topic-coding-agents
Voice / audio
denim jacket, microphone
rocky-topic-voice-audio
Security
detective coat, deerstalker, magnifier
rocky-topic-security
Robotics
coveralls, wrench, robot buddy
rocky-topic-robotics
AI models
graduation gown, diploma
rocky-topic-ai-models
MCP servers
green polo, lanyard, cables
rocky-topic-mcp-servers
Prompts
wizard hat and robe, glowing scroll
rocky-topic-prompts
Speed claims
red racing suit, stopwatch, helmet
rocky-topic-speed-claimsDo & don't

Do: Use the approved art as-is
Plain gray rock, full outfit, sneakers, big teal eyes.

Do: Match the outfit to the verdict or topic
Security repo? Detective Rocky. Verdict? Verdict outfit.

Do: Use faces as tiny reactions
Claim rows, empty states, 404s, footers.

Don’t: Recolor his body or skin
Rocky is always plain dark gray. Only the outfit changes color.

Don’t: Stretch, squash or tilt the art
Keep proportions. Scale evenly only.

Don’t: Leave him 'naked' or add stripes
No stripes ever, no bare body. Always a full outfit. No chin straps on hats.
Colors
Real Green
#2E9D4FREAL hoodie, stamps
Half-real Amber
#E0A500HALF-REAL vest + hard hat
Vapor Red
#D63031VAPOR hazmat suit
Rocky Teal
#0F8B8DEyes, sneakers, TESTING, links
Safety Yellow
#F5B800Buttons, wordmark
Rock Gray
#4A4744Rocky's body (plain, no stripes)
Ink
#26221FOutlines, text, chunky shadows
Paper
#FFFBF0Background
Mint
#D7F2F2Pills, table headers, testing
Type
Fredoka 600/700
Headlines, buttons, stamps
Nunito 400/700/800
Body text. Both are self-hosted (OFL).
Verdict cards & stamps

REAL
Works as claimed. The big claim holds within about 20%.
"Amaze, amaze, amaze!"

HALF-REAL
It works, but the claim is stretched or it breaks easily.
"Still good! Not 10x. Question?"

VAPOR
Won't install, or the main claim doesn't hold up.
"Rocky find… smoke. Rocky file issue to help."

TESTING
Rocky is in the lab. No verdict yet, no guessing.
"Goggles on. Flask bubbling."
Results charts
Lab-notebook readout style: inline SVG built at page-build time, verdict colors, accessible, no JavaScript. Four types, all fed only by real run data.
| Group | Series | Value (skills) |
|---|---|---|
| Skills | Claimed | 817 |
| Skills | Found | 818 |
| Row | Truth | Tool A | Tool B |
|---|---|---|---|
| caught threat 1 | malicious | pass | fail |
| caught threat 2 | malicious | pass | pass |
| cleared clean 1 | clean | pass | fail |
| Item | Result | Detail |
|---|---|---|
| install | pass | ok |
| import | pass | ok |
| scanned PDF | fail | no text layer |
| claim run | testing | queued |
| Item | Value |
|---|---|
| Tool A | 8/8 |
| Tool B | 3/8 |
Full guide
# Rocky Tested: Brand & Style Guide v3 (2026-10-17)
## Who Rocky is
Rocky is a cute little rock alien engineer. He installs hyped repos, AI tools, models and MCP servers, measures what they really do, and tells the truth kindly. Duolingo-mascot energy: playful, warm, approachable, helpful instead of guilt-trippy.
**Motto:** "Rocky measure. Rocky tell truth. Rocky help fix."
## Character lock (approved 2026-10-17, never change)
- **Plain dark gray rock body.** No stripes, ever. No bands, no patterns.
- **Always wearing a full outfit.** Never bare. (Head-only reaction faces are the one exception.)
- **Big teal eyes** with white highlights and a small friendly mouth.
- **Two arms, two legs, little white-and-teal sneakers.**
- **Hats sit on his head with NO chin strap** (hard hat included).
- **Verdict colors:** Real = green · Half-real = yellow/amber · Vapor = red · Testing = teal / white lab coat.
- **Topic costumes** match the repo's category (list below).
- **Holiday & sports costumes: on hold.** The header outfit switcher and the pumpkin/bats/foam-finger overlays were removed on 2026-10-17 (the foam finger read as a rude gesture). If costumes return: real generated art only, plain colors, no team logos, no hand gestures.
- **Rejected / retired:** stripes, five spider legs, the old hand-drawn SVG Rocky, the older generated sheets with stripes, Pebble Bot, Rocky Crab, chin straps, the stamp badge, the foam finger.
## Source art
Approved sheets live in `brand/source-art/` (`verdict-outfits.jpg`, `faces.jpg`, `topic-outfits-1.jpg`, `topic-outfits-2.jpg`).
`sneakers-reference.jpg` is an older sheet with stripes: **reference only, never on the site.**
`scripts/slice_art.py` cuts them into transparent assets: `brand/assets/*.png` masters and `static/img/rocky/rocky-<name>-<size>.webp`.
Contact sheet: `brand/contact-sheet.png`. When making new art, pass the approved sheets as reference images and repeat the character lock in the prompt.
## Verdict outfits (`rocky-<name>-512|256|128.webp`)
| Pose | Outfit | Use |
|---|---|---|
| REAL (`real`) | green hoodie + green cap, thumbs up | REAL verdict stamp, real cards |
| HALF-REAL (`half-real`) | yellow safety vest + hard hat (no chin strap), magnifier | HALF-REAL verdict, Recycle-o-meter |
| VAPOR (`vapor`) | red hazmat suit, unimpressed, puff of smoke | VAPOR verdict |
| TESTING (`testing`) | white lab coat + goggles, bubbling flask | in-progress reviews, request form, og:image |
| SHIP IT (`ship-it`) | navy cap, teal tee, clipboard | home hero, default, holiday costume base |
## Faces (`rocky-face-<name>-256|96|48.webp`)
amaze! · proud · curious · shook · thinking · side eye · mind blown · nope · crying laughing · facepalm · love it · sus
- Claim results: amaze (holds) / side-eye (stretched) / nope (failed) / thinking (results coming)
- Empty states: thinking or curious · Errors and 404: facepalm or shook · Recycled hype: sus · Thank-yous: love it
## Topic outfits (`rocky-topic-<name>-512|256|128.webp`)
| Topic | Outfit | Site category |
|---|---|---|
| vision | beret, glasses, camcorder | media-gen |
| phishing | bucket hat, fishing vest, rod with an envelope | mcp-servers/comms, email tools |
| cad | blue shirt, pencil, blueprint | cad-3d |
| trading-bots | navy suit, chart | trading-bots |
| coding-agents | teal hoodie, headphones, laptop | coding-agents |
| voice-audio | denim jacket, mic | media-gen/voice, media-gen/music |
| security | detective coat + deerstalker, magnifier | data-rag (and security repos) |
| robotics | coveralls, wrench, robot buddy | agent-frameworks |
| ai-models | graduation gown, diploma | local-models |
| mcp-servers | green polo, lanyard, cables | mcp-servers |
| prompts | wizard hat + robe, glowing scroll | "magic prompt" reviews |
| speed-claims | red racing suit, stopwatch, helmet | bot-ops, speed/benchmark claims |
A review page picks the topic for its category (`TOPIC_FOR` in `scripts/build.py`). **Which art is the big figure follows the verdict-first rule below.**
## Verdict-first mascot rule (v4, 2026-10-18; replaces "topic Rocky big, verdict tiny")
**Problem it fixes:** a topic costume (e.g. the graduation gown) looked like success whatever the verdict, and only the small inset changed.
**Rule:** the big figure on a review page, stat card and share image must say the verdict at a glance. Topic tells *what kind of repo*; verdict tells *how it went*. Both live in ONE figure:
- **Outfit = topic** (gown, hoodie, racing suit…), **trim, props, pose and face = verdict**.
- **REAL:** proud big smile, sparkling eyes, standing tall, one arm thumbs-up, topic prop held high and clearly working, a small green ✓ pin on the outfit, green accent trim, a few green sparkles. Panel tint: mint-green.
- **HALF-REAL:** shrug with palms up, one eyebrow raised, lopsided half-smile, topic prop working but patched (tape, a crack, a slow-looking stopwatch), a yellow "?" sticky note on the prop, amber accent trim. Panel tint: soft yellow.
- **VAPOR:** slumped and deflated, flat unimpressed mouth, topic prop broken and puffing a small gray smoke cloud, a red ✕ sticky note, red accent trim. Never crying, angry or mocking. Panel tint: soft red.
- **TESTING:** topic outfit plus goggles pushed up and a bubbling flask (or the lab-coat pose). Panel tint: mint.
- No text, letters or logos on the art (the stamp next to it carries the word). The character lock above still applies to every variant.
- **Files:** `static/img/rocky/rocky-topic-<topic>-<real|half-real|vapor>-512|256|128.webp` (masters `brand/assets/topic-<topic>-<verdict>.png`, source sheets `brand/source-art/topic-verdict-<verdict>.jpg`, one 4×3 sheet of all 12 topics per verdict, sliced by `scripts/slice_art.py`).
- **Until that art exists** (interim, live now): the review page shows the **verdict pose as the big figure** on a verdict-tinted panel, with the topic Rocky as the small round badge. `scripts/review_v4.py` and `scripts/og_cards.py` switch to the combined art automatically as soon as a `rocky-topic-<topic>-<verdict>-512.webp` file exists.
## Holiday & sports costumes (on hold)
Removed from the site on 2026-10-17. `data/outfits.json` stays in the repo (and at `/v1/outfit`) but nothing reads it. Don't bring back overlays drawn in code.
## Logo system (locked 2026-10-17)
Source: `brand/source-art/logo-sheet-c-d.jpg` (options **C2** and **D1** were picked). Sliced by `scripts/logo_assets.py`.
- **C2, header wordmark:** green "Rocky Tested" where the "o" is Rocky's face in goggles. Used in the site header and the X banner. Files: `/img/logo/rocky-tested-wordmark-48|96|192.webp`, master `brand/assets/logo-c2-wordmark.png`. Alt text: "Rocky Tested".
- **D1, badge lockup:** lab-coat Rocky holding a flask in a circle, plus ROCKY / TESTED. Primary lockup for social cards, decks and stickers. Files: `/img/logo/rocky-tested-badge-120|240|480.webp`, `/logo-badge.svg` (raster-backed), master `brand/assets/logo-d1-badge.png`.
- **D1 circle, icon:** the circle alone. Used for the favicon, apple-touch icon, icon-192/512 (webmanifest) and the X profile photo. Files: `/img/logo/rocky-tested-icon-64|128|256|512.webp`, master `brand/assets/logo-d1-circle.png`.
- **Clear space:** the height of Rocky's face in the "o" (C2), or ¼ of the circle's diameter (D1). Nothing else goes inside that zone.
- **Minimum size:** C2 is 24 px tall. The D1 badge is 48 px tall. The circle icon is 16 px for the favicon only and 32 px everywhere else.
- **Backgrounds:** cream, white or mint. On busy or dark backgrounds, put the logo on a cream rounded card.
- **Don't:** recolor the logo, stretch or squash it, add effects, or rebuild it in code. Never use options **C1** or **D2**, the old stamp badge, or the old amaze-face-plus-text wordmark.
- Social preview: `/og/rocky-og.png` (1200×630, D1 lockup). X exports (not uploaded): `brand/x/rocky-x-profile-400.png` (D1 circle) and `brand/x/rocky-x-banner-1500x500.png` (C2 wordmark).
## Page patterns
- **Verdict cards:** four playing-card style cards (REAL, HALF-REAL, VAPOR, TESTING) with corner letters, the verdict pose and a one-line explainer.
- **Testing cards:** one topic Rocky, category chip, a plain-English explainer taken from the repo's README/description, live GitHub stats (stars, forks, open issues, last push, license, language) and an ETA line.
- **Review pages:** the topic Rocky is the big image with a small Testing badge. Before any results there's a single "Results coming. Here's what Rocky will measure" list, plus empty Sneak peek and Outputs slots.
- **ETAs** come from `data/queue.json`, are always labeled as estimates, and are shown in Central Time (or the visitor's own time zone). If nothing is planned the line says "Not scheduled yet".
- **Times** show as readable dates such as "Oct 15, 2026, 2:04 PM CT". Never show raw UTC strings.
## Color
| Name | Hex | Use |
|---|---|---|
| Real Green | #2E9D4F | REAL |
| Half-real Amber | #E0A500 | HALF-REAL |
| Vapor Red | #D63031 | VAPOR |
| Rocky Teal | #0F8B8D | eyes, sneakers, links, TESTING |
| Safety Yellow | #F5B800 | primary buttons, wordmark |
| Rock Gray | #4A4744 | Rocky's body (plain) |
| Ink | #26221F | outlines, text, chunky shadows |
| Paper | #FFFBF0 | background (with soft cream polka dots) |
| Mint | #D7F2F2 | pills, table headers, testing panels |
## Type
- **Fredoka 600/700**: headlines, buttons, stamps, nav
- **Nunito 400/700/800**: body
- Both are self-hosted woff2 files under `/fonts/` (SIL OFL).
## UI style
Chunky 4px ink outlines, 24px rounded corners, solid offset shadows (`0 6px 0 ink`), buttons that "press" on hover, tinted art panels behind Rocky (mint, green, amber, red by verdict). Gentle motion only: bob, wiggle on hover, pop-in. All motion is off under `prefers-reduced-motion`.
## Verdict badges
Rotated stamps with the matching verdict pose inside: **REAL** (green) · **HALF-REAL** (amber) · **VAPOR** (red) · **TESTING…** (teal). Never invent a verdict. Draft pages show TESTING and a "Testing in progress" notice.
## Voice
Gentle movie-Rocky broken English: short sentences, few articles, sincere and curious.
- Catchphrases: "Amaze, amaze, amaze!" (it's good) · "Question?" (a polite challenge) · "Rocky measure." · "Fist my bump." (thanks a contributor) · "Bad bad bad." (only for real security problems)
- Examples:
- "README say 10x faster. Rocky measure: 1.3x. Still good! Not 10x. Question?"
- "Install take 4 minutes. Work first try. Amaze, amaze, amaze!"
- "Rocky look for repo. Repo is 404. Rocky sad. Maybe link typo?"
- Plain-English mode is for tables, methods and legal: normal clear English, no Rocky-speak.
## Do
- Use the approved art as-is; pick the outfit that matches the verdict or topic.
- Use faces as small reactions (claim rows, empty states, 404).
- Credit authors by name on every review, and thank them.
- Separate the claim from the measurement and link the source of the claim.
- Offer a fix or file a helpful issue upstream. Use counts, not adjectives, for recycled hype.
- Keep everything rerunnable (Dockerfile, logs, clip).
## Don't
- Add stripes, show Rocky without an outfit, add chin straps, or bring back the spider legs, Pebble Bot or Rocky Crab.
- Recolor his body, or stretch, squash or skew the art.
- Mock people, call anyone a scammer, or speculate about motives.
- Publish a verdict before the test is finished.
- Do politics or take sides on teams beyond the playful color picker. No team logos, movie stills or other people's trademarks.
- Mention the operator's private projects, clients or family.
- Let sponsors or payment touch a verdict.
## Results charts — the "lab-notebook readout" (added 2026-10-17)
Every review's numbers are drawn as inline SVG at build time (scripts/charts.py), so there is no
JavaScript, no chart library, and nothing to load at runtime — it stays light enough for static hosting.
Look and feel:
- Drawn on faint graph-paper (the same cream dot/line grid as the site), inside a chunky 4px ink card
with the 6px ink drop-shadow, like a measurement jotted in Rocky's lab notebook.
- Bars and cells are filled in the verdict colors: green = the claim holds, amber = stretched, red = failed,
teal = still measuring, grey = a neutral baseline (no claim). Same palette as the stamps and outfits.
- Rounded bars, dashed gridlines, values labelled in Fredoka. Never more than a glance to read.
Four reusable chart types (set review["charts"] = [spec, ...]):
- bars grouped comparison — claim vs measured, token counts, tok/s. {type,title,unit,note,groups:[{label,bars:[{name,value,verdict}]}]}
- strip a row of pass/fail/warn chips — install steps, per-format survival. {type,title,note,cells:[{label,state,detail}]}
- matrix rows x columns grid of pass/fail — e.g. scanners x planted skills. {type,title,cols,rows,row_tags,cells}
- scoreboard ranked horizontal bars — category boards, score out of N. scoreboard_svg(title, rows[{label,value,max,verdict,suffix}])
Rules:
- Charts only ever plot numbers a real run produced. Never draw an estimated, rounded-up, or invented value;
a pending result is left out or shown teal ("measuring"), never guessed.
- Accessible: every chart is role="img" with a <title>/<desc>, and ships a visually-hidden data table with the
exact numbers, so screen readers and crawlers get the values, not just the picture.
- The home page and each review carry a category scoreboard / results block built from the same system.

