Skip to content
SloplessTry the picker

Base style · contemporary · balanced

Dot Matrix

A glyph-interface product site: strict black, white and grey with one red signal dot, dot-matrix display type for headlines and numbers, rounded widget tiles and pills on a dot grid, halftone dot pictures and tiny numbered mono labels.

Moods
minimal, futuristic, technical, cool, bold
Suits
ecommerce, saas, devtools, ai, music, gaming
Type
Doto + Space Grotesk

Principles

  • Strict monochrome: black, white and greys do all the work; one red is a signal (a dot, one tile, the record light), never decoration
  • Set headlines and every big number in a dot-matrix face; body copy stays in a clean grotesk, labels in tiny uppercase mono
  • Build sections from widgets: rounded tiles, pills and circles on a faint dot grid, each tile one reading (a number, a toggle, a picture)
  • Pictures are halftones of round dots forming the object, not photos: one dot cluster may be red
  • Number everything like a spec sheet: 01, 02, 03 indices, units and part labels in mono beside the claim

Hard rules

  • No colour besides black, white, greys and the one red: no blue links, no green success states, no gradients, no glows, no glass blur.
  • No phosphor-green or amber terminal text, no `$` prompts or ASCII rules (that is Terminal Mono); no warm-grey enclosures, bevelled keys or orange (that is Industrial Hardware).
  • No photos and no flat icon sets; pictures are dot halftones or nothing.
  • No dot-matrix face for body copy, buttons or form labels, no outlined dot type, and no Doto weights above 800 (the dots merge into pixel blocks).
  • No square cards or sharp buttons: tiles are 24 px rounded, controls are pills, indicators are circles.
  • No three equal feature cards with icons; widgets differ in size and job (a picture tile, a number tile, a toggle row).

Full page preview with sample copy, rendered from the same tokens and layout the agent receives.

For coding agents

Rules and live patterns

Every pattern Dot Matrix owns, drawn by the same renderer as the picker with the style's default tokens and sample copy. Each has an anchor (#<pattern id>). A design's own DESIGN.md and tokens.json stay the source of truth; this page shows what the patterns look like.

Do

  • Paint the page ground with the dot grid (`texture: dot-grid`: 1.25 px dots in the text colour at 30 % on a 24 px pitch) and keep it visible between widgets; widgets are solid `surface` / `surfaceAlt` tiles over it, never translucent.
  • Set every headline, section title, quote and big number in the dot-matrix heading face (Doto) at weight 700 with round dots: load Doto with its roundness axis (`family=Doto:ROND,wght@0..100,100..900`) and set `font-variation-settings: "ROND" 100` on every heading, so the dots are full circles that still stand apart (400 is too sparse; 900 closes into pixels; ROND 0 gives square LED pixels): hero headlines step 7–8, section titles step 5, numbers step 5–7 with tabular figures.
  • Set body copy, item titles and buttons in the grotesk body face (Space Grotesk, Geist, Inter Tight or Plex Sans; Space Mono in the mono pairing) at 400, item titles at 700. Never set a paragraph longer than one line in the dot face.
  • Set every label, index, date, unit and status in the mono face, uppercase, at the label size (about 12 px) with 0.07em tracking, in `textMuted` (or `link` for indices).
  • Build sections from widgets: tiles with the 24 px radius, a 1 px `border` hairline, 20–32 px padding, a mono label pinned to the top and the reading (number, title, picture) pinned to the bottom (`justify: between`), 12 px gaps both ways.
  • Label every section with an outlined pill (1 px hairline, full radius, uppercase mono inside) above the title; keep the red dot for the hero, the nav and the footer status.
  • Use pills and circles as the secondary shapes: every button is a full pill (`buttonShape: pill`), chips and toggles are outlined or filled pills, round pictures and indicators are perfect circles.
  • Use red as a signal only: the dot beside the hero eyebrow and the wordmark (the record light), the one primary pill in view, one red tile per section at most. Everything else is black, white and grey.
  • Draw pictures as halftones (`treatment: dot-matrix`): a square grid of round dots, about 28 across the short side, whose radius follows the tone, in `heading` on the tile colour, with one cluster in `accent`. Frame them as circles or 24 px rounded tiles.
  • Number everything that is a list: 01–06 mono indices in the link colour, spec rows ruled with 1 px hairlines, callout tags on device pictures that match a numbered key beside them.
  • Keep motion small and mechanical: tiles lift 2 px and the border turns `heading` on hover in 180 ms; a dot-matrix number may count up once on load; nothing loops except the slow mono marquee, and everything stops under `prefers-reduced-motion`.
  • At 375 px: the dot grid stays; widgets stack full width in source order with 16 px padding; reading tiles and toggles stay two per row where the tree says `phoneCols: 2`; display type steps down so the longest word fits.

