vito.
design book · A4 · vol. 01
volume 01 · spring '26 design book
vito.

A design system for a virtual try-on app, drawn as an atelier.

Before it's yours — a quiet fitting room for the considered pause before you commit. This book is the language in which Vito is written: its pigments, its voices, its marks, its moments.

foreword vito. vol. 01 · sp'26

The problem is not visualisation.

Every competitor in the virtual try-on space is racing to feel faster, lighter, more technologically impressive. They have read the brief as a visualisation problem — "what would this look like on me?" — and they design accordingly. Sci-fi blues. Glass surfaces. AI-powered taglines. Try-on-as-tech-demo.

The real problem is quieter. It is the pause before you commit. The second-guess before checkout. The considered moment in a fitting room when you turn, slightly, and try to decide whether this is you. That moment is intimate, emotional, and almost comically underserved.

Vito is not a try-on tool. Vito is a tailor. An old-world name for an old-world profession, applied with precision to a new one. The product is designed not to race but to compose; not to generate but to reveal; not to show you what you look like in something, but to hand you the thread back and ask — does it suit you?

This book is the language Vito is written in. It has three parts. The atomic layer — palette, type, grid, icons — is the raw material. The behavioural layer — motion — is how the product breathes. The compositional layer — the home, the reveal, the archive, the threshold, the stress test — is the product speaking in full sentences.

What follows is nine specimens, one coda. A designer arriving tomorrow would have what they need by the end of it. An engineer likewise. The language is small enough to be held in one head, and rigorous enough not to drift when three people touch it at once. That balance is the whole point.

nine specimens · one coda · one language — to begin.
— 2 —foreword
contents vito. vol. 01 · sp'26

Contents.

Nine specimens. Read them in order on first visit. Return to them out of order forever after.

01
The atelierPalette. Papers, inks, the seal. The pigments of the room.
p. 4
02
The three voicesType. Serif, sans, mono. How the page is set.
p. 5
03
Grid & rhythmBase eight. Margin twenty-eight. The cadence of the page.
p. 7
04
The handIcons. Phosphor Fill, ink by default, twelve in the working set.
p. 9
05
MotionThree curves. Five durations. The held breath of the reveal.
p. 11
06
The compositionsThree signature screens. The atelier home. The reveal. The archive.
p. 13
07
The alphabetThirteen components. All extracted from real screens.
p. 16
08
Graceful failureError and empty states. The stress test.
p. 18
09
The thresholdOnboarding. The first sixty seconds.
p. 20
CodaA closing note. The rules that govern the rules.
p. 22
— 3 —contents
specimen № 01  ·  palette vito. vol. 01 · sp'26

The atelier.

Paper, thread, linen, ink. Materials the body already knows, photographed in the light of a tailor's back room. Every pigment has a physical referent you could pick up and touch.

i. papers

surfaces · grounds
Ivory
#F5EEDC
Uncoated page. The canvas.
Linen
#E8DDC5
Woven raw flax. Surfaces.
Muslin
#D7C9AA
Dividers, chips, hairlines.
Kraft
#B8A887
Archive covers, deep cards.

ii. inks

text · line
Ink
#1F1B14
Warm black. Wordmark, headings, primary text.
Graphite
#5A5243
Body copy, secondary labels.
Chalk
#8E8674
Metadata, timestamps, muted states.

iii. the seal

the one accent
Seal
#8C2A24  ·  cochineal

Cochineal — the red of a tailor's thread and a wax stamp. Used sparingly: the period after vito, the tick on a kept item, the seal on a signed post. Never a button fill. The mark, not the field.

— 4 —palette · papers · inks · seal
specimen № 01  ·  continued vito. vol. 01 · sp'26

iv. marks

states · signals
Thread
#5F6B3F
The ledger's tick. Kept, confirmed, noted.
Chalk-blue
#3E4F67
A tailor's chalk. Drafts, processing, passed.

v. evening

after hours

The atelier at dusk. A single lamp. Not an inversion of the day palette — a different room.

Walnut
#14100B
Paper-light
#E8DDC5
Graphite-rev
#A69F8C
Seal, lit
#A83E36

the rules

