Try it

Generator

Describe the email you need. The generator returns a structured email rendered with the components below — same tokens, same patterns, no off-system output. The example below shows the output for an invitation prompt.

Generator offline · viewing sample output
Subject
You've been invited to Acme, Inc. on LinkSquares
Documentation

Email System

The LinkSquares email system. Password resets, receipts, invitations, and status notifications, shipped on-brand without a designer in the loop.

Three layers: foundations (color, type, spacing tokens) set the visual baseline; components (header, headline, button, badges, boxes, footer) are the building blocks; templates compose those blocks into the canonical transactional emails. The brand tokens are pre-set to LinkSquares purple, orange, and the email-safe type stack, so anything generated from this system inherits the brand automatically.

This documentation is the source of truth. Product managers and engineers compose templates from components rather than from old emails, and use the AI generator (a separate surface) when they need new copy. Designers extend the system rather than ship one-offs.

For the full case study (including the architecture argument and the strategic call to ship this in code rather than Figma), see the Email Design System case study.

Get started

Tone & voice

Transactional email is a contract. The user did something — signed up, asked for a reset, made a purchase — and we are confirming it back. The tone should match: short, helpful, unambiguous.

Principles

Clear & direct

Lead with what the user needs. Avoid throat-clearing openers. The headline should say what the email is, not greet the reader.

Helpful, not chatty

Explain what happened and what to do next. No filler, no marketing voice in transactional surfaces.

Active voice

"We've sent your code" — not "Your code has been sent." Active voice is shorter and clearer.

User-focused

Write from the user's perspective. "Your password has been reset," not "We have reset the user's password."

Do

Reset your password by clicking below. The link expires in 30 minutes.

Don't

Hi there! 👋 We hope you're having an awesome day! We just wanted to reach out about that password reset request you submitted...

Get started

Subject lines

The subject line is the only part of the email seen before it's opened. Keep it under 50 characters, lead with the noun, and skip the brand name — the sender field already carries that.

PatternExample
Reset your passwordReset your password
You've been invitedYou've been invited to Acme
Your code is NYour code is 482910
{Action} confirmedPayment confirmed
{Person} shared {N} {items}Jonathan shared 3 documents
Do

"Reset your password" — 19 characters, plain noun phrase, scannable in any inbox.

Don't

"[Acme] Action required: please reset your password to maintain account security" — too long, redundant brand prefix, urgency theater.


Foundations

Color

Color is intentionally restrained. LinkSquares orange is the primary CTA color — every transactional email has at most one orange button. Purple anchors brand presence in the wordmark and marketing chrome; blue is reserved for inline links. Everything else is a neutral or a semantic role.

Brand

Primary · Purple#492FC0
Primary dark#3A24A0
Primary light#EAE7FD
On primary#FFFFFF

Accent

Accent · Orange#FF8D59
Accent dark#E57E50
Accent light#FFF4ED
Link#3547F8

Neutrals

Surface#FFFFFF
Surface 1#FAFAF9
Surface 2#F4F4F2
Ink#1A1A1A
Ink soft#5A5A57

Semantic

Success#1F7A4D
Warning#B0791C
Error#B3261E
Info#2A6FB3
Foundations

Typography

The system uses an email-safe system font stack. Email clients are inconsistent about web fonts; restricting to system stacks means the same email renders the same in Outlook, Gmail, and Apple Mail.

-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif

Scale

Headline · 24/32 · 600
You've been invited
Body · 15/24 · 400
The invitation is valid for 7 days.
Body small · 13/20 · 400
If you weren't expecting this, you can safely ignore the email.
Footer · 14/1.5 · 400
Sent from LinkSquares
Foundations

Spacing

A 4px base scale. Email clients collapse vertical margins inconsistently — components own their own internal spacing rather than rely on margin between siblings.

TokenValueUsed for
--space-28pxTight pairings (badge padding, icon gap)
--space-312pxInline gaps, button vertical padding
--space-416pxParagraph spacing, list item gap
--space-624pxComponent vertical rhythm
--space-832pxEmail body horizontal padding

Component

Headline

One sentence. States what the email is. Renders directly under the logo header with no kicker, no greeting.

Size24 px
Line height1.5 (inherits container)
Weight600
Color#333333
Bottom margin24 px (before body)
Component

Body text

Paragraphs of explanation. One thought per paragraph. Bold for the action or the salient noun, never for entire sentences.

Component

Button

A single primary action per email. Renders as a fully rectangular padded link — most email clients strip background images and margin from <button> tags, so the system uses an anchor styled as a button.

Specs

Padding10 px / 16 px
Radius8 px
Type16 / 1 · 500
Background--color-accent (LinkSquares orange · #FF8D59)
Foreground#333333 (dark ink reads on the orange)
Do

One button per email. The button label restates the headline as a verb: "Reset password," "Accept invitation."

Don't

Stack multiple primary buttons. If the email needs more than one path, use a textual link as the secondary.

Component

Status badge

A small pill that labels a status — Approved, Pending, Failed, In Review. Used inside cards, never as a standalone headline element.

Approved
Success
In review
Info
Pending
Warning
Failed
Error
Component

List

Bullet or numbered lists for short enumerations — items shared, files attached, steps to take. Cap at 5 items; longer lists belong on a web page the email links to.

Component

Status box

A bordered region for an informational, success, error, or alert message. Sits between the body and the button. Reuses the semantic color tokens.

Standard
Success
Error
Alert
Component

Card

A bordered block that represents a single object — a shared file, a workspace, a payment, an attachment. Cards stack with no margin between them and have a built-in border, so multiple cards in a row read as a list.


Template

Invitation

Sent when a user is added to a workspace, project, or shared resource.

Template

Password reset

Sent when a user requests a reset. The link is the entire content; no marketing, no upsell.

Template

Status notification

Sent when a long-running job finishes (file uploads, exports, batch processing). Uses status boxes (error + success) to surface what happened and what needs attention.

Template

Sharing

Sent when a user shares an internal resource. Lists the items shared so the recipient knows what they're getting before clicking through.