oVice · Design System

oVice Design System 1.5

The oVice Design System, rebuilt at startup speed. One token architecture, a component library documented down to the pixel, and a type system that holds together in English, Japanese, and Korean.

micDefault
Aa あ 한
RoleProduct Designer
CompanyoVice
ResponsibilityDesign Systems
ScopeFoundations, Components, Documentation

The Context

A virtual office, three languages, zero slack.

oVice is a virtual office platform where distributed teams work inside shared spaces. The product moved at startup speed, shipping constantly across web surfaces, admin tools, and settings, in English, Japanese, and Korean simultaneously.

Design could not keep pace by hand. Every new screen meant redrawing buttons, guessing spacing, and hoping the Japanese string fit where the English one did. The system existed, version 1.0, but it had fragmented as fast as the product grew.

oVice virtual office — a walkthrough of the space and its interactions
Three scriptsAa
ENJPKR

The Audit

As-is, to-be, and everything drifting in between.

Before designing anything, I audited the existing library against live product screens. Same-purpose components with different anatomy, spacing applied by eye, colors that existed only on certain screens. The audit produced the as-is to-be map that scoped 1.5: not a rebrand, an evolution. Keep what teams already trusted, systematize everything they were improvising.

DefaultDefaultDefaultTo-beone blue · one radius rule · 56 / 44 / 34
DefaultdefaultDEFAULTAs-isthree blues · four radii · spacing by eye

Drag to compare one representative component. AS-IS / TO-BE Figma frames

Foundations

Tokens first. Everything else is a consumer.

ODS 1.5 is built on a token architecture: color primitives resolving into semantic roles, an 8px spacing scale, radius tokens from tight to full, and defined elevation and shadow styles. Tokens lived as data, versioned and synced, not as styles trapped in one Figma file.

B900
B800
B700
B600
B500
B400
B300
B200
B100

Three scripts, one voice

The type system pairs Poppins for display with Noto Sans for Latin body text and Noto Sans JP for Japanese. Scales, line heights, and truncation rules were tuned so the same component holds its shape in English, Japanese, and Korean.

Noto Sans specimen across Latin, Korean, and Japanese
Create a new space
ENJPKR
same height · same padding · same radius
the string changes, the anatomy never shifts

The Library

Around thirty families, documented to the pixel.

Buttons, inputs, selects, checkboxes, radios, toggles, tabs, tables, pagination, tooltips, chips, toasts, snackbars, modals, alerts, badges, avatars, accordions, sliders, date and time pickers, navigation. Every family defined by anatomy, states, and sizes with exact specs: buttons at 56, 44, and 34px heights, each with its own radius and padding rules.

The heavyweight was the humble table. oVice's admin surfaces run on dense data: user lists, roles and permissions, pending approvals, logs. The table family, cells, headers, rows, and their states, became the most-used component in the system and the one that earned the most documentation.

Default
Large · 56px · radius 8 · padding 24
Default
Medium · 44px · radius 6 · padding 20
Default
Small · 34px · radius 4 · padding 16

Iconography

Seven sets, one pipeline.

The system carries seven icon sets: a core basic set, Material Symbols, emoji, brand logos, OS-specific glyphs, and media controls. Material Symbols were wired with their variable axes, fill, weight, grade, and optical size, exposed as component properties, so any icon could match any context without redraws.

videocamheadphoneschat_bubblegroupmicsettingsnotificationscalendar_monthsearchlockpublicvolume_upplay_arrowpauseappsschedule

Documentation

A system nobody can read is just a sticker sheet.

Every component family ships with anatomy, states, and usage pages: when to use a single tab versus multiple, how a modal picker differs from a modal delete, how badges attach to avatars and icons. Docs were written for the people actually consuming them, which at oVice meant bilingual notes so no designer or engineer had to work in their second language to use the system correctly.

ODS usage documentation pages

Adoption

The proof: real screens rebuilt on the system.

ODS 1.5 was applied first to oVice's Space Settings surfaces: overview, privacy, domain, roles and permissions, member approvals. Screens assembled from the library instead of drawn from scratch, with tokens flowing through every fill, gap, and corner. Design moved at the speed the product demanded, and consistency stopped depending on memory.

Space Overview settings screen assembled from ODS 1.5 components, with spacing annotationsLeftMenuPageHeaderSectionCardTextInputSelectBoxSectionCard

Space Overview, assembled entirely from library components.

Reflection

Systems are products. Startups teach you fast.

Building ODS at a startup meant there was no systems team, no six-month runway, and no tolerance for a library that slowed anyone down. The system had to pay for itself immediately, which forced ruthless prioritization: tokens and tables before theory, documentation before decoration.

That discipline carried forward. The token thinking, accessibility rigor, and documentation habits from ODS became the foundation for my later design system work at Huntington National Bank, at enterprise scale. This is where I learned that a design system succeeds the day someone ships a screen without asking you anything.

More projects
New York Road RunnersVerizon SearchVerizon Console