Copied!
Ago app icon
Design System

Calm by
design.

Everything you need to design for ago — colors, type, components, motion, and the language behind them. One question answered beautifully: how long has it been?

ManropeTypeface
iOS onlyPlatform
Light primaryTheme
Dusty sageAccent
Brand

Brand Foundation

Ago is a calm iOS app built around one question: how long has it been since I last did X? The brand reflects quiet confidence, not productivity anxiety.

PERSONALITY
Calm, reliable, minimal
Like Things 3 or Bear — quiet, functional, never shouts. The app gets out of the way. Feels like linen and morning routines.
VALUE PROP
Peace of mind, not data
Ago gives quiet confidence that nothing is slipping. The output is peace of mind, not a dashboard. The app disappears; the confidence stays.
AUDIENCE
People, not power users
Home upkeep, sobriety tracking, plant care. Recurring-but-irregular things. Used briefly in the morning or evening. Not a to-do list. Not a habit tracker.
AESTHETIC
Serene utility
Warm off-white surfaces, dusty sage accent, weight-contrast typography. Organic and grounded. Anti: gradient blobs, wellness pastels, gamified streaks.
Anti-references: health/wellness apps with gradient blobs and soft pastels, gamified streak trackers, dashboard-heavy data views, fake-calm aspirational aesthetics.
Brand

Voice & Tone

Ago speaks plainly, warmly, and without fuss. No hype, no pressure, no em dashes. One sentence says what three can't.

Copy Rules
Rule Reason
No em dashesUse a hyphen or rewrite the sentence instead
No exclamation marksConfidence, not excitement. Excitement is noise
Sentence caseTitle Case feels formal; sentence case feels human
Active voice"Log it" not "It can be logged"
U.S. spellingOrganize, color, recognize
Short over cleverIf it needs explaining, it's not done yet
Examples
Do
"14 days since you watered the plant."

"Done. Logged for today."

"Add your first item to get started."
Don't
"Great job logging your activity - keep it up!"

"You're on a 14-day streak!"

"Track anything and everything that matters to you."
Brand

Design Principles

Five rules that govern every feature, screen, and element. When a choice is unclear, come back to these.

01
Restraint over decoration
Every element earns its place. When in doubt, remove it. The absence of noise IS the design.
02
Weight contrast over size contrast
Same font, dramatically different weights create hierarchy without visual noise. Resist reaching for bigger sizes.
03
The elapsed reading IS the interface
The number and its unit are the product. Everything else supports it. Name and elapsed time share visual weight as co-equals.
04
No wellness vibes
Organic and grounded, not aspirational fake-calm. Anti-pattern: gradient blob health apps, pastel wellness, gamified trackers.
05
iOS-quality feel
Spacing, touch targets, and transitions that feel native-grade. If it wouldn't ship in Apple's own apps, it doesn't ship here.
Foundations

Colors

Derived from OKLCH. Warm off-white surfaces, dusty sage accent, warm grey-brown neutrals. Never cold, never wellness-pastel. Click any swatch to copy the hex.

Light Mode
Token Value Swatch Usage
Dark Mode
Token Value Swatch Usage
Foundations

Card Palette

60 identity colors for items. Colorblind-safe hue spread (informed by Okabe-Ito). Each shows light tint / accent. Identity color is decorative only - status is never communicated by color alone.

Foundations

Typography

Manrope — a geometric sans-serif with excellent weight range. All hierarchy is created through weight contrast, not size jumps. Letter-spacing tightens at larger sizes.

Typeface
Aa
Regular
400
Aa
Medium
500
Aa
SemiBold
600
Aa
Bold
700
Aa
ExtraBold
800
Type Scale
Hierarchy in practice
Section label · 10px · ExtraBold
Title of the thing
Supporting context that explains or expands. Uses body weight against a heavier title to create pull without adding a third size.
14
days
Water the plants
Foundations

Spacing

No formal spacing scale - values are derived from iOS HIG conventions and the specific needs of the card layout. Key values below.

Foundations

Border Radii

xs
4px
sm
6px
chip
8px
card
14px
check
14px
pill
22px
fab
27px
sheet
32px top
Components

Item Card

The core unit of the app. 104px tall, borderRadius 14, hairline border. The elapsed number is the hero - ExtraBold 32px, identity accent color. Name is SemiBold 14px.

Water the plants
14 days
Morning run
3 days
Car oil change
94 days
overdue by 4 days
Water the succulents
0 days
Dentist checkup
172 days
due in 8 days
Card Anatomy
ElementValueNotes
height104pxFixed. Creates consistent rhythm in the list
borderRadius14px
borderWidthhairline (~0.5px)StyleSheet.hairlineWidth
paddingLeft18pxContent start
paddingRight62pxClears check button area
gap between cards8pxmarginBottom on each card
hero number32px / ExtraBold / tracking -1.2pxIdentity accent color
hero unit13px / RegulartextSecondary color
item name14px / SemiBold / tracking -0.1pxtext color
dot / icon size7px dot / 15px iconIdentity accent color
check button28x28px circleRight 18px, vertically centered
Components

