Design System v4 · Editorial Intelligence

A Bloomberg Terminal
for founder voice.Made to be played.

01 — Position

community.io is the seriousness of a trading desk, the warmth of a notebook, and the responsiveness of a synthesizer — operators don't use it, they play it.

02 — Voice

Every screen is set in editorial type at editorial scale. The interface does not contain the data — the interface is the data, made physical in ink and light.

03 — Test

A designer at Linear, Vercel, or Arc opens this system and says "who made this?" — not "oh, another dark dashboard." If any screen could be mistaken for a Tailwind template, we have failed.

01Optical system

Surfaces float on light.

No borders on cards. No border: 1px solid separating regions. Layers are separated by luminance steps — each surface is 5–8L lighter than what it sits on. Ambient light bleeds from behind active cards. Paper grain runs over everything at 3% — barely there, makes every screen feel printed, not rendered.

Luminance stack — surfaces float on layers
ink
#0A0A0B
ink-lifted
#0F0F11
paper-1
#141416
paper-2
#1B1B1E
paper-3
#222226
paper-5
#333339
Ambient state — light lives behind the surface, never on it
IDLE · no ambient
NovaPay
72
ACTIVE · iris ambient
Acme Analytics
88
AT-RISK · heat ambient
StackOps
41
✕ BANNED:  colored left-border accent on cards  ·  glassmorphism  ·  gradient-on-gradient buttons  ·  pulsing dot indicators  ·  any glow directly on a surface element
✓ INSTEAD:  radial ambient behind the card  ·  luminance separation  ·  negative space as the primary separator  ·  typography weight as the status signal
02Typography

Type is the primary interface element.

Fraunces is the voice of the product — not just for headlines, for the draft, the score, the specimen. DM Sans for UI and prose (not Inter — Inter is the vibe-coded giveaway). JetBrains Mono only for live ticking data. Every number uses tabular figures, unit set at 0.6× size, baseline-aligned.

HERO DISPLAYFraunces · opsz max
96–180px · wght 300–400
tracking −0.05em
Signal in. Reply out.
METRIC DISPLAYFraunces · tabular
64px number · 36px unit
baseline-aligned
94%$26K
EDITORIAL BODYFraunces · opsz max
18–22px · wght 300–400
1.6–1.72 leading

We built our entire growth engine on listening-first principles. Instead of broadcasting, we monitor AI conversations — then engage where intent is highest.

UI PROSEDM Sans · 13–15px
wght 400–500
NOT Inter

3 drafts ready for approval · avg confidence 91% · StackOps visibility declining −12%

LIVE DATAJetBrains Mono
10–13px · only for ticking
numbers
92%$5,600REDDIT · R/SAAS · 14 MIN AGO
SECTION LABELJetBrains Mono
9–10px · uppercase
2px tracking
// Intent feed · 47 sources · live
03Color & heat

Color is information density.

Two accent identities, never decorative. Red — editorial accent, the primary action color. Amber — live data arriving, success, pipeline. Intent heat is a continuous ramp: the geometry of the signal stream communicates score; color confirms it.

BACKGROUND & SURFACE STACK
--bg
--bg-2
--surface
--surface-2
--surface-3
TEXT HIERARCHY
--text
--text-2
--text-3
--text-4
RED — editorial accent
soft
mid
C8462C
text
AMBER — live data
soft
mid
D4A24C
text
SEMANTIC
positive
caution
negative
CHANNELS
Reddit
Twitter/X
LinkedIn
Discord
Indie Hackers
Hacker News
INTENT HEAT — continuous scoring ramp
COOL · <70 · strategicWARM · 70–84 · queue todayHOT · 85+ · act now
04Motion

Motion with mass and friction.

Signal arrival
Settles like paper landing on a desk
translateY(12px) → 0 rotate(0.4°) → 0° blur(4px) → 0 480ms · cubic-bezier(0.32, 0.72, 0, 1)
Approval departure
Folds forward, next rises from below
perspective(800px) rotateX(0°) → −8° translateY(0) → −10px then: rise-in from +20px · 320ms
Number roll
Digit-by-digit, staggered ascent
Each digit: translateY(100%) → 0 opacity 0 → 1 stagger 40ms per digit spring-soft · 400ms total
Generic ease-out  ·  opacity fade-in  ·  scale(0.95)→1  ·  "pulse" dots  ·  skeleton shimmer loaders   Custom spring curves  ·  transforms with rotation  ·  blur-to-focus arrivals  ·  weight-driven transitions
05Signal stream

