iResendly · New Design

Design system

Everything here was taken from the Audience reference screens: colors were pixel-sampled and sizes measured at 2x and halved. Items marked derived don't appear in the screens and were derived from the same tokens.

Colors

Live values. Switch the theme to see the dark palette (derived).

Surfaces

backdrop
Page behind the app frame
shell
Sidebar + top bar
panel
Content panel
card
Cards, inner panels
card-outer
KPI outer shell
control
Inputs, selects, icon buttons
nav-active
Active nav item
hover
Nav hover (derived)
control-hover
Control & menu hover (derived)

Lines

border
Card + control borders
divider
Sidebar dividers
grid
Chart gridlines
goal
Goal line

Text

fg
Titles, values
fg-2
Nav, legends
fg-3
Subtitles, labels
fg-4
Axis, percentages
fg-5
Overlines, breadcrumb root
icon
Nav glyphs

Coral — brand

coral-50
Area fill
coral-100
Tick track
coral-200
Light bars
coral-300
Last-year line, chip border
coral-400
Bar caps, bracket
coral-500
Brand, primary series
coral-600
Knobs, outlines
coral-700
Coral text

Data & semantic

pink-500
Checkout opt-in
blue-500
Imports & referrals
blue-600
New this month
green-500
Positive trend, engagement
amber-500
Unsubscribe rate
red-500
Negative (derived)
gray-fill
Other / neutral fill
inverse
Dark tooltip

Typography

Inter (variable, optical size axis). Sizes matched to the screens by cap height and text width.

text-nd-display18,42028.5 / 34 · 400 · −0.02em · opsz 32 · Big totals
text-nd-titleAudience20 / 28 · 500 · −0.005em · opsz 32 · Page title
text-nd-metric1,28418.5 / 24 · 400 · −0.01em · KPI value
text-nd-headingAudience growth15.6 / 20 · 500 · opsz 32 · Card title
text-nd-bodyGrow and understand the people who follow you14 / 20 · 400 · Body copy (subtitle 13.5, source rows 14.5)
text-nd-navUnited States13 / 18 · 500 · opsz 32 · Nav, list rows, trend
text-nd-labelTotal audience12.5 / 16 · 400 · KPI labels, values
text-nd-captionContacts by country10.75 / 14 · 400 · Legends, card subtitles
text-nd-microSummer low · +5210 / 14 · 500 · Chips, tooltips, overline
overline
Workspace
10 / 14 · 500 · uppercase · +0.04em

Spacing & radius

4px rhythm with the exact offsets measured in the screens.

Spacing

3pxKPI shell inset
5pxNav item gap
7pxLocation row inset, icon→label
12pxOverline → items
14pxKPI gap, panel→sidebar
16pxPanel padding
17pxRow gap
18pxColumn gap
20pxCard padding
26pxHeader → KPIs

Radius

rounded-nd-xs
2px · swatch
rounded-nd-sm
6px · badge, tooltip
rounded-nd-md
7px · nav, chip
rounded-nd-control
8px · inputs, KPI inner
rounded-nd-shell
10px · app frame
rounded-nd-kpi
11px · KPI outer
rounded-nd-panel
14px · content panel
rounded-nd-card
20px · cards

App frame

1500px frame: shell inset 41px top / 86px sides · sidebar column 227px · top bar 68px · panel padding 16px · KPI grid 4 × 252px, gap 14 · growth row 1fr + 315px, gap 18 · bottom row 1fr + 1fr, gap 18 · card height 320px.

Borders & elevation

Hairline 1px borders carry structure; shadows stay barely visible. Dark theme uses deeper shadows (derived) so elevation still reads.

shadow-nd-xs
shadow-nd-card
shadow-nd-control
shadow-nd-pop
shadow-nd-btn

Icons

Custom duotone glyphs on a 16px grid. Left: nav tone (gray body, dark details). Right: active / default (secondary at 42%). Nav size 14px box.

spark
overview
audience
campaigns
content
automations
analytics
subscribers
segments
signupForms
integrations
performance
reports
revenue
help
settings
grid
search
bell
import
personPlus
people
chartSquare
mailBlock
calendar
chevronDown
chevronRight
arrowUpRight
arrowDownRight
checkCircle
xCircle
alertTriangle
infoCircle
close
check
edit
phone
building
pin
tag
file
copy
download
eyeOff
trash
upload
link
mail
key
webhook
code
lock
shield
clock
server
wifi
gauge
wrench
card
pause
play
heart
comment
share
repost
bookmark
send
archive
inbox
star
paperclip
mailOpen
keyboard
bold
italic
underline
strike
listBullet
listOrdered
quote
undo
redo
clearFormat
textFormat
smile
expand
collapse
minus
print
reply
replyAll
forward
compass
fileWarn
templates
social
media
list
refresh
signOut
external
globe
wave
menu
eye
desktop
mobile
sun
moon
plus
kebab

