- role
- Background
- token
background- value
oklch(0.145 0.003 38)- use
- The page. surface for raised areas, border for lines.
SHEET 00 / IDENTITY BLUEPRINT
Square, dark and quiet, so the emotes can be loud. This sheet is the rendered version of docs/branding.md. Components are in sheet 08.
[01]
Four rules every screen follows.
No rounded corners, anywhere. Squareness is the brand.
The interface stays dark and quiet; emotes carry the energy.
Monospace glyphs nod to chat. Seasoning, not the main course.
Orange marks what matters. Everything else is neutral.
Instant states, default cursor, no web-page flourishes on controls.
[02]
Three roles, dark only. OKLCH tokens in app.css.
backgroundoklch(0.145 0.003 38)primary · brand-500oklch(0.655 0.214 38) · #f64f02signal · signal-400oklch(0.81 0.13 215)brand-*
neutral-*
signal-*
[03]
Geist family. Sans by default, serif as the accent, mono for ASCII.
font-sans · Geist · 100–900
Every emote, one command.
Default for everything: interface, body text and most headings.
font-serif · Geist Serif · 400 only
emotes
Accent only: one or two words in a heading. Never body text or interface.
font-mono · Geist Mono · 100–900
/addemote byname:catJAM
ASCII art, labels, commands, technical captions.
[04]
Radius is always 0. Lines over shadows.
rounded-full either: dots, avatars and pills are square.[05]
The accent. One ASCII moment per block, always aria-hidden.
ramp · light → dense
[06]
Quiet by default, a few signature moments.
[07]
Speak like chat, write like a tool.
Add any emote with one command.
Leveraging advanced optimization pipelines for emoji assets.
Add to Discord
Add To Discord
[08]
components/ui. Built on ui-sdk where it ships the behavior.
<Button variant size glow render>
<Heading level size> · level is the outline, size is the look
<Text size tone>
Large text for intros.
Default body text.
Small muted text for secondary details.
<Eyebrow index> · <Accent>
[01] / features
emote manager for discord
One accent word per heading.
<SegmentedControl> · <Slider> · <Switch> · <Radio>
<TextField prefix suffix error>
Clear it to see the inline error.
<SizeMeter value limit max> · bar ends at the original size
<SlotMeter label used limit> · emoji slots, orange in the last 10%
<Notice title action> · a heads-up that doesn't block · <Spinner>
Processing
This GIF is 7.40 MB, our editor is made for smaller ones
<EmoteMenu kind> <Emote emote> · right-click, long-press or Shift+F10
One component for every emote in the panel. The list's actions decide the menu; a click selects and brings up the selection bar with the same actions.
<Toaster> · toast() · toast.promise()