😱 ScreamingFace
design research · toward SFDS v2

The look, researched.

Four deep passes — AI/ML leaderboards, trustworthy-minimal product craft, retro/terminal aesthetics, and the data-viz & accessibility canon — plus what the team has shared. The point: ground every SFDS decision in evidence, not taste alone.

the convergent finding Independently, all four pools land on the same moves — and they validate the SFDS law rather than challenge it. The most-trusted leaderboards (SWE-bench, Aider, Epoch) and the most-credible product systems (Linear, Vercel/Geist, Stripe) earn their credibility from exactly the restraint SFDS already codifies: flat color, hairline borders, square corners, mono for data, serif for headlines, one accent, light + dark. Nothing to reverse. The work is to sharpen: a surface-ladder for depth, tabular numerals, a per-accent role split, a machine-honest retro layer, and a validated data palette.

What to adopt

The leaderboard, as a credible instrument

Trustworthy-minimal craft

Retro that reads as craft, not costume

What to avoid — the AI-tells

The 2026 "AI-generated" signature is a set of absent decisions. SFDS already forbids most; the ones marked NEW are additions the research surfaced.

Never (reads as AI / template)

  • Purple / indigo / violet — the single loudest tell
  • Blue→purple gradients, glow / gradient text
  • Rounded-everything, soft ~0.1 shadows, glassmorphism NEW: blur
  • Hero + 3 feature cards + bento grid
  • Default shadcn skin, Inter as the only face
  • NEW One-sided colored accent bar on a card
  • NEW Weightless copy ("Build faster. Ship smarter.")
  • NEW Centered-everything, uniform whitespace, no density contrast
  • NEW Fake logos / fabricated metrics — fatal for a leaderboard
  • NEW Forced dark-only; neon-terminal cosplay (Matrix-green/cyan, CRT scanlines)

Instead (reads as decided)

  • Flat color, one accent used only for the story
  • Depth from spacing, surfaces, and hairline rules
  • Square edges, all-sides-equal borders, one edge language
  • Real type hierarchy: serif headline, mono data, tight weights
  • Asymmetric, document-like, generous whitespace
  • Real data, real model names, dated + reproducible
  • Retro that does work: aligned grid, box tables, honest status
  • Motion only where it clarifies; one cursor, reduced-motion safe

Palette proposal

Brand signals — anchored to the 😱, per-mode

The gold + blue sampled from the emoji stay the brand's soul, but they carry meaning, and they need per-mode values because a single mid-tone can't clear contrast on both true-white and true-black.

LDtoken · rolenote
gain — gold#d88507 · #eaa524 The "live / record / winner" channel — the phosphor. Rationed so it stays an event. Borderline on white for small text → darken to ~#a8660b for small on light, or use large/bold only.
brand — blue#8fadde The "cool / reference / interactive" channel. A light tint → dark-mode text & light-mode fill only; never small text on white.
gain-gradgold → blue The one sanctioned gradient — reserved for the winner/delta signal only. Orange↔blue is the CVD-safe axis, so the gain read is accessible by construction (still back it with length/position).

Categorical data palette — 10 entities, colorblind-safe, no purple

The honest ceiling for a guaranteed colorblind-safe set is ~8 hues; getting to 10 without purple (the cheapest 9th–10th hue) means the first 8 are genuinely CVD-safe and 9–10 are backed by a redundant channel (marker shape / direct label). Built from Okabe-Ito + Paul Tol, with the saturated gold band vacated so no series is ever confused with the winner. Two coordinated sets — hue identity is constant per slot; lightness/chroma shift per mode.

LD# namerationale
1 · azure#3b6fb0 · #6f9fd8The CVD-stable anchor. Darker/more saturated than brand periwinkle so it never reads as brand-blue.
2 · green#4f9d3f · #6ac25aTrue green. Blue↔green is the most CVD-robust pair.
3 · vermillion#d84f38 · #f2704fWarm anchor at ~9° — clearly redder than gold, can't be the winner.
4 · cyan#33b1d4 · #56cdeaLightest cool; distinct from azure (darker) and teal (greener).
5 · rose#d95a97 · #f07db0Red-side pink at ~330° — NOT violet. The legitimate purple replacement.
6 · yellow-olive#b59a1f · #d8c34aDark yellow (pure yellow is invisible on white); greenish + dark to stay clear of gold. Replaces the old amber that collided with the brand.
7 · teal#1f8a86 · #3fb3aeDeep blue-green ~178°; distinct from green (bluer) + cyan (darker).
8 · brown#8a5a3c · #b98a63The muddy warm anchor; separates by lightness (L*≈45).
9 · slate#6b7785 · #98a4b2The neutral — "other / baseline / de-emphasized." Every 8+ set needs one.
10 · wine#9c3550 · #cd5e78Darkest saturated red ~345°. The hardest slot — validate the vermillion/brown/wine cluster under deuteranopia; back with markers.
usage rules (what keeps it honest past 8) Reserve the gold band + brand periwinkle — no --cat-* occupies them. Order matters: assign 1→10, so a ≤5-series chart renders azure/green/vermillion/cyan/rose — maximally separated + brand-safe. Past ~8 series, stop adding color: group the tail into slate "Other," direct-label lines, or use small multiples. Validate every hex through Viz Palette (protan/deutan/tritan + ΔE), WCAG 1.4.11 ≥3:1 against both backgrounds, and a grayscale test — ideally wired into build.mjs as a CI gate.

Reference gallery

The strongest real examples, tagged with why they work. ↗ external

AI / ML leaderboards
Trustworthy-minimal craft
Retro / terminal / refined-brutalist
Data-viz & accessibility canon

What this changes in SFDS

The research → concrete edits, staged for the next phase (after you react):

😱 SFDS — design research brand.screamingface.ai · internal