D
Dispatch
Changelog Hub — the design system
styleguide · v1.0 · editorial / paper
01

Color tokens

Warm paper, warm near-black ink. One teal accent for Feature & primary; one warm red, spent only on Breaking.
Paper
#FBF8F2
Paper 2
#F4EFE5
Ink
#23201B
Ink 3 · meta
#5A5345
Accent · Feature
#1C6E63
Slate · Improve
#4B5B73
Neutral · Fix
#6E6757
Red · Breaking
#B23A2E
02

Type ramp

Soft serif for titles & the brand. Humanist sans for body & chrome. Mono for dates, versions, code.
displayShip it like you mean it.Fraunces · 46/1.04
h1What shipped this weekFraunces · 30/1.12
h2Per-key rate limitsFraunces · 22/1.18
leadA calm, dated record of every change — written by a human, read in five seconds.Inter · 17/1.55
bodyThe composer renders your markdown with the public page's exact typography, so what you write is what readers get.Inter · 14/1.6
small / metaPublished Feb 19, 2026 · 4,210 readers this monthInter · 12.5
monov2.14.0 · Feb 19, 2026 · 09:41JetBrains Mono · 13
small-capsFebruary 2026Fraunces · 12 · 0.14em
03

Buttons

One primary per zone. Same-row controls share height. Labels centered & nowrap.
04

Type pills, version & date stamps

The four entry types. Breaking is the only warm-red pill in the product.

Entry types

Feature Improvement Fix Breaking

Subscriber status

Active Unsubscribed Bounced

Version tag · date stamp · free-form tags

v2.14.0 Feb 19, 2026 api billing dashboard
05

Inputs & forms

One field component. Visible focus rings. Type selector is a segmented control.
Optional — leave blank for an unversioned note.
Entry type
06

Top navigation

One top-nav across the writer's workspace. Collapses to a hamburger drawer at ≤ 768px.
07

Public timeline rows

Mono gutter (version + date), type pill, soft-serif title, excerpt. The reader's core unit.
February 2026
v2.14.0Feb 19
Feature

Per-key rate limits for the v2 API

Set request ceilings on individual keys from the dashboard — defaults stay at 100 req/s, with per-key overrides on the Keys tab.

apidashboard
v2.13.0Feb 12
Breaking

The legacy /v1/charges endpoint is retiring

v1 charges sunset on Apr 1, 2026. Migrate to /v2/payments — a migration note is on the full entry.

apipayments
08

Rendered markdown · entry body

The typographic rhythm that is the product's whole pitch — headings, lists, code, images, the breaking callout.
⚠ Breaking change — action required

Replace calls to /v1/charges with /v2/payments before Apr 1, 2026. The response shape is unchanged; only the path moves.

You can now set request ceilings on individual API keys, directly from the dashboard. This is the most-requested control from teams running multi-tenant workloads on a shared account.

How it works

Each key inherits the account default of 100 req/s. Override any key on the Keys tab; changes take effect within a few seconds and are logged.

Setting a limit

  • Open Settings → API keys and pick a key.
  • Enter a per-second ceiling and save.
  • Watch live usage against the new ceiling on the same row.
bash
# set a 250 req/s ceiling on one key
curl -X PATCH https://api.acme.dev/v2/keys/key_8f4a2 \
  -d '{ "rate_limit": 250 }'
[ screenshot: per-key limits on the Keys tab ]
“Per-key limits let us give each customer their own ceiling without spinning up a second account.”
09

Widget snippet panel

The one dark surface in the product — a copyable embed block with a Copy action.
embed · in-app widget
<script src="https://cdn.dispatch.app/widget.js"
        data-workspace="acme"
        data-theme="auto" defer></script>
10

KPI stat tiles

Reserved for the subscribers header. Mono tabular numerics.
Subscribers
8,412
+214 this month
Digest open rate
41%
last 4 sends
Next digest
Mon
Feb 24 · 9:00am
Entries queued
6
1 breaking, leads digest
11

Subscriber table

≤ 6 columns, visible outer frame, status pills. Collapses to cards at ≤ 480px.
EmailSourceSubscribedStatusOpens
public-pageJan 14, 2026Active18
importedDec 02, 2025Active31
manualFeb 03, 2026Unsubscribed2
public-pageNov 21, 2025Bounced0
12

Alerts & toasts

Quiet by default. The danger register is reserved for the things that truly matter.
Draft autosaved. Every keystroke is saved — you can close this tab and pick up where you left off.
No version tag. This entry will publish as unversioned. Add a version, or publish as-is.
This week's digest failed to send. A transient issue interrupted the send. Retry now — no subscriber was emailed twice.
Entry published — live on the page, widget & next digest.
Snippet copied to clipboard.
13

Empty & loading states

Every empty state names one concrete next step. Skeletons match the real row shape.
No entries yet
Write your first release — it'll be live on your page in about four minutes.
14

In-app widget preview

A small unread dot in the host app's header; a calm panel. No confetti, no takeover.
Acme Cloud 🔔
What's new2 new
Feature
Per-key rate limits
Set request ceilings on individual API keys from the dashboard.
Improvement
Faster dashboard load
The overview now paints in under a second on a cold start.
15

Avatars

Solid single-hue fills from the palette for editor attribution.
PN MR DA SK PN MR
16

Modals

Publish-confirm lists what goes live. Digest-preview shows the send. Open on click; Esc / × / outside close.