non-negotiable
01
The page is not white. Ivory is the default.
02
The Seal is a mark, never a field. Period, stamp, tick — never a button fill.
03
Two functional marks only. Thread confirms. Chalk-blue drafts or processes.
04
Errors borrow the Seal. No separate error colour exists.
05
Evening is a room, not an inversion. Walnut preserves paper-and-ink logic at night.
06
If the palette asks for a sixth colour, the problem is elsewhere.
— 5 —palette · marks · evening · rules
specimen № 02  ·  type vito. vol. 01 · sp'26

Three voices.

A serif that speaks, a sans that works, a mono that stamps. Each chosen so the page feels set, not typed. All three free for commercial use under the SIL Open Font License.

i. the serif  —  Fraunces

display · editorial · italic-first
vito.
wordmark · italic · weight 300 · the period is always cochineal
36 / 1.1 The linen shirt. 24 / 1.15 Does it suit you? 14 / 1.6 Raw oatmeal linen, generous cut. Photographed in afternoon light against a cream wall. Kept in the spring volume.

Italic is the default serif voice. Upright is the exception, reserved for long editorial paragraphs where italic would fatigue. This is inverted from ninety-nine percent of type systems — it is what makes the voice unmistakable.

— 6 —type · serif · Fraunces
specimen № 02  ·  continued vito. vol. 01 · sp'26

ii. the sans  —  Geist

UI · chrome
12 / 400 Upload a photo of yourself. First upload becomes your primary. 11 / 500 Keep  ·  Pass  ·  Regenerate 10 / 400 Tap to set as primary. Existing studies are preserved.

Sentence case. Two weights only: 400 regular, 500 medium. Never bold a word inside a sentence. The sans is the valet, not the host.

iii. the mono  —  Geist Mono

metadata · stamps
study no.
012
date
14.03.26
gen.
7.2s
vol.
01 · sp'26

Mono is the catalogue. Numbers, serials, timestamps. Used sparingly — if everything is stamped, nothing is.

iv. in conversation

the three together
study no. 012 14.03.26
The linen shirt.
Raw oatmeal linen, generous cut. Photographed in afternoon light.
Does it suit you?
KeepPass

Mono timestamps. Serif names and describes. Sans asks what to do. Three voices, three jobs. They never trade places.

the rules

non-negotiable
01
Italic is the default serif voice. Upright reserved for long editorial paragraphs.
02
Sentence case everywhere. Not Title Case, not ALL CAPS.
03
Two weights only across the entire system. 400 and 500.
04
Never bold a word mid-sentence. Hierarchy through size, colour, italic, space.
— 7 —type · Fraunces · Geist · Geist Mono · all OFL
specimen № 03  ·  grid & rhythm vito. vol. 01 · sp'26

A base of eight.

Margins held wide. A baseline the eye can feel even when it can't see it. The grid is the least glamorous specimen and the most load-bearing.

i. the spacing scale

base 8 · in px
4
8
16
24
32
48
64
96
close

4, 8, 16 — inside a component. Between a label and its value. The tick and the seal.

separated

24, 32, 48, 64, 96 — between sections. Between image and caption. Between one study and the next.

ii. the mobile page

390 · 4 col · 28px outer
vito. vol. 01
The linen shirt.
Raw oatmeal linen.
margin

28px outer. Most apps hold 16. We give up the width.

columns

4 on mobile. 12 on desktop. Same content, different measure.

gutter

16px between columns. Tight. The margin does the breathing.

— 8 —grid · scale · mobile page
specimen № 03  ·  continued vito. vol. 01 · sp'26

iii. vertical rhythm

8px baseline
study no. 012
The linen shirt.
Raw oatmeal linen, generous cut. Photographed in afternoon light against a cream wall.
Does it suit you? Keep

Every line sits on a rule. Every gap is a multiple of eight. Line-height is part of the grid, not a separate choice — 16 gets 24, 24 gets 32, 32 gets 40.

the rules

non-negotiable
01
All dimensions are multiples of 8. 4 is reserved for hairline adjustments.
02
Mobile outer margin is 28, not 16. The air is the product. Hold this line.
03
Close or separated. Choose 24 or 48. Never 36. No values between.
04
Line-height is part of the grid. Baseline rhythm is what makes paragraphs feel set.
05
No full-bleed images on editorial screens. The margin holds.
06
When in doubt, add air. Take nothing away from the seal.
— 9 —grid · rhythm · rules
specimen № 04  ·  the hand vito. vol. 01 · sp'26

