Brand book
Visualli turns anything people bring — a PDF, a link, a video, a thought — into a visual map they can walk into. The design system serves one promise: understand anything visually. Visuals are the stage; text is the stagehand.
Feel: joyful · spatial · visual · gradual reveal · fresh. Never: generic SaaS, generic "AI startup" (no blue-to-purple gradients, no sparkle-everything, no glassy cards), never a wall of text.
Content fundamentals
- Voice is precise; visuals are playful. Copy says exactly what happened in as few words as possible ("Added 3 ideas under Sleep"), the canvas carries the delight.
- Sentence case everywhere in the interface and in headlines. Capitals only in the
displayface (Haksen is caps-only), which is reserved for eyebrows, deck titles and empty states. - Short declaratives that end in a period are the house headline: "Bring anything." "Hop on." "Understand anything Visually."
- You / we. Speak to the learner as you; Visualli is we only on marketing surfaces. In the product, Visualli never says "I".
- American spelling (color, center, memorize).
- Vocabulary — use these words, consistently:
Say Meaning Avoid a Visualli (plural Visuallis) one map the user made "diagram", "mind map", "board" the vault the user's library of Visuallis "files", "workspace" node / idea one concept on the map ("idea" in UI copy, "node" in docs and code) "bubble", "card" connector a labelled arrow between two ideas "edge" in UI copy layer, level what opens inside an idea; level 0 is the overview "page", "child map" rings the outlines around an idea that has layers inside "badge", "indicator" step inside / back out entering and leaving an idea's inner layer (its rings) "expand", "collapse", "drill down" go deeper understanding one idea or term in depth (the facets panel) "learn more" (reserved for external links), "details" peek an idea's summary on hover or first tap "tooltip", "popup" map it turn a topic into a map — inside this one or as a new Visualli "create", "generate" bring adding a source "upload" (except for the literal file picker) - Emoji: allowed in marketing and social copy, one per message at most, never in product UI chrome. ✨ is not a stand-in for "AI".
- AI is invisible plumbing. Say what Visualli did ("Mapped 6 ideas from memory-notes.pdf"), not that "AI generated" it.
- ™: write Visualli™ once — on first mention in legal footers, the website footer, decks' title slide and press material. Never in product UI, never in headlines.
- Numbers as numerals ("6 ideas", "3 layers"); time as relative in the vault ("2m", "Tue", "Sep 12").
Visual foundations
Color — three families, three jobs
- Spectrum (
spectrum-teal,spectrum-harbor,spectrum-iris,spectrum-berry,spectrum-coral,spectrum-amber,spectrum-sun,spectrum-stone, plusroot-ink) — the logo's exact letter colors. Brand moments only: the wordmark,SpectrumBar, marketing blocks, theSignatureswash. Never as a UI fill behind text, never blended into a gradient. The SpectrumBar replaces the old blue→pink gradient: colors side by side, each one whole. - Topics (
topic-<name>+topic-<name>-ring, eight of them) — pastel fills derived from the spectrum, for nodes and anything that echoes a node (vault dots, avatars, roadmap votes). Topic colors separate siblings; they never carry meaning. Labels on them always usenode-ink(10:1 or better). They stay pastel in dark mode — ideas glow on the dark canvas. - Interface neutrals —
canvas,surface,surface-sunken,surface-overlay,line,line-strong,ink,ink-muted,ink-subtle, plusaction/on-action,focus,linkand the four statuses. Chrome is quiet so the map can be loud.
Rules: one action per view (Send, New Visualli, Join early access). action is root-ink in light and paper in dark — there is no brand-blue button. Status colors always travel with an icon and a word. Every text token's usage note names the grounds it passes on; all pairs are checked at 4.5:1 (7:1 in the high-contrast themes) across all eight themes.
Type — four voices
| Family | Face | Use |
|---|---|---|
display |
Haksen (caps only, the wordmark's geometry) | eyebrow, display-*: kickers, deck titles, empty states, vault group labels |
ui |
Atkinson Hyperlegible Next | everything you read and operate: title-l … caption |
hand |
Kalam | the canvas: node-root, node-label; the one signature word per screen ("Understand anything Visually."); up to three hand-set key words in a marketing lede |
note |
Caveat | edge-label on connectors, annotation marginalia ("tap the rings to step inside ↓") |
mono |
Atkinson Hyperlegible Mono | code: the .visualli JSON, spec docs |
Atkinson Hyperlegible was drawn for low-vision readers; choosing it says inclusive before a word is read. Hand faces live on the canvas and in marketing — never in buttons, inputs or menus. In Readable type mode all hand faces fall back to ui.
Space, radius, elevation
- 4px rhythm:
space-1(4) …space-9(96). Floating chrome sitsspace-4from the window edge on desktop,space-3on mobile. - Radii are soft and generous:
radius-sm(10) for controls,radius-md(16) for cards and menus,radius-lg(24) for the Composer, Vault and dialogs,radius-pillfor send, switches and avatars. Nodes have no radius — they are blobs (see Canvas language). - Elevation is two shadows:
shadow-float(chrome on the canvas) andshadow-pop(menus, dialogs, toasts).shadow-nodelifts nodes — a drop in light, a glow in dark. High-contrast themes drop shadows for 2px borders.
Layout
One canvas, three floating pieces: the Vault on the left (288px, collapsible), the Composer bottom-center (max 720px), canvas controls top-right. The depth trail sits top-left of the canvas, just right of the Vault. Nothing docks edge-to-edge; everything floats over the map with space-4 of air, so the canvas always reads as infinite.
Motion — gradual reveal
The signature move is the bloom: when a layer opens, ideas grow out from the center one by one (duration-reveal 420ms, stagger-reveal 70ms, ease-bloom with a small overshoot), then connectors draw themselves in. Drilling in is a camera dive (duration-zoom 500ms, ease-zoom) into the node you chose; backing out shrinks and fades. UI motion is short and quiet (duration-quick, ease-standard). Every animation respects Reduce motion and prefers-reduced-motion: zooms become cross-fades, blooms become a 120ms fade.
States
Hover lifts (−2px) and turns a node's rings 2°; press settles 1px. Focus is always a solid 2px focus ring with 2px offset (on nodes: the outline itself turns focus). Disabled is 45% opacity plus a reason nearby. Selected nodes get an ink outline.
Iconography
Lucide outline icons (lucide-react 0.344, the set already in the web app): 24px grid, 2px stroke, round caps — 1.75–2.25px at 16px. Use Icon with the names in ICONS; never mix filled icons in. Icons inherit currentColor. The assets/Icons group holds the 24 most-used as SVG files (ink #182140) for design tools. No emoji in product chrome. There is no "AI" glyph: Visualli's chat receipts carry the still tree (TreeMark) — the same drawing ThinkingTree animates while Visualli works, settled once it's done. Tips (transient hints) carry a check mark.
Logos
Use the uploaded files in assets/Logos, never redraw. visualli-wordmark-light.png on light grounds; visualli-wordmark-dark.png (badge on near-black) on dark grounds; visualli-tree-color.png alone as the app mark at 24px and up; visualli-tree-mono.png for single-color print; visualli-spec-mark.png only for the open specification. Clear space around the wordmark: the height of the tree disc. The wordmark's letter colors define the spectrum — do not recolor it.
Don't
- No gradients (the spectrum is shown as whole, adjacent colors).
- No colored left-border cards, no emoji as decoration, no generic stock "AI" imagery.
- No text blocks on the canvas: if a node needs more than three lines, it needs a layer.
- No meaning in topic colors (meaning lives in labels, rings and connector style).
- No hand-drawn faces in controls; no Haksen in sentences.
Using this system
Load tokens.css, then components/bundle.css (it imports the Google faces), React 18, then components/bundle.js — components are on window.Visualli. Set the look on <html>: data-theme (one of light, dark, focus-light, focus-dark, colorsafe-light, colorsafe-dark, contrast-light, contrast-dark), plus data-type, data-motion, data-reveal, data-scale — or call Visualli.applyComfort(choice). Further sections: Canvas language (the open-spec layer), Comfort modes, Surfaces, Marketing, Migration.