Don't

  • No colour besides black, white, greys and the one red: no blue links, no green success states, no gradients, no glows, no glass blur.
  • No phosphor-green or amber terminal text, no `$` prompts or ASCII rules (that is Terminal Mono); no warm-grey enclosures, bevelled keys or orange (that is Industrial Hardware).
  • No photos and no flat icon sets; pictures are dot halftones or nothing.
  • No dot-matrix face for body copy, buttons or form labels, no outlined dot type, and no Doto weights above 800 (the dots merge into pixel blocks).
  • No square cards or sharp buttons: tiles are 24 px rounded, controls are pills, indicators are circles.
  • No three equal feature cards with icons; widgets differ in size and job (a picture tile, a number tile, a toggle row).
  • No drop shadows; depth comes from tile fill against the dotted ground and the hairline.
  • No more than one red tile per section, and never red body text.

Heroes (4)

Glyph display

hero.dot-glyph-display · hero

Desktop, 1440 px
Phone, 390 px
Rule
Dot-matrix display headline at step 8 on the dotted page in 1–8, a round halftone widget and a dot-matrix date widget stacked in 9–12, and a numbered spec row of four readings under both.
Slots
eyebrow, headline, subhead, cta, cta2, caption, heroImage, label, date, meta, stats[4..4]
Grid
message 1-8 · dial 9-12 · reading 9-12 · specs 1-12
Notes
The page shows the dot grid; widgets are solid tiles over it (radius 24 px, 1 px hairline). Red appears only in the dot beside the eyebrow and the primary pill. Numbers are the dot-matrix face; labels tiny uppercase mono.

The signature hero, at least 86 vh. Columns 1–8 over two rows on the dotted ground: the red signal dot beside the mono eyebrow at the top, the display headline at step 8 (≤14 ch, tight leading) and, at the bottom, the muted lead (≤40 ch) above the red primary pill and an outlined secondary pill. Columns 9–12, row 1: a surface widget with a mono caption over a round halftone picture. Row 2: a surfaceAlt clock widget with a mono label, the date in the dot face at step 6 and a muted note. Row 3 across 1–12: four numbered readings, each a hairline above a mono label and a number at step 5. Phone: message, then the two widgets, then the readings two per row.

Widget home screen

hero.dot-widget-home · hero

Desktop, 1440 px
Phone, 390 px
Rule
A home screen of widgets: the message tile in 1–7 over two rows, a red reading tile in 8–10, a round halftone widget in 11–12, a wide status widget in 8–12, and a dock of four numbered widget tiles across the full width.
Slots
eyebrow, headline, subhead, cta, cta2, caption, number, heroImage, date, meta, features[4..4]
Grid
message 1-7 · reading 8-10 · dial 11-12 · status 8-12 · dock 1-12
Notes
Every widget is a solid tile (radius 24 px) or a full pill; gaps are 12 px both ways like a phone home screen. Only the reading tile is red; the status widget carries a ring and a dot like a toggle.

A phone home screen. Columns 1–7 over two rows: the message widget (padding 40 × 32 px) with an outlined mono pill eyebrow, the display headline at step 7 (≤13 ch), the lead and the two pills. Columns 8–10 row 1: the red reading widget (mono caption and number at step 7 in `onAccent`). Columns 11–12 row 1: a round halftone widget. Columns 8–12 row 2: a `surfaceAlt` status widget with a mono date left and a ring plus a dot right (a toggle) at the top, and a short status line (body face, 700) at the bottom. Row 3: a dock of four numbered widgets (mono index in the link colour at the top, the title in the body face at 700 at the bottom), two per row on phones.

Transparent device

hero.dot-transparent-device · hero