The hand.

Icons drawn, not stroked. Phosphor Fill — free, MIT-licensed, solid weight built in. Twelve in the working set. Labels always. Never a guess.

i. the starter set

phosphor · fill · MIT
Seal
circle
Check
check
Cross
x
Plate
image
Page
file
Volume
trend
Bust
user
Garment
bag
Lens
camera
Ribbon
bookmark
Rules
list
Kept
check-circle

A closed vocabulary. Naming keeps it in the atelier: seal not circle, plate not image, page not file. The Phosphor identifier is in mono below each name — for the engineer's import statement.

— 10 —icons · twelve · phosphor fill
specimen № 04  ·  continued vito. vol. 01 · sp'26

ii. ours vs. theirs

the difference
lucide / stroked

Uniform 2px stroke. Hollow. Correct. Generic. Could sit in any product.

vito · phosphor fill

Solid. Weighted. Sits on the page like type. Could only be us.

iii. in context

labels always
reveal · footer
Does it suit you?
Keep Pass

the rules

non-negotiable
01
Phosphor Fill only. Never mix with Regular, Duotone, or Thin.
02
Ink colour by default. Cochineal reserved for the Seal and the Kept state.
03
Twelve icons in the working set. A thirteenth requires retiring one.
04
Icons accompany words. Never stand alone in primary UI.
05
If a word will do, a word does. Scarcity is the discipline.
06
Install @phosphor-icons/react, use weight="fill".
— 11 —icons · ours vs theirs · rules
specimen № 05  ·  motion vito. vol. 01 · sp'26

The held breath.

Three curves. Five durations. Motion is identity for Vito because every other app is racing to feel faster, and we earn our place by refusing that race.

i. the reveal  —  three beats

0 · 400 · 1000 · 2400ms
t = 0ms
Empty frame. Dots pulsing.
t = 400ms
Frame settles. Dots fade.
t = 1000ms
Warmth enters. Lamp up.
t = 2400ms
Image resolves. Held.

Beat 1 uses the whisper curve for 400ms. Beat 2 warms with the curtain curve for 600ms. Beat 3 resolves with the curtain curve for 1400ms. Total: 2.4 seconds. Nothing else moves after; nothing suggests "tap me." This is the silence after.

— 12 —motion · the reveal · three beats
specimen № 05  ·  continued vito. vol. 01 · sp'26

ii. the three curves

the whole system
The curtain
cubic-bezier(.2,.8,.2,1)

Slow start, swift finish. Reveals and major transitions.

The drawer
cubic-bezier(.4,0,.2,1)

Balanced. Everyday transitions.

The whisper
cubic-bezier(0,0,.2,1)

Sharp start, soft tail. Tooltips, meta.

iii. the duration ladder

five rungs
80ms
the tick
icon state change, selection shift 200ms
the pass
hover, button press-down 400ms
the door
modal opens, tab transition 700ms
the page
screen-to-screen navigation 1200ms
the curtain
the reveal, the one moment we hold

the rules

non-negotiable
01
In ease-out, out ease-in. Arrivals decelerate; departures accelerate.
02
No bounce, no elastic, no overshoot. Our curves are velvet, not rubber.
03
Five durations only. 80, 200, 400, 700, 1200. 350ms is forbidden.
04
Respect prefers-reduced-motion. Curtains collapse to doors.
— 13 —motion · curves · durations · rules
specimen № 06  ·  compositions vito. vol. 01 · sp'26

Three signature screens.

The atomic and behavioural layers, now speaking in full sentences. The home is the room. The reveal is the moment. The archive is the record.

a. the atelier home

the room

On opening the app, the user arrives somewhere continuous with their last visit. No greeting, no streak, no "you have 3 unfinished studies" nudge. No tab bar. The most recent study sits on the workbench; the current volume is open to its latest spread.

9:41
vito.vol. 01 · sp'26
on the workbench012 · 14.03
The linen shirt.
Raw oatmeal linen. Kept yesterday.
kept Revisit
the current volume42
correspondence
Rohan kept a linen shirt.
1 new · this week
Try something new.
Upload Catalogue
① masthead

