Five layouts
that absorb every screen.
Every BetterReviews screen reduces to one of five templates. Each names its grid, its density, the component set it allows, and what every page made from it must inherit. New page → pick the template, follow the recipe, ship.
For queues, inboxes, anything chosen one item at a time.
- Grid
- 360 / 1fr · fixed left rail (the list), fluid right pane (the detail). 1px hairline between.
- Reading width
- Detail pane content centres at max-width 720px when text-heavy, or fills the pane when chart-heavy.
- Density
- Compact · row height 56–68px in the list, comfortable inside the detail.
- Components
- List rows · status chips · primary action pair · reply box / form. Never a card-grid in the detail pane (use single-column flow).
- Mobile
- Single column. List visible by default. Tapping a row reveals the detail with a back chevron in the top bar.
- Found on
- Inbox · Reviews · Application queue · Cited-this-week digest.
- Inherits
- Page header padding tier · 8-pt grid · paper surface. Never a sidebar inside the detail pane (that's two-pane settings; see Template 02).
For configuration, account, and every screen with persistent sub-navigation.
- Grid
- 240 / 1fr · fixed left sub-nav (grouped by smallcaps labels), fluid panel.
- Reading width
- Panel content max-width 720px for forms; 1080px for data tables.
- Density
- Comfortable. Sub-nav rows use compact density (8px vertical).
- Components
- Form fields (single column) · section dividers · save bar at the bottom · destructive zone at the very end. Never a card-grid; settings is prose-like.
- Sub-nav
- Grouped sections with smallcaps labels. Active row uses clay-soft background; never a side-stripe.
- Mobile
- Sub-nav becomes a top dropdown. Panel takes full width.
- Found on
- Settings workspace · Billing · Team · AI configuration · Integrations · Privacy.
- Inherits
- Save behaviour: optimistic, with a "Saved" toast bottom-right. Destructive actions confirm in modal with named-button (never "OK / Cancel").
For the Today page, Analytics, anything that summarises at a glance.
- Grid
- 12-column, gap-3 default. Common spans: stat tile 3-col, half-card 6-col, full-bleed chart 12-col.
- Reading width
- Max-width 1480px (wide), centred. Below 1280, span the full viewport with 24px gutters.
- Density
- Comfortable. Stat cards p-5; charts p-6.
- Components
- Stat tiles · sparkline · single hero chart · ≤1 "what's new" card · 1 audit grid. No two charts of the same kind side by side.
- Rhythm
- Section pattern: header → 4-up stats → 1 hero chart → grouped tables. Repeat with different framing only if the page genuinely covers two domains.
- Mobile
- 4-col stats collapse to 2-col then 1-col. Charts re-flow to full viewport width minus 24px gutter.
- Found on
- Today · Analytics · Growth Intelligence · Pulse.
- Inherits
- One H2 per section · tabular numerals on all stats · clay reserved to one hero figure per dashboard.
For long-form, welcome, onboarding, the Journal.
- Grid
- Single centred column. Form width 720px, reading width 720px.
- Density
- Airy · section padding tier climax (clamp 80–168). Long-form earns space.
- Type
- Body in Fraunces opsz 9, 19/1.65. Headings in Fraunces opsz 96. Drop cap on first paragraph of essays.
- Components
- Kicker · h1 · dek · byline → body → pull-quote → figure → stat-grid → footnotes → related reads. The Journal anatomy in chapter 16.
- Chrome
- No sidebar. No top bar inside the column. Brand chrome lives in the page-head only.
- Mobile
- Padding clamps; otherwise unchanged · this template is the most mobile-native.
- Found on
- Welcome · Onboarding step pages · Journal articles · Legal · 404.
- Inherits
- One thing per section. Em-dashes still banned. No mid-page CTAs.
For marketing, landing pages, the one place the brand goes loud.
- Surface
- Drenched Midnight ink. The only place ink is the page-default ground.
- Hero
- Kicker (Terracotta smallcaps) → display H1 (Fraunces 900, opsz 144) → dek → optional CTA pill.
- Density
- Anchor padding tier (clamp 96–200). Editorial pace.
- Components
- Hero · audit grid (3-up stats) · drenched peacock band · Magritte frame figure · floating CTA pill. Maximum 5 sections total.
- One Voice
- Terracotta strictly to 10%: kicker · accent words in display · audit-grid unit suffixes. Nothing else.
- Mobile
- Audit grid stacks 1-up below 600. Hero font scales clamp 48 → 120.
- Found on
- betterreviews.io landing · Refusal pages · Manifesto · Apply / Cohort pages.
- Inherits
- Never a feature-grid. Never a logo wall. Never a pricing table.
Each surface ships at one density by default.
Marketing surfaces · Drenched hero · Single-column long-form (Journal, Welcome). Section padding tier climax or anchor.
Admin product surfaces · Dashboard · List + Detail (detail pane) · Two-pane Settings (panel side). Section padding tier connect.
Data tables · Command palette · Settings sub-nav · List pane of List + Detail. Row height 36–48px. Section padding tier chrome.
The Tweaks panel can override density for testing, but the source-of-truth density per surface is the one above. If a new page feels wrong, the density mismatch is the first thing to check.
Recipes, not rules.
A Card may contain
- Kicker + title + body + ≤1 action, or
- Kicker + hero number + sub-label (stat tile), or
- Header row + table rows + footer link (data card)
A Card must not contain
- Hero number + chart + sparkline + CTA (three signals minimum, that's a section, not a card)
- Two H3 subheads
- A second card inside it
- A side-stripe accent (border-l > 1px)
A Section may contain
- ≤1 H2
- ≤3 paragraphs of supporting prose
- ≤1 grid OR ≤1 figure OR ≤1 do/don't
- Optional footer rule + transition kicker
A Section must not contain
- Two H2 headings (split into two sections)
- A grid AND a figure AND a do/don't (one device per section)
- A nested section
A Page may contain
- 1 page-head with h1 + lede + optional meta row
- 3 to 7 sections (anchor / climax / connect / connect / chrome typical)
- 1 footer with prev/next
A Page must not contain
- More than one drenched hero
- More than 8 sections (split into a sub-page)
- Two pull-quotes in the same flow
- A second floating CTA
Five questions every screen must pass before it ships.
One Voice · ≤ 10% Terracotta.
Squint at the screen. Count clay pixels. If clay covers more than a tenth, reduce.
No italics, no em-dashes, no emoji, no exclamation marks.
Run a grep on the new copy: [·!] or font-style:italic. Any hit is a defect.
AA contrast on the worst tint.
Body text passes 4.5:1 on paper, paper-2, paper-3, and any tinted callout (clay-soft, ok-bg, warn-bg). The audit script catches this.
Hairline before shadow.
Every floating affordance asked: would a 1px rule do the job? If yes, swap the shadow for a hairline.
Could it ship from a competitor tomorrow?
Bento grid? Side-stripe card? Gradient mesh? Star widget? Hero metric template? If yes to any, redo.