Strata usage rules — do / don’t
Founder rulings, distilled. These override personal taste and any generic convention. When a rule here conflicts with something you’d normally do, the rule wins. Read this before ANY visual or copy work.
Spacing & sizing
- 8px grid. Spacing values are multiples of 8; 4px is the acceptable fallback. 6px (or any off-grid value) is never acceptable.
- Don’t invent arbitrary CSS values (heights, offsets, spacing). If the design doesn’t specify one, ask.
- Toolbar controls are uniformly 32px:
size="sm"on every control inside a toolbar.
Typography
- The Strata type scale is dense (
text-base= 14px — seetokens.md). Never assume Tailwind’s defaults. - Mono (Berkeley Mono) only on ALL-CAPS text — section labels, table headers, eyebrows. Never on mixed-case values, IDs, emails, or URLs.
- The mono label recipe:
font-mono text-xxs font-medium text-muted-foreground uppercase tracking-widest— for column headers, calendar day names, section markers. Never for data values or body text. - No letter-spacing on body text.
tracking-tightbelongs on display headings only. - The 16px input exception is MARKETING-ONLY: the marketing hero composer
uses literal
text-[16px]so mobile Safari does not zoom on focus for prospective signups, and the hero display context warrants the break. In-app composer/chat inputs stay on the standard scale.
Buttons & icons
- No icon+text buttons. A button is text-only, or icon-only with
size="icon"+aria-label. (One deliberate exception exists: the chat view-link’s sheet glyph — seeAGENT_APP_UI_CONVENTIONS.md.) - Platform/brand icons come from
PlatformIcon, never Lucide. - The logo always sits inside its bounded squircle box (
BrandLogo/.logo-wrap) — never a bare mark.
Surfaces & frames
- Band captions live OUTSIDE the frame: mono captions go
mt-4below a rounded band, never padded inside it (inside creates unbalanced negative space). - Squircles: authored ~2x radius + half-value
@supportsfallback; never inline-style the radius (seetokens.md). - Semantic color tokens only — never
text-neutral-900-style raw utilities.
Interaction
- No optimistic saves. Mutations get an explicit Save button with a spinner; the one exception is picker modals. Never silently persist edits.
- No silent fallbacks and no swallowed errors — degraded states are shown honestly (“data unavailable”), never faked.
Copy & voice
- No em dashes in user-facing copy (a dead AI tell) — restructure the sentence instead. Code comments and internal docs are exempt.
- The verb is “post”: “Post”, “Posted”, “Live Posts” — never “publish” in user-facing copy (code identifiers stay as they are).
- No industry jargon: “Comments”, not “Engagement”. Exception: “agents” and “agentic” are embraced in product/marketing copy — they’re the thesis.
- No
@prefix on usernames. - No vendor names in partner-facing docs and no naming convention-models in marketing copy; describe capabilities behaviorally (real integrations may be named).
- Treat any copy you’re handed as a draft — refine it to these rules rather than pasting it verbatim.
Process
- Batch small visual tweaks into a round rather than one PR per tweak.
- Spacing instructions bind to their stated target: flex areas adapt, fixed-width elements change only on explicit ask — never silently resize a fixed element to absorb a tweak.
- When several findings cluster in one area, fix the structural cause, not each symptom.