Wordmark plus volume context. No avatar, no notifications. Ever.

② the workbench

The most recent study, full-frame. This is the continuity — the user picks up where they left off.

③ the current volume

A 4-up contact sheet of this season's studies. Tappable.

④ correspondence

One line only. What your small circle kept this week. No feed.

⑤ closing prompt

An invitation, not a tab bar. The two doors out: something new, or the catalogue.

— 14 —the atelier home · the room
specimen № 06  ·  continued vito. vol. 01 · sp'26

b. the reveal  —  three states

the moment

The product's emotional payoff. The in-progress page is composed before the image exists; when it arrives, it fades into a frame that was always waiting. On Keep, a cochineal wax seal is applied to the page and stays there forever.

i · in progress
9:41
vito.vol. 01
study no. 013in progress
Drafting...
The cotton tunic.
Preparing your study...
ii · revealed
9:41
vito.vol. 01
study no. 01314.03.26
The cotton tunic.
Unbleached cotton.
Does it suit you?
Keep Pass
iii · kept
9:41
vito.vol. 01
study no. 013 kept
The cotton tunic.
Added to spring.
Try another?
New garment
in progress

Empty frame. Chalk-blue dots (system state, not failure). Gentle cadence.

revealed

Three-beat choreography. Frame settles, warmth enters, image resolves.

kept

Cochineal wax seal. Permanent. The decision is on the page forever.

— 15 —the reveal · three states · one posture
specimen № 06  ·  continued vito. vol. 01 · sp'26

c. the archive  —  three layers

the record

Organised by volume, not by date. Each volume is a season's issue with a cover, a count, and an emergent palette drawn from its own studies. The shelf is a bookshelf, not a photo library. No search bar in v1.

i · the shelf
9:41
vito.archive
Four volumes.
136 studies since summer '25.
Vol. 01 — Sp '26current
Linen, oatmeal.
42 · 11 kept
Vol. 04 — Wi '25closed
Wool, evergreen.
38 · 14 kept
Vol. 03 — Au '25closed
Rust, tobacco.
29 · 9 kept
Vol. 02 — Su '25closed
Sun-bleached.
27 · 8 kept
ii · volume open
9:41
vito.vol. 01
volume 01
Spring '26.
Linen, oatmeal, riviera.
all 42 kept 11 drafts 31
iii · narrative
9:41
vito.narrative
early spring
You began with cotton. Cautious cuts. Two kept.
mid spring
Bolder colour crept in.
this week
Still linen. Still you.

The narrative view is AI-generated from each volume's pattern of Kept and Passed decisions. Vito writes a single italic serif sentence that describes what this cluster reveals about the user's evolving taste. Never flattering, never generic. Low confidence falls back to the mono cluster heading alone.

— 16 —the archive · shelf · volume · narrative
specimen № 07  ·  the alphabet vito. vol. 01 · sp'26

Thirteen primitives.

Every screen in the system can be assembled from these pieces. Naming keeps the atelier alive — masthead not header, frame not card, stamp not badge.

Rule
<hr /> · 0.3mm ink

A hairline. The quietest divider. Never bold, never coloured.



Masthead
<Masthead />

Top strip. Wordmark, context, mono timestamp. No avatar. No notifications.

vito. vol. 01  ·  14.03
Frame
<Frame aspect="4/5" />

The image container. Crop marks at the corners. Linen fill when empty.

Caption
<Caption title sub />

Italic serif title, graphite sub. Lives below a frame. Never above.

The linen shirt.
Raw oatmeal linen, generous cut.
Meta Strip
<MetaStrip />

Mono row. Study number, date, generation time. Always ranged left-right.

study no. 012 14.03.26 gen. 7.2s
Action Row
<ActionRow prompt />

Italic prompt left, two links right. The choice is always binary.

Does it suit you? KeepPass
Tag
<Tag state />

Tiny mono chip. Kept in Seal, drafts in Chalk-blue, closed in Chalk.

kept draft closed
— 17 —alphabet · primitives i — vii
specimen № 07  ·  continued vito. vol. 01 · sp'26
Button
<Button />