Item Detail Screen

Full-screen view using the card's identity light/dark colors as background. Hero number is 80px ExtraBold, letter-spacing -3. Done Today is the primary CTA.

Back
Edit
Morning run
3
days
Last done June 25, 2026
Done today
History
June 25, 2026 Most recent
June 22, 2026 3 days later
June 19, 2026 First
Since Jun 19, 2026 · 3 times · avg every 3 days
Delete item
ElementValueNotes
header backgroundcard.light / card.darkIdentity color, not theme surface
hero number80px / ExtraBold / tracking -3 / lh 0.95Much larger than card (32px). Color: card dark tint at 95% opacity
hero unit17px / RegularSame text color as hero
Done Today buttonaccent bg / borderRadius 14 / paddingV 16 / 16px SemiBoldUses card accent color, not theme accent
Done Today (already done)accent at 16% opacity bg / accent textDisabled state — ghost of accent color
Delete itemdanger color / 15px Medium / centerText-only destructive action, no background
Components

Sheet

Native iOS pageSheet with swipe-to-dismiss. All sheets share the same header pattern: surfaceElevated background, 32px top radius, drag handle, Feather X close button.

Add item
Need ideas?
WHAT DID YOU DO?
e.g. Changed bed sheets
LAST DONE
June 28, 2026
REMIND ME AFTER
None
1d
3d
1w
2w
1mo
3mo
6mo
1y
COLOR
ICON
Save
PropertyValue
backgroundsurfaceElevated (#EEECEA / #272724)
borderTopRadius32px (SHEET_RADIUS)
drag handle36x4px, borderRadius 2, textTertiary at 40% opacity
handle padding-top10px above, 6px below
content padding20px horizontal
animationNative iOS pageSheet slide — swipe to dismiss
Components

Sort Sheet

Action sheet variant — no drag handle. Springs up from bottom, transparent overlay, tap outside to dismiss. Same SHEET_RADIUS 32. List options with check indicator for selected.

Sort by
Most overdue
Longest since done
Alphabetical
Manual
Pro
PropertyValue
backgroundsurfaceElevated
borderTopRadius32px (SHEET_RADIUS)
header17px Bold · paddingH 20 · paddingTop 16 · paddingBottom 10
option row16px · paddingH 20 · paddingV 15 · hairline border-bottom
selectedSemiBold weight + Check icon 18px accent color
animationSpring from bottom (tension 60 friction 11), no drag handle
Components

FAB + Tab Bar

A floating pill tab bar with the FAB alongside, centered as a unit at the bottom of the screen. Fixed total width: 238px.

TokenValue
FAB_SIZE54px
FAB_TAB_GAP12px
pill internal padding4px — gives active fill breathing room
tab item size82 × 46px · borderRadius 18px
pill outer size172 × 54px (= 2×82 + 2×4 = 172, 46 + 2×4 = 54)
TAB_PILL_WIDTH172px
BOTTOM_ROW_WIDTH238px total (172 + 12 + 54)
TAB_BAR_HEIGHT54px (= FAB_SIZE, pill outer height)
TAB_BAR_BOTTOM_MARGIN8px
FAB coloraccent (#3E7859 light / #5A9470 dark)
FAB shadow0 4px 8px rgba(62,120,89,0.3)
active tab fillaccent bg · white icon (fill weight) · borderRadius 18px
inactive tabno bg · textTertiary icon (regular weight)
active pill animationSpring scale 0.7→1 + opacity 0→1 on focus (tension 280, friction 18)
FAB + tab bar on detail navBoth live at Tab Navigator level (outside ItemsStack). Fade opacity 1→0 over 180ms when Detail is pushed; fade back 0→1 on return. FAB presses trigger add via fabStore event.
Components

Buttons

All button patterns used across the app. No standalone button component — styles are applied inline per context.

Primary — Save / Done Today
Done today
Primary — Disabled (no name entered)
Save
Done Today — Already logged
Logged today
Text link — accent color, no background
Need ideas? Log a different date
Destructive — text only, centered
Delete item
VariantStyle
primaryaccent bg · borderRadius 12-14 · paddingV 15-16 · 16px SemiBold · white text
primary disabledsurfaceElevated bg · textTertiary · same shape
done (already logged)accent at 16% opacity bg · accent text · same shape
text linkaccent or textTertiary · no bg · 13-14px · hitSlop 8-10
destructivedanger color · 15px Medium · no bg · center · paddingV 14
Components

Input Fields

WHAT DID YOU DO?
Changed bed sheets
LAST DONE
June 28, 2026
REMIND ME AFTER
None
1w
2w
1mo
3mo
Unit toggle (Item Detail) — on colored header
days
weeks
ElementValue
text inputsurfaceElevated bg · 1px border · borderRadius 10 · padding 12 14 · 15px Regular
date picker buttonSame as input · row with chevron-down at right · textTertiary chevron
pill unselectedsurfaceElevated · border · borderRadius 20 · padding 8 13 · 13px Regular · textSecondary
pill selectedaccent bg · accent border · white text · 13px SemiBold
unit chip selectedcard accent bg · card light color text · 12px SemiBold
unit chip unselectedaccent at 13% opacity · accent text · 12px Regular
field label10px Medium · textTertiary · letter-spacing 0.8px · UPPERCASE
Components

Settings Row

Reusable list row: colored icon wrap, label, optional value or Pro badge, chevron. Grouped rows share surface background with hairline separators and borderRadius 14.

Daily reminder 8:00 AM
Language
Privacy policy
ElementValue
group containersurface bg · hairline border · borderRadius 14 · overflow hidden
rowpaddingH 14 · paddingV 13 · gap 12 · hairline border-bottom between rows
icon wrap30x30px · borderRadius 7 · white icon 15px · color varies per action
label15px Regular · text color
value / trailing15px Regular · textSecondary color
chevronFeather chevron-right · 16px · textTertiary
Components

Pro Banner

Floating card shown to free users above the tab bar. Tappable — opens paywall. Height 68px, positioned absolute 16px above TAB_BAR_TOTAL.

Unlock Ago Pro More colors, icons, and sort options
Unlock
PropertyValue
height68px (BANNER_HEIGHT)
backgroundsurface
borderRadius16px
borderhairline · border color
icon wrap36x36 · borderRadius 10 · accentSubtle bg · Sparkle fill 18px
title13px SemiBold · text color · tracking -0.1px
subtitle11px Regular · textSecondary
unlock pillaccentSubtle bg · borderRadius 20 · 12px SemiBold · accent text
positionabsolute · left/right 16 · bottom TAB_BAR_TOTAL + 12
Components

States

Empty State
What have you been meaning to keep track of?
Pick one to start - Ago will tell you how long it's been.
Call parents
Wash the bedsheets
Workout
Browse more ideas
Toast
Light mode — dark (inverted) background
Logged for today Undo
Dark mode — light (inverted) background
Logged for today Undo
PropertyValue
background (success)colors.text — inverted: #1C1C1A in light, #F0EFEB in dark
background (error)colors.error (#C94040 light / #D45555 dark)
text (success)colors.background — inverted: #F6F5F2 in light, #141412 in dark · 14px Medium
text (error)colors.textOnAccent (white) · 14px Medium
action labelcolors.accent · 14px Bold · underline
borderRadius10px
padding14px vertical · 20px horizontal
positionleft 16px, right 16px, above tab bar
animationSpring from bottom (translateY 40 → 0, scale 0.92 → 1)
System

Motion

Purposeful, never gratuitous. Every animation serves a transition or provides feedback at a meaningful moment. Spring physics for spatial moves; easing curves for opacity/scale.

Principle: Animations acknowledge user intent and smooth state transitions. They should be felt, not noticed. If someone comments on an animation, it's probably too much.
System

Icons

Phosphor Icons (phosphor-react-native). Used at 15px in cards and 22px in the tab bar. Always weight="bold" in cards. Item icons use the card's identity accent color.

Free Tier Icons (Basic)
House
Heart
Car
ForkKnife
Drop
Run
Dog
Plant
Phone
Moon
Baby
Bell
Star
Smiley
Wave
Clock
Compass
Pro Icons (grouped)
Health & Fitness
Barbell
Bicycle
Tooth
Pill
Stethoscope
Eye
Scissors
Brain
FirstAid
Swim
Sneaker
Heartbeat
Thermometer
Syringe
Bandaids
Hike
Mask
Home & Life
Broom
Washing
Bed
GasPump
Coffee
Briefcase
PiggyBank
Wrench
CookingPot
Key
Cat
PawPrint
Spray
Towel
Lightbulb
Desktop
Bathtub
Toolbox
Nature
Flower
Leaf
Sun
Snowflake
Tree
Mountains
Campfire
Umbrella
Waves
Palm
Cloud
Wind
Horizon
Fish
Bird
Butterfly
Globe
Anchor
Hobbies & Culture
Music
Guitar
Headphones
Camera
FilmReel
Palette
GameCtrl
Wine
BookOpen
Trophy
Ticket
Mic
Bowling
Puzzle
Basketball
Cards
Volleyball
Soccer
Fun & Misc
Alien
UFO
Robot
Ghost
Skull
Rocket
Planet
Dice
Crown
Confetti
Wand
Lightning
Fire
Joystick
Bug
Sunglasses
Bomb
Binoculars