Buttons & inputs

Buttons

primary
secondary
ghost derived
danger derived
Icon

Inputs

Selects

Data display

KPI cards

Total audience
18,420
+6.2%vs. prior period
New this month
1,284
+12.1%vs. prior period
Engagement rate
46.2%
+2.4%vs. prior period
Unsubscribe rate
0.4%
-0.1%vs. prior period

KPI cards · footer variant

Current plan
Growth
Active
Contacts used
18,420 / 20,000
1,580 remaining
Emails sent
42,800
of 50,000 monthly limit
Emails remaining
7,200
85.6% used this period

Tick meters

Trend

+6.2%vs. prior period
-0.1%vs. prior period
-3.4%vs. prior period

Chips & tooltips

Summer low · +52Goal reached · Dec 2This month · 1,284US

Legend

Total contactsLast yearWeekly signupsGoal

Source bars

Signup forms45%8,240
Checkout opt-in34%6,180
Imports & referrals22%4,000

Location rows

Contacts by country
USUnited States7,92043%
GBUnited Kingdom2,58014%
CACanada1,84010%
· ·Other countries3,68020%

Description list

Campaign details

Type
Regular campaign
From
Harbor & Co.
hello@harbor.co
Reply-to
—
Created
Oct 12, 2026

Tracking

Track opens
On
Track clicks
On
Social sharing
Off

Status colors

Six tones, each with solid · soft · line · ink tokens in both themes (derived; solids reuse the sampled green, amber and blue).

success
success
success-soft
success-line
success-ink
dot · live
danger
danger
danger-soft
danger-line
danger-ink
dot · live
warning
warning
warning-soft
warning-line
warning-ink
dot · live
info
info
info-soft
info-line
info-ink
dot · live
neutral
neutral
neutral-soft
neutral-line
neutral-ink
dot · live
brand
brand
brand-soft
brand-line
brand-ink
dot · live

Product states

ActiveSentPublishedDeliveredConnectedSendingPublishingScheduledProcessingUnsubscribedSuppressedComplainedInvalidDraftCancelledArchivedPausedPendingExpiringFailedBouncedDisconnected

Variants

soft
ActiveScheduledPausedFailedDraftSending
outline
ActiveScheduledPausedFailedDraftSending
plain
ActiveScheduledPausedFailedDraftSending

Inline alerts

Domain verified
harbor.co is ready to send.
Import in progress
1,284 of 2,000 contacts processed.

Toasts

Bottom-right stack (max 4). Hover pauses the countdown line; errors stay 7s, loading stays until resolved.

Static preview

Campaign sent
Delivered to 18,420 contacts.
Couldn't send campaign
Your sending domain isn't verified.
Bounce rate is rising
4.1% this week — above the 3% safe limit.
New import format
You can now import from Shopify.

Forms

Fields are 32px — the same height as buttons — radius 8, 13px text. Focus: coral border + 3px glow. Invalid: danger border. Labels 12.5px/500 (derived).

Text fields · states

Helper text sits under the field.

Enter a valid email address

https://
@harbor.co

Locked by your workspace admin.

Full-width form select with descriptions and a check on the chosen item.

Choose a sender

0 / 140

Shown in the inbox preview.

Drop a file here or
CSV or XLSX, up to 10 MB
subscribers-march.csv
1,204 contacts found

Checkbox

Radio

Switch

Choice cards

Segmented

Form layout

Sender

Who your emails come from.

@harbor.co

Leave empty to use the from email.

Notifications

Alerts for your workspace.

Modals

Card surface (radius 20, 1px border), footer on the KPI-shell tint. Focus is trapped; Esc and the scrim close it (derived).

Danger is the only filled colour button; it appears only inside a confirm step.

App shell & top bar

Sidebar states (default · locked · compact rail · upgrade card) and the top-bar parts: command search (⌘K), product switcher, notifications, user menu.

Top bar

Press ⌘K to focus search · ↑ ↓ to move · Enter to open · Esc to close.

Locked (no subscription)

Compact rail