Rare. Outlined, not filled. Primary action only. Never Seal-coloured.

Upload Later
Link
<Link />

The system's workhorse. Text with a hairline underline. No hover fills.

Keep Pass Revisit this study Delete
Stamp
<Stamp variant />

The wax seal. Applied on Keep. Permanent. Small corner mark is the default.

vitoKEPT v.
full · on hero reveal
mark · on archived
Dot Cluster
<Dots tone />

Processing. Three dots, fading trail. Chalk-blue for neutral, Seal for actively composing.

Card
<Card />

Study card. Frame + meta strip + caption + action row. Not a "card" — a study.

study 01214.03
The linen shirt.
Does it suit you?Keep
Contact Sheet
<ContactSheet />

The volume view. Grid of plates. Kept gets a corner dot; passed dims.

the rules

non-negotiable
01
Thirteen primitives. A fourteenth requires retiring one. Pressure keeps the language small.
02
Every component is named from the atelier. Masthead, not header. Stamp, not badge.
03
Buttons are rare. Links do most of the work. Seal never fills a button.
04
Containers do not stack. A Frame never lives inside a Card inside a Section inside a Wrapper.
— 18 —alphabet · primitives viii — xiii · rules
specimen № 08  ·  graceful failure vito. vol. 01 · sp'26

Graceful failure.

The stress test. Vito takes the blame, never the user. Empty states don't guilt. Errors borrow the Seal — we do not invent a new colour for bad news.

9:41·
vito.
An empty shelf.
Upload a photo to start your first study.
Upload
i · first-run
An empty shelf.

No zero state, no mascot, no "get started" coaching. A single sentence naming the condition. One door out.

9:41·
vito.
kept · 0
Nothing yet. A volume takes its time.
ii · zero kept
A volume takes its time.

The drafts are visible, dimmed. Patience is modelled. No "Keep more!" nudge.

9:41·
vito.
I couldn't finish this study.
Try againLater
iii · generation failed
"I couldn't finish this study."

First-person apology. Vito takes the blame. No error code. Seal-bordered frame, not red banner.

9:41·
vito.
I need a clearer photo — face unobstructed, soft light.
Try another
iv · upload rejected
"I need a clearer photo."

States what Vito needs, not what the user did wrong. Specific: face unobstructed, soft light.

— 19 —failure · i — iv
specimen № 08  ·  continued vito. vol. 01 · sp'26
9:41offline
vito.
The archive is still here. New studies will wait for a signal.
last sync · 14.03 · 08:12
v · offline
Archive still here.

The past is always readable. New studies queue quietly. No banner, no alarm.

9:41·
vito.
I'm drafting a lot today. One more after the hour.
next · 10:04
vi · rate limited
Drafting a lot today.

Concrete time. Self-aware phrasing. The limit is framed as Vito's capacity, not the user's over-use.

9:41·
vito.
delete · study 012
This one will leave the archive. It won't come back.
Keep it Delete
vii · destructive
Won't come back.

The one exception: Seal-coloured link text. The gravity is borne by the word, not a red button.

the rules

non-negotiable
01
Vito takes the blame. First person: I couldn't, not You entered.
02
No red banners. Errors borrow the Seal, or nothing. The palette admits one accent.
03
Empty states don't guilt. No streaks, no counts, no "you haven't kept anything yet."
04
Destructive confirm uses Seal link text. One exception, reserved for loss.
05
Every state names what's wrong specifically. "I need better light" — not "something went wrong."
06
Every error offers one door out. "Try again" or "Later." Binary choice preserves the posture.
— 20 —failure · v — vii · rules
specimen № 09  ·  the threshold vito. vol. 01 · sp'26

The threshold.

Sixty seconds. No account asked for until after a first Keep — this is the inversion. The user is a guest in the atelier, not a signup funnel. Five screens. No skip, no tour, no tutorial overlay.

i · 0s
9:41·
vito.
Before it's yours.
A quiet fitting room for the pause before you commit.
Begin

Wordmark, tagline, one door. No "Sign in," no "Learn more."

ii · 8s
9:41·
vito.
A photo of you, please.
Face unobstructed. Soft, even light.

The guidance is in one sentence, in italic serif. Not a list.

iii · 22s
9:41·
vito.
Pick one to begin.

