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!

Rocky in his Ship It outfit

Character lock (never change)

Logo system (locked 2026-10-17)

Rocky Tested wordmark

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
Rocky Tested badge

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 · SVG
Rocky Tested circle icon

D1 circle · Icon

The circle alone. Favicon, app icons, X avatar. Min size 16 px (favicon), 32 px elsewhere.

/img/logo/rocky-tested-icon-*.webp
Social preview card

Social preview

D1 lockup on the og:image (1200×630).

Clear space & size

Do: use the files as-is

Scale evenly, on cream or white.

Wrong: recolored wordmark

Don’t: recolor it

The wordmark stays green; Rocky stays gray.

Wrong: squashed badge

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

Rocky REAL pose
REAL

Green hoodie + cap, thumbs up

rocky-real-*.webp
Rocky HALF-REAL pose
HALF-REAL

Yellow vest + hard hat, magnifier

rocky-half-real-*.webp
Rocky VAPOR pose
VAPOR

Red hazmat suit, unimpressed

rocky-vapor-*.webp
Rocky TESTING pose
TESTING

White lab coat + goggles, flask

rocky-testing-*.webp
Rocky Ship It pose
SHIP IT

Navy cap, teal tee, clipboard. Home hero + default.

rocky-ship-it-*.webp

Faces (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!

amaze!

It's real. Big win.

proud

proud

Author shipped a fix / Rocky's fix merged

curious

curious

New submission, empty states

shook

shook

Surprise result, 404

thinking

thinking

Measuring, waiting on data

side eye

side eye

Claim is stretched (half-real rows)

mind blown

mind blown

Way better than claimed

nope

nope

Claim failed (vapor rows)

crying laughing

crying laughing

Friendly fun, never at a person

facepalm

facepalm

Errors, broken links, 404

love it

love it

Community favorites, thank-yous

sus

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.

Rocky dressed for Vision

Vision

beret, glasses, camcorder

rocky-topic-vision
Rocky dressed for Phishing / email

Phishing / email

bucket hat, fishing vest, rod with an envelope

rocky-topic-phishing
Rocky dressed for CAD

CAD

blue work shirt, pencil, blueprint

rocky-topic-cad
Rocky dressed for Trading bots

Trading bots

navy suit, candlestick chart

rocky-topic-trading-bots
Rocky dressed for Coding agents

Coding agents

teal hoodie, headphones, laptop

rocky-topic-coding-agents
Rocky dressed for Voice / audio

Voice / audio

denim jacket, microphone

rocky-topic-voice-audio
Rocky dressed for Security

Security

detective coat, deerstalker, magnifier

rocky-topic-security
Rocky dressed for Robotics

Robotics

coveralls, wrench, robot buddy

rocky-topic-robotics
Rocky dressed for AI models

AI models

graduation gown, diploma

rocky-topic-ai-models
Rocky dressed for MCP servers

MCP servers

green polo, lanyard, cables

rocky-topic-mcp-servers
Rocky dressed for Prompts

Prompts

wizard hat and robe, glowing scroll

rocky-topic-prompts
Rocky dressed for Speed claims

Speed claims

red racing suit, stopwatch, helmet

rocky-topic-speed-claims

Do & don't

Approved Real Rocky

Do: Use the approved art as-is

Plain gray rock, full outfit, sneakers, big teal eyes.

Security Rocky

Do: Match the outfit to the verdict or topic

Security repo? Detective Rocky. Verdict? Verdict outfit.

Side-eye face

Do: Use faces as tiny reactions

Claim rows, empty states, 404s, footers.

Example of a wrong recolor

Don’t: Recolor his body or skin

Rocky is always plain dark gray. Only the outfit changes color.

Example of squashed art

Don’t: Stretch, squash or tilt the art

Keep proportions. Scale evenly only.

Nope face

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

#2E9D4F

REAL hoodie, stamps

Half-real Amber

#E0A500

HALF-REAL vest + hard hat

Vapor Red

#D63031

VAPOR hazmat suit

Rocky Teal

#0F8B8D

Eyes, sneakers, TESTING, links

Safety Yellow

#F5B800

Buttons, wordmark

Rock Gray

#4A4744

Rocky's body (plain, no stripes)

Ink

#26221F

Outlines, text, chunky shadows

Paper

#FFFBF0

Background

Mint

#D7F2F2

Pills, table headers, testing

Type

Fredoka 600/700

Headlines, buttons, stamps

Nunito 400/700/800

Body text. Both are self-hosted (OFL).

Verdict cards & stamps

Rocky REAL outfit

REAL

Works as claimed. The big claim holds within about 20%.

"Amaze, amaze, amaze!"

Rocky HALF-REAL outfit

HALF-REAL

It works, but the claim is stretched or it breaks easily.

"Still good! Not 10x. Question?"

Rocky VAPOR outfit

VAPOR

Won't install, or the main claim doesn't hold up.

"Rocky find… smoke. Rocky file issue to help."

Rocky TESTING outfit

TESTING

Rocky is in the lab. No verdict yet, no guessing.

"Goggles on. Flask bubbling."

REAL   HALF-REAL   VAPOR   TESTING…

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.

Claim vs measured (example)
Claim vs measured (example)Comparison bar chart: Claim vs measured (example).204409614818SkillsClaimed817 skillsFound818 skills
Grouped comparison bars.
GroupSeriesValue (skills)
SkillsClaimed817
SkillsFound818
Pass/fail grid (example)
Pass/fail grid (example)Grid of pass/fail results: Pass/fail grid (example)Tool ATool Bcaught threat 1 · malicious✓✕caught threat 2 · malicious✓✓cleared clean 1 · clean✓✕
RowTruthTool ATool B
caught threat 1maliciouspassfail
caught threat 2maliciouspasspass
cleared clean 1cleanpassfail
Test strip (example)
Test strip (example)Pass/fail test strip: Test strip (example)✓installok✓importok✕scanned PDFno text layer⚗claim runqueued
One chip per step.
ItemResultDetail
installpassok
importpassok
scanned PDFfailno text layer
claim runtestingqueued
Scoreboard (example)
Scoreboard (example)Scoreboard: Scoreboard (example)Tool A8/8Tool B3/8
ItemValue
Tool A8/8
Tool B3/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.