Rules

  • Locked items keep their place, turn fg-5 with a lock glyph and are not links (aria-disabled).
  • The compact rail (64px) is used by sub-apps with their own side panel (Settings, Media); labels move to right-side tooltips.
  • The upgrade card only appears in the sidebar footer while the product is locked.
  • Below 1024px the sidebar becomes a drawer opened from the menu button; it closes on navigation, Esc or the scrim.

Notifications

Built only from existing parts: bell icon button + brand status dot, menu surface, card-title + NdBadge header, segmented filter, menu rows with status-tone tiles, ⋮ row menu (read/unread, dismiss with Undo), ghost buttons.

Live trigger — opens under the bell, closes on Esc or outside click.

With activity

Notifications

3
Today
  • Spring launch was sent

    Delivered to 18,420 contacts · 46.2% opened in the first hour.

    2m ago · View report
  • Bounce rate is rising

    4.1% this week on harbor.co — above the 3% safe limit.

    38m ago · Review bounces
  • Import complete

    1,284 contacts added to Newsletter. 16 duplicates skipped.

    1h ago
  • New signups milestone

    Your signup form passed 8,000 subscribers.

    3h ago
Earlier
  • Payment failed

    We couldn't charge the card ending 4242 for $49.00.

    Yesterday · Update card
  • Welcome series paused

    Sarah paused the automation while editing step 2.

    Mar 12
  • Domain verified

    harbor.co is ready to send.

    Mar 10

Loading

Notifications

3
Today

Empty

Notifications

You're all caught up

Activity from campaigns, imports and billing shows up here.

Tabs, pagination, stepper & timeline

Tabs are sidebar nav items in a row. Pagination uses small icon buttons with the nav-active fill. Steps are icon tiles: success when done, active when current, outline when upcoming. The timeline reuses the step tiles and hairline for flows such as an automation sequence; gaps carry a label on the line.

Page header

Spring launch

Campaign · Scheduled for Mar 14, 9:00 AM

Maya Okafor

maya@harborandco.com

ActiveAdded Mar 14, 2026

Side navigation

Tabs

Last 30 days

Use ← → to move between tabs.

Pagination

Stepper

  1. Recipients
    Who gets it
  2. 2
    Content
    Design the email
  3. 3
    Schedule
    When it sends
  4. 4
    Review
    Check and send

Stepper · vertical checklist

  1. Import contacts

    Upload a CSV or connect an integration.

  2. 2
    Create your first campaign

    Pick a template and write your message.

  3. 3
    Track results

    Opens, clicks and bounces appear here.

Timeline · automation sequence

  1. Trigger: Welcome Email
    A new subscriber joins your list
  2. Send right away
  3. Welcome to the club
    Subject: Thanks for joining — here's 10% off
    Email 1
  4. Wait 2 days
  5. Getting started
    Subject: Three ways to get more out of your plan
    Email 2
  6. Exit
    Unsubscribes · makes a purchase

Lists, avatars & tags

List views reuse the card, tick meter and status badges; avatars and tags reuse the status tones and badge geometry; tooltips are the chart's dark annotation chip.

Preview cards

Private
Spring launch
Promotional · Updated Oct 12, 2026
Public
Weekly digest
Newsletter · Updated Oct 6, 2026
Community
Welcome series
Welcome · Updated Sep 30, 2026

Email preview

Sent
Inbox
Harbor & Co.
Harbor & Co.hello@harbor.co
Fresh arrivals for spring — 20% off this weekend only
Desktop · full width

Avatars

Jane CooperOmar HaddadPriya RamanLucas Moreau
Jane CooperOmar HaddadPriya RamanLucas Moreau+2

Tags

NewsletterVIP customersSpring launch
BrandInfoSuccessWarningDanger

Tooltips

Wizard

One slim bar stays in view: the way out, what you're making, and where you are. Each step asks a question.

New campaign

Step 3 of 4

Who should receive this?

A step's heading is the question it asks.

Preview
Gallery card
Hover for actions

Editing marks

For the email builder's toolbars. Everything else uses the duotone icons above.

Code block

Page-visit pixel token
px_example_token_for_this_style_guide

Long values wrap instead of scrolling.

Code sample (languages)

POSThttps://api.example.com/emails
curl -X POST 'https://api.example.com/emails' \
  -H 'Authorization: Bearer key_xxx'

Product accent (Developer API is pink)

12Sending
Emails this month64%

Choice cards