Four curated items. Fourth pre-selected — the nudge in, not a menu.

iv · 34s
9:41·
vito.
study no. 001
The first study.

Three-beat reveal. 2.4s. The moment the product earns its place.

v · 56s
9:41·
vito.
vitoKEPT
Keep this in your first volume?
An email preserves it.

The seal appears first. Signup is framed as preserving a kept thing.

— 21 —onboarding · five screens · sixty seconds
specimen № 09  ·  continued vito. vol. 01 · sp'26

the choreography

sixty seconds · five beats
0s
threshold
8s
upload
22s
catalogue
34s
the reveal
56s
keep · signup
0 → 8s
The threshold holds. Wordmark at full scale. Tagline below. A single Begin. No skip, no sign-in link.
8 → 22s
The user gives a photo. One instruction. Face unobstructed, soft light. If rejected, the failure state says so in first person.
22 → 34s
Four garments, one pre-selected. Not a browse. A curated quartet seeded to feel like a match. The fourth is already chosen; the user confirms, not selects.
34 → 56s
The first reveal. Full three-beat choreography. 2.4 seconds of held breath, then twenty seconds to look at the result. No timer, no skip. The product shows its hand.
56 → 60s
Keep earns the account. The seal is applied. Only then is email requested — framed as preserving a kept thing, not unlocking a product.

the rules

non-negotiable
01
No account until after the first Keep. The inversion is the whole thesis.
02
No skip, no tour, no empty-state tutorial. Onboarding is the first use.
03
One door per screen. Binary choice preserves the posture. No secondary ghost links.
04
Sixty seconds is a ceiling, not a target. If a screen is confusing, hold longer.
— 22 —onboarding · choreography · rules
coda vito. vol. 01 · sp'26

The rules that govern the rules.

Nine specimens and ninety non-negotiables are a lot to hold in one head. When they conflict — and they will — these six postures resolve the dispute.

i
The pause before the purchase is the product.

Every other try-on app is optimising for speed-to-conversion. We are designing for the considered moment that precedes it. If a choice makes the reveal feel more like a tap and less like a turn in a fitting room, the choice is wrong.

ii
Vito takes the blame.

In every failure state, in every empty state, the voice is first-person. I couldn't, not You did. The user is a guest in the atelier and the tailor absorbs the friction. There is no "system error."

iii
Scarcity is the discipline.

Two type families. Two weights. Two functional marks. Twelve icons. Thirteen primitives. Five durations. When a new piece is proposed, something existing must be retired. Pressure keeps the language small; small keeps it unmistakable.

iv
The margin is the product.

Twenty-eight pixel outer margin on mobile is the hardest rule to defend in a review with a growth PM. Defend it anyway. The air around the content is doing load-bearing work — it is what makes the product read as considered rather than efficient.

v
One accent. No negotiation.

The Seal is the only chromatic accent in the entire system. If a new state, new surface, new screen seems to require a second accent, the diagnosis lives elsewhere — in the copy, the hierarchy, or the composition.

vi
When in doubt, remove.

Every quiet Vito screen was once a crowded Vito screen. The default gesture, when anything is unclear, is to subtract. The answer is almost never another label, another button, another badge.


how to read this

A designer arriving Monday should read front-to-back once, then keep it as reference. An engineer should read specimens 04, 05, 07, and 08 — those are where the code lives. A PM can stop at page 3.

known gaps

Accessibility audit. Internationalisation (italic behaves differently in Devanagari). Dark-mode for photography — currently walnut is a room, not a mode. These are volume 02.

— 23 —coda · six postures · one book
colophon vito. vol. 01 · sp'26
vito.

A design book in twenty-four pages, nine specimens, one coda.
type

Fraunces, by Undercase Type. SIL OFL.

Geist, by Vercel. SIL OFL.

Geist Mono, by Vercel. SIL OFL.

iconography

Phosphor Icons, by Helena Zhang and Tobias Fried.

MIT licensed. Fill weight only.

composition

Set at A4. Uncoated page. Base eight grid. Italic default.

produced

Spring, 2026. For Yahya, who asked for something worth signing.


Before it's yours.
— end of volume 01 —
vitoVOL 01
— 24 —colophon · fin