Desktop, 1440 px
Phone, 390 px
Rule
Copy in 1–5, a device-framed halftone picture with four numbered callouts in 6–9, and the numbered key (01–04, title and one line) as a ruled list in 10–12.
Slots
eyebrow, headline, subhead, cta, cta2, heroImage, features[4..4]
Grid
copy 1-5 · device 6-9 · key 10-12
Notes
The device frame reads as clear hardware: a thin bezel on the dot grid. Callout tags 01–04 match the key on the right exactly; the key is mono numbers in the link colour, titles in the body face.

At least 88 vh, vertically centred. Columns 1–5: signal dot and mono eyebrow, display headline at step 7 (≤11 ch), lead (≤36 ch), the two pills at medium size. Columns 6–9: the halftone picture in a thin device bezel (9:16) with four numbered callout tags (01–04) and leader lines. Columns 10–12: the matching key as a ruled list: mono index in the link colour, the title in the body face (700) and one muted line. Leaders hide on phones; the key follows the device.

Counter type

hero.dot-type-counter · hero

Desktop, 1440 px
Phone, 390 px
Rule
A mono status row (signal dot, eyebrow, date) over a full-width dot-matrix headline at step 7; under it the lead and pills in 1–5, a round halftone in 6–8 and a reading tile in 9–12, then a mono marquee band.
Slots
eyebrow, date, headline, subhead, cta, cta2, heroImage, label, number, meta, marquee
Grid
status 1-12 · headline 1-12 · lead 1-5 · dial 6-8 · reading 9-12
Notes
The headline runs the full width in the dot face, two lines at most. The marquee is tiny uppercase mono separated by dots, moving slowly and stopping under reduced motion.

At least 84 vh, spaced between top and bottom. A status row: the signal dot and mono eyebrow left, a mono date right. The display headline across all 12 columns at step 7 (≤22 ch per line). Under it: the muted lead and the two pills bottom-aligned in 1–5, a round halftone picture in 6–8 and a reading widget in 9–12 (mono label, number at step 7, muted note). A hairline, then a slow uppercase mono marquee.

Navigation (2)

Content blocks (14)

Widget board

features.dot-widget-board · features

Desktop, 1440 px
Phone, 390 px
Rule
A board of widgets: the intro tile in 1–4 over two rows, a tall halftone picture tile in 5–8, and four numbered feature widgets in a 2×2 across 9–12.
Slots
sectionLabel, title, body, cta, image, features[4..4]
Grid
intro 1-4 · picture 5-8 · widgets 9-12

A board of three sizes. Columns 1–4 over two rows: the intro widget (padding 32 × 24 px) with the signal label, title at step 5 (≤14 ch), a muted line and an outlined pill at the bottom. Columns 5–8 over two rows: a tall halftone picture tile filling the cell. Columns 9–12: four surfaceAlt feature widgets in a 2×2, each with a mono index in the link colour at the top and the title (body face, 700) with one muted line at the bottom.

Glyph toggles

features.dot-glyph-toggles · features

Desktop, 1440 px
Phone, 390 px
Rule
Quick-settings toggles: the title and a line on one row, then eight feature pills (ring indicator, mono name) four per row; the first pill is lit white.
Slots
sectionLabel, title, body, features[8..8]
Grid
title 1-7 · line 8-12 · toggles 1-12

Quick settings. A row: pill label and title at step 5 in 1–7, a muted line bottom-aligned in 8–12. Then eight toggle pills four per row (one per row on phones): a ring indicator, the feature name in uppercase mono and a muted detail. The first toggle is lit: filled `accent2` (white on dark, black on light) with its text in the matching foreground.

Counter tiles

stats.dot-counter-tiles · stats

Desktop, 1440 px
Phone, 390 px
Rule
Four reading tiles in a row, each a mono label at the top and a dot-matrix number at step 7 with a muted note at the bottom; the intro sits above in 1–6 with the title.
Slots
sectionLabel, title, stats[4..4]

Signal label and title at step 5 (≤20 ch) above four reading widgets in a row (two per row on phones): a mono label at the top, the dot-matrix number at step 7 and a muted note at the bottom. No red tile here; the numbers carry it.

Numbered specs

list.dot-numbered-specs · list