Coming soonNot available yetCRMWithout an action it's muted and doesn't respond to clicks.

Numbered steps

  1. 1
    Instructions, not progress

    Use the stepper when steps get done. Use this when they're just something to read.

  2. 2
    All equally readable

    Nothing is greyed out, because nothing has been completed.

Form skeleton

Search & pick

Combobox: a filter or single choice with search, for lists too long for a select. Chip select: pick several from a visible set. Swatches: a colour palette instead of the OS colour picker.

Rule flow on a board panel, with add slot and catalog picker

Who's included

Contacts who match these rules…

  1. Everyone you can email
  2. 1
  3. and
  4. 2
    Date addedis afterOct 2, 2026
  5. If all are true → they join this segment1,204 contacts right now

Media library parts (asset card, folder list, storage meter)

Storage168 MB of 512 MB
Spring banner.png
1672 × 941 · 2.3 MB

Attention list (several things to do, instead of stacked alerts)

  • You've used this period's email allowance
    New campaigns won't send until it resets.
  • Room for 30 more contacts
    Imports stop at your limit.
  • Your plan ends on Nov 14
    You keep full access until then.

Slot picker (a few out of many, when how many matters)

Spring launch
Oct 12, 2026
Open
32%
Click
6%
Weekly digest with a much longer name that wraps onto two lines
Oct 9, 2026
Open
24%
Click
3%

Multi combobox (long lists, full names)

  • Newsletter subscribers4.2K
  • VIP customers318

Combobox

Chip select

Swatches

Platforms, calendar & post preview

Brand marks are the only icons that keep their colour (X and TikTok follow the foreground). The platform tile is the outline icon tile with a brand mark; a second brand or an account photo sits as a corner badge. The month calendar is a table card with status-tone pills (dots on phones) and an optional colour key. The post preview keeps each network's layout and order on nd surfaces, in the same nested-card stage as the email preview.

Brand marks · platform tiles

Month calendar

November 2026

6 posts
PublishedScheduledPublishingFailed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12

Date & time picker

Past times are disabled. Presets, keyboard arrows, 15-minute slots.

Closes when you pick a day.

Pick a date and time that hasn't passed

Media uploader

Uploading

Up to 4 files · images or video. Drag files onto the tile.

Media modal

Library, search, folders, multi-select, uploads with progress.

Social post preview

Preview · Facebook · Feed post
Harbor Coffee
Harbor Coffee
2h

Spring blend is back ☕ Bright, citrusy and roasted this morning. Grab a bag before Friday #springblend @harbor

harbor.coffee
https://harbor.coffee/spring
1,28446 comments · 18 shares
LikeCommentShare

Progress, empty & error states

Progress is the signature tick meter. Empty states are an icon tile, a card title and pill actions. Error states are the empty state in the danger tone with Try again; the slow notice appears when loading runs long.

Progress

Importing contacts.csv1,284 of 2,000
Monthly sends42,800 of 50,000
Domain warm-upComplete
Contacts on plan18,420 of 20,000

Empty states

No campaigns yet

Create your first campaign to start reaching your 18,420 contacts.

Nothing to review

All bounced contacts have been cleaned up.

Recent campaigns

Section that failed to load

Couldn't load your campaigns

The server had a problem loading your campaigns. Try again in a moment.

This is taking longer than usual
Still loading your campaigns. The connection or our servers may be slow right now.

Tables

Card frame, overline headers, menu-row hover, brand-soft selection, footer bar for pagination. Full example with filters, bulk actions and sorting on the Subscribers screen.

StatusSegmentsOpened
Jane Cooper
Jane Cooper
jane@harbor.co
Subscribed
NewsletterVIP customers
62%
Omar Haddad
Omar Haddad
omar@gmail.com
Pending
Webinar
18%
Priya Raman
Priya Raman
priya@outlook.com
Bounced
—
—
Open the Subscribers screen

Status screens

One component for HTTP errors, warnings, success and failure — status tile, code badge, title, next step. Standalone page or inside the app panel.

Charts

Hand-drawn SVG so every offset matches the screens exactly; data read off the reference pixels.

Campaign performance

Open rateClick rateBounce rate

Audience growth

Total contactsLast yearWeekly signupsGoal

New contacts

12 weeks to Dec 14

Grouped bars

The same values across a few named things
Open rateClick rateBounce rate

Skeletons

Each mirrors its component's shape; shimmer sweeps right to left.

Shell first paint (replaces full-screen spinners)
Loading…