The score wire. Geometry is the score.

Signals live on a vertical wire. Their horizontal offset equals their intent score — higher intent physically pushes further into the reader's attention. No badges. No colored side rails. The position on the wire is the data. Ambient light bleeds from behind hot signals only.

score wire←→ horizontal offset = intent score
Reddit · r/SaaS·14 min ago
92
hot · act now

Looking for alternatives to HubSpot — need AI community features

"We're a 12-person B2B team. Budget $2–5K/mo. Anyone using tools that combine community monitoring with AI-assisted engagement?"

Indie Hackers·5 hrs ago
85
warm · queue

Best tools for monitoring AI model visibility?

"I want to know when GPT/Claude/Gemini recommends my product. Currently doing manual searches…"

LinkedIn·yesterday
64
cool · strategic

Why community-led growth is the only moat left for B2B SaaS

"The companies winning aren't those with the best features — they're the ones with communities that AI models cite as authoritative…"

06Approval theater

The waveform breathes with the draft.

Voice confidence is a breathing waveform — not a gauge, not a percentage bar. It pulses with the phonetic rhythm of the training corpus. Confidence is felt, not read. The draft itself is set in Fraunces at 22px with an opening quote mark — it reads like a sentence written by a human.

Reddit r/SaaS · 14 min agoAcme Analytics· Starter plan
// Original signal

"We're a 12-person B2B team and HubSpot is becoming a money pit. Anyone using tools that combine community monitoring with AI-assisted engagement? Budget is $2–5K/mo."

Draft in founder voice
"We built our entire community growth engine on listening-first principles. Instead of broadcasting, we monitor AI conversations across Reddit, Twitter, and forums — then engage where intent is highest. Happy to share our playbook. We went from 200 to 4K members in 90 days.
07Controls

Controls with meaning-coded radius.

Radii are semantic, not universal. 2px for data readouts. 6px for inputs. 10px for chips. 16px for panels. 0px for editorial blocks. Never round everything to 2xl.

Buttons
Chips & tags
live92 · hot78 · warmqueued94% voice match
Inputs
08Anti-patterns

What killed the soul of v3.

If it could appear in a Tailwind UI template, a Shadcn component, or a Vercel dashboard clone, it doesn't belong here. These are the patterns that made v3 forgettable.

✕ Banned
Colored left-border cards

The single most vibe-coded tell in any dark dashboard. Status is encoded in typography weight, ambient light behind the surface, or spatial position — never a decorative stripe.

✓ Instead
Ambient radial light

Active cards have an iris radial glow behind the surface (8% opacity, breathing at 5s). At-risk cards have a heat-hot glow. Idle: no ambient at all. The light whispers, never shouts.

✕ Banned
Inter as the body font

Inter is the giveaway that something was assembled, not designed. It's optimized for screens, not for personality. DM Sans carries warmth. Fraunces carries authority. Use those.

✓ Instead
DM Sans + Fraunces

DM Sans for UI prose and labels. Fraunces at optical-size max for all editorial moments — drafts, scores, headlines, the voice specimen. JetBrains Mono only for ticking live data.

✕ Banned
Universal border-radius: 2xl

When everything is rounded to 20px the system has no hierarchy. Radius is semantic: 2px for data readouts. 6px for inputs. 10px for chips. 16px for cards. 0px for editorial blocks.

✓ Instead
Meaning-coded radius

Sharper = more precise = more data. Rounder = more human = more conversational. A live intent score has a 2px radius. A founder-voice draft card has a 16px radius. Shape communicates nature.

✕ Banned
Pulsing dots as status

A glowing dot that animates forever is noise. It trains the operator to ignore it. The status bar's live signal count communicates real-time activity without visual spam on every card.

✓ Instead
The score wire

Intent is communicated by horizontal position on the score wire — geometry that the operator learns in 5 seconds and uses forever. No badges. No indicators. The position is the data.