Desktop, 1440 px
Phone, 390 px
Rule
A spec sheet: label, title and a line in 1–4; six ruled rows across 5–12, each a mono index in the link colour, the spec name and a muted value.
Slots
sectionLabel, title, body, features[6..6]
Grid
intro 1-4 · rows 5-12

A spec sheet. Columns 1–4: pill label, title at step 5 (≤12 ch) and a muted line. Columns 5–12: six rows ruled with 1 px hairlines, each a 12-column sub-grid: mono index in the link colour in 1–2, the spec name (body face, 700) in 3–6, the muted value in 7–12, all on one baseline.

Halftone wall

gallery.dot-halftone-wall · gallery

Desktop, 1440 px
Phone, 390 px
Rule
Title row with a ghost pill right; six 4:3 halftone pictures in a three-column grid of rounded tiles, each with a mono index and caption under it.
Slots
sectionLabel, title, cta, gallery[6..6]

Signal label and title at step 5 left, an outlined pill right, on one row. Six halftone pictures as 4:3 rounded tiles, three per row (two on phones), each with a mono index in the link colour and a short caption on one baseline under it.

Glyph quote

testimonial.dot-quote-glyph · testimonial

Desktop, 1440 px
Phone, 390 px
Rule
A big surface tile in 1–8: signal dot, the quote in the dot face at step 4 and the name with a mono role; two smaller quote widgets stacked in 9–12.
Slots
quote, author, role, quotes[2..2]
Grid
main 1-8 · side 9-12

A surface widget in 1–8 (padding 40 × 32 px): the red signal dot at the top, the quote in the dot face at step 4 (≤30 ch, keep it to three lines), and the name (body face, 700) over a mono role at the bottom. Two surfaceAlt quote widgets stacked in 9–12, each the quote in the body face at the top and a mono name at the bottom.

Plan widgets

pricing.dot-plan-widgets · pricing

Desktop, 1440 px
Phone, 390 px
Rule
Title and line in 1–5 above; two plan widgets in 1–8 (mono plan name, dot-matrix price at step 6, a line and a pill) and one red statement tile with a white pill in 9–12.
Slots
sectionLabel, title, body, plans[2..2], statement, cta
Grid
plans 1-8 · statement 9-12

Signal label and title at step 5 in 1–6, a muted line bottom-aligned in 8–12. Two plan widgets side by side in 1–8: mono plan name and the price in the dot face at step 6 at the top, a muted line and an outlined pill at the bottom (red stays on the statement tile). The red statement widget in 9–12: a statement at step 3 in `onAccent` and an outlined pill. Never three equal plan cards.

FAQ index

faq.dot-faq-index · faq

Desktop, 1440 px
Phone, 390 px
Rule
Title, a line and a ghost pill in 1–4; five ruled questions across 5–12, each a mono index, the question in the body face and the answer muted, all visible.
Slots
sectionLabel, title, body, cta, faqs[5..5]
Grid
intro 1-4 · questions 5-12

Columns 1–4: pill label, title at step 5, a muted line and an outlined pill to support. Columns 5–12: five questions ruled with hairlines, each a mono index in the link colour beside the question (body face, 700) on one baseline, then the muted answer (≤64 ch). All answers visible.

Signal tile

cta.dot-signal-tile · cta

Desktop, 1440 px
Phone, 390 px
Rule
One red tile: the title in the dot face at step 6, a line and an inline email form in 1–8; a round halftone widget in 10–12.
Slots
title, body, newsletter, image

One red widget (padding 48 × 40 px): the title in the dot face at step 6 (≤14 ch), a line and an inline email form with a white pill submit in 1–8, all in `onAccent`; a round halftone picture in 10–12, hidden on phones. The only red tile on the page bottom.

Pill row

logos.dot-pill-row · logos

Desktop, 1440 px
Phone, 390 px
Rule
A mono label with the signal dot, then six client names as outlined pills in a six-column row (two per row on phones).
Slots
label, clients[6..6]

The pill label (outlined mono pill), then six client names as outlined pills (uppercase mono, centred) in a six-column row, two per row on phones. No logos as images.

Story split

content.dot-story-split · content

Desktop, 1440 px
Phone, 390 px
Rule
Label, title, lead and body in 1–6; a 4:5 halftone picture tile in 7–12 with three numbered readings in a row under it.
Slots
sectionLabel, title, lead, body, image, stats[3..3]
Grid
copy 1-6 · picture 7-12

Columns 1–6: pill label, title at step 5 (≤16 ch), lead (≤40 ch) and a muted body (≤56 ch). Columns 7–12: a 4:3 halftone picture tile, and under it three small reading widgets in a row (mono label, number at step 5), three across even on phones.

Crew circles

team.dot-crew-circles · team

Desktop, 1440 px
Phone, 390 px
Rule
Title and a ghost pill on one row; people as round halftone portraits four per row, the name in the body face and a mono role.
Slots
sectionLabel, title, cta, team[4..8]

Signal label and title at step 5 left, an outlined pill right. People as surface widgets four per row (two on phones): a round halftone portrait, the name in the body face (700) and a mono role.

Log list

blog.dot-log-list · blog

Desktop, 1440 px
Phone, 390 px
Rule
Title and an arrow link in 1–4; four posts as ruled log rows across 5–12: a mono date, the title and a one-line summary, and a link pill.
Slots
sectionLabel, title, cta, posts[4..4]
Grid
intro 1-4 · rows 5-12

Columns 1–4: pill label, title at step 5 (≤12 ch) and an arrow link. Columns 5–12: four posts ruled with hairlines like a log, each a 12-column sub-grid: mono date in 1–3, the title (body face, 700) and a muted one-line summary in 4–10, a mono index in the link colour in 11–12.

Contact widgets

contact.dot-contact-widgets · contact

Desktop, 1440 px
Phone, 390 px
Rule
A form tile in 1–7 over two rows (title, line, name/email/message); an email widget in 8–12, then a phone widget in 8–10 and a red hours dot widget in 11–12.
Slots
sectionLabel, title, body, contact, email, phone, hours
Grid
form 1-7 · email 8-12 · phone 8-10 · hours 11-12

A form widget in 1–7 over two rows: pill label, title at step 5, a muted line and the name / email / message form with a pill submit. An email widget in 8–12 (ring indicator, the address at step 3 in the body face), then a phone widget in 8–10 (dot indicator, the number) and a small red hours widget in 11–12 (white dot, the hours in `onAccent`).

Footers (2)

Mono strip

footer.dot-mono-strip · footer

Desktop, 1440 px
Phone, 390 px
Rule
A hairline, then one row: the signal dot and wordmark, plain links, and the mono legal line, space between.
Slots
siteName, pages, legal

A 1 px hairline, then one row: the red signal dot and wordmark, plain links, and the uppercase mono legal line, space between.

Hero library heroes that suit Dot Matrix

Giant wordmarkhero.giant-wordmark · oversized-typeThe site name runs edge to edge at the largest step, sitting on the bottom of the hero; a three-zone strip above it carries eyebrow (1–4), headline + subhead (5–9) and CTA (11–12).Product, centred shothero.product-centered-shot · productProduct launch layout on one axis: a short product-name headline, a wide 16:9 product shot that dominates the hero, a row of 3–4 specs divided by rules, then price and one CTA.Product with flanking specshero.product-floating-specs · productA square product shot in 4–9 is flanked by spec callouts: 2–3 feature labels in 1–3 and 2–3 numbers in 10–12, each with a top rule; the headline runs 1–8 underneath, price and CTA in 10–12.Hover tile gridhero.interactive-grid-hover · interactiveIntro in 1–5 (headline top, subhead + CTA bottom); a 3-column grid of 6–9 bordered tiles (number + label) fills 6–12 and inverts tile by tile under the cursor.Ticker type bandshero.type-ticker · oversized-typeA slim intro row (h1 at step 3 in 1–6, subhead 7–10, CTA 11–12) above three full-bleed marquee bands of huge type: an accent band, a plain band and a surface band, alternating direction.Product bentohero.product-bento · productThe hero is a bento of five tiles: a headline tile in 1–7 (rows 1–2), a tall product tile in 8–12 (rows 1–3), two stat tiles in 1–4 and an accent CTA tile in 5–7 on row 3.Statement, bottom-lefthero.minimal-statement-left · minimalA tall, quiet hero: a mono index top-left and meta top-right on one row, and a two-to-three-line statement as the h1 at step 5 sitting on the bottom-left (1–9), with one underline link under it.