snaix \ design language living doc · updated 2026.04.24 living document

the rules
of the house.

every page under snaix.homes is built from the pieces on this page. colors, types, motion, components. reference it when you extend the system; when in doubt, reach for what is already here.

§ 00

philosophy

a tool should feel designed, not decorated.

snaix.homes is four tightly-coupled tools with a shared face. the design is built to make that face legible at a glance: you should know which tool you are reading about in under a second, and you should never feel the site trying to sell it to you.

the rules below are not a style guide. they are decisions already made, written down so i do not re-litigate them on every new page.

lineage · what we are looking at

honest about what i stole. six influences, one shared grammar — geometric primitives, an opinion about the grid, and a respect for the reader's time.

1919–1933 · dessau

bauhaus

form follows function. red square, yellow triangle, blue circle — kandinsky's primitive-to-color mapping lives at the root of this system.

1950s · zürich · basel

swiss typographic style

müller-brockmann grids, asymmetric composition, sans-serif, objective photography. information as a designed object — never decorated.

1915–1930s · moscow

russian constructivism

rodchenko, lissitzky, stepanova. diagonals, bold type as image, red-black-white propaganda mechanics. the portal page owes everything to this.

$ bcmr send scanning … 12.4 gib ✓ verified
always · command line

unix & the terminal

commands stream. hashes truncate. timestamps flush right. the site speaks the same dialect as the tools it documents.

2024 · chenglou

prete / popmotion

motion that respects the reader. text animates once, on reveal, then rests. no endless loops, no distraction.

1928 · leipzig

jan tschichold · die neue typographie

asymmetric layouts. strong horizontals. economy of ink. rules over decoration — the grid is earned, not applied.

voice · how i speak

do
  • lowercase, short sentences, direct verbs.
  • name the tradeoff. every decision has a cost; say it out loud.
  • show the command, then the output. the page reads like a session.
  • italics for asides. you are reading one now.
  • numbers are precise: 12.4 gib, not "a lot".
don't
  • exclamation marks. the design already carries the energy.
  • marketing verbs: revolutionize, unlock, empower, supercharge.
  • vague benefits. "fast" is a claim; "12.4 gib / 8 s" is evidence.
  • second-person pep talk. the reader is a peer, not a student.
  • padding. if a section has nothing to say, delete it.

anti-patterns · what this system refuses

provenance · credit where due

typefaces archivo by omnibus-type, open font license · jetbrains mono by jetbrains, open font license
color system oklch-tuned derivations of bauhaus primaries on a warm paper ground (#f4efe4)
motion hand-rolled primitives in motion.ts; spiritual nod to chenglou/prete and matt perry's popmotion
icons none. shape marks do the work.
imagery none. diagrams only, built from the same tokens as the rest of the site.
§ 01

colors

three primaries on a warm paper ground. primaries are used as state: red for critical, yellow for focus, blue for action. neutrals do the rest of the work.

surfaces

--bg page background
--bg-raised raised surface (cards, panels)
--bg-inverse inverse surface (dark blocks)

text

--fg primary text
--fg-muted secondary text
--fg-faint tertiary, captions
--fg-inverse text on inverse surface

primaries

red
--red
error · recording · critical
yellow
--yellow
warning · focus · running
blue
--blue
link · success · actionable

neutral scale

--steel-1
--steel-3
--steel-5
--steel-7
--steel-9
--ink
§ 02

typography

two families. archivo for ui & display — geometric, humanist, with ss01 enabled. jetbrains mono for code & chrome. lowercase is the default for headings; it signals informality and system-level thinking.

.t-display
four tools / one hand
.t-h1
shipping out loud
.t-h2
why blake3
.t-h3
chunked hashing
.t-body
bcmr splits every file into 1 mib chunks. each chunk produces a leaf hash; leaves combine into a tree; the root is the blob id.
.t-small
section label · 01
.t-mono
$ bcmr cp ./data host:/srv/
.t-mono-sm
mono · small · metadata + timestamps
§ 03

text motion

text is animated as a first-class subject. random is cheap. use motion to direct attention — only on headings, hero copy, and metric callouts. body text is always static.

<BlockReveal/>
blockreveal is for titles
block-wipe across text. sweeps in from left, out to right. use for titles.
<Typewriter/>
character-by-character. use for code + commands.
<Scramble/>
characters resolve to final via noise. use for hashes, ids.
<Tally/>
0
counts up to value. use for stats, metrics, counts.
<CommandStream/>
scripted terminal session. lines stream in with timed pauses.
§ 04

components

the working pieces. every one is small, composable, and uses tokens — never hard-coded colors or sizes.

chips

default recording running shipped

buttons

panels

eyebrow

default panel

a bordered paper-raised surface. use for content groups, docs callouts, summary cards.

inverse

dark panel

same shape, ink surface. use for emphasized statements, terminal-adjacent content.

callouts (docs)

info
side note, build-up knowledge. blue bar on the left.
watch out
ambient warning. yellow bar. read before proceeding.
never
irreversible. red bar. do not do this.

margin note

[1] footnote-style annotation. use at section boundaries to tag the reader's attention without stealing it from the main column.

bauhaus shape mark

decorative composition. red-square + blue-circle + yellow-triangle. scale via the wrapper element.
§ 05

shapes

three geometric primitives, three primary colors. almost every decorative element on the site is one of these, rotated and cropped.

square · red
stability · blocks of text · the ground plane
circle · blue
links · state dots · actionable
triangle · yellow
focus · warning · directionality
§ 06

files

the on-disk layout under packages/theme/src/styles/. keep new work aligned to this shape — don't start new css files for component-scoped rules unless the component is itself a new page.

tokens.css design tokens, reset, type scale, responsive breakpoints, dark theme
theme.css theme toggle, persistence, data-theme attribute
motion.{css,ts} text motion primitives: Typewriter · Scramble · Tally · BlockReveal · CommandStream · GridFlip · TickerRow
layout.css TopBar · Footer · Panel · MarginNote · BauhausMark
portal.css portal page (snaix.homes landing)
home.css bcmr landing
pikpak.css pikpaktui landing
iconchanger.css iconchanger landing
claudit.css claudit landing
pages.css docs · install · changelog · about · cli
design-system.css this page
§ 07

principles

01

text first

type does the heavy lifting. every page should read well with all images disabled.

02

state as color

red · yellow · blue only communicate state. decoration uses neutrals.

03

motion is meaning

animation directs attention. if it is not pointing at something, remove it.

04

lowercase default

titles are lowercase. capitalization is reserved for product proper nouns.

05

no emoji

shapes, not pictograms. the bauhaus mark carries what an emoji would.

06

tokens, never values

colors and sizes come from vars. new components must accept both themes.