
This is the first case study in the Scanat design system series. Part 1 covers the initial 0→1 setup and later file-architecture changes; Part 2 focuses on governance issues that emerged after three years of use and on extending the system into engineering.
| Role | Design System Lead · UI Architecture · DesignOps · Cross-functional Collaboration |
|---|---|
| Project Type | 0→1 Design System Setup & Expansion |
| Platform | Mobile App · iPad App · Web |
| Users | Internal design, product, and engineering teams |
| Team | I owned the design system end to end and worked continuously with PMs and engineers through handoff and implementation. |
| Timeline | Initial foundation completed within my first two weeks in Sep 2023; file architecture continued to evolve as the product expanded. |
| My Contribution | 1. Audited and rebuilt core foundations including color, typography, spacing, radius, and shadow; |
When I joined Scanat, the existing Figma files supported day-to-day design work but lacked consistent styles, reusable components, and file organization. Within my first two weeks, I built the initial design-system foundation: standardized color, typography, spacing, and other core rules, introduced a two-layer Color Token model, organized six component categories, and completed common interaction and page states.
As Mobile, Web, and white-label work expanded, the original single-file structure became heavy again. I then separated design resources into three layers: foundational assets, platform design systems, and production UI project files.
This case focuses on how the system was built from 0→1 and why its file architecture had to evolve as the product grew.

The design files I inherited could support feature work, but they had not yet formed a coherent design system. The main issues fell into four areas:

The rebuild had to happen without pausing ongoing product work. Instead of writing a complete specification first and switching everything at once, I prioritized the issues that most affected design and handoff, put the new system into real use quickly, and migrated legacy screens incrementally.
The initial 0→1 build progressed through four stages.
I first audited existing screens and UI elements to identify duplicated styles, near-identical components, and missing states. I then componentized scattered elements and consolidated duplicate or nearly identical color, typography, and component styles.
After the audit, I established foundational rules for color, typography, radius, shadow, and spacing, then made components reference those shared rules. For color, I avoided binding components directly to raw values and instead introduced two Token layers: Primitive for base colors and Semantic for UI roles such as brand, text, and status. Components referenced the Semantic layer.
This made later brand or theme changes easier because the semantic mapping could change without editing every component individually.


In the old files, UI elements mostly lived with individual screens, so the same control could have separate copies across features. I reorganized the library by component responsibility: product screens referenced shared components instead of maintaining local variants. All UI elements were grouped into six functional categories:
| 模块 | 主要内容 |
|---|---|
| Basic | Foundational elements such as Button and Icon |
| Forms | Form controls such as Input and Select |
| Data Display | Information-display components such as Table and Card |
| Navigation | Navigation components such as Tab and Breadcrumb |
| Feedback | Feedback components such as Modal and Toast |
| Panels | Custom tool panels for Scanat 3D measurement and editing workflows |
This step was not just about wrapping old elements into components. I also used Figma Variants and Properties to complete sizes, visual styles, and interaction states.
For example, a button that originally had one style and two sizes was expanded to four styles and five sizes, with Default, Active, Disabled, and Error states defined explicitly. Engineers could see the complete state model during handoff instead of inferring behavior from a single static screen.

Once foundations and components were stable, I returned to the production UI files, regrouped screens by feature, and completed states that had been missing from the original designs, including:
These states had previously been clarified ad hoc during development, so I brought them back into the full design flow as explicit product states.
The first system solved foundational consistency, but as Mobile, Web, and white-label projects grew, the single-file structure became heavy again. I separated responsibilities into three layers:
| Tier | Content |
|---|---|
| Tier 1 · Foundational Assets | Cross-platform assets such as Icons and Illustrations |
| Tier 2 · Platform Design Systems | App UI Kit and Web UI Kit, containing only platform-level components and styles |
| Tier 3 · UI Project Files | Production screens and white-label projects that reference the two shared layers above |

Separating product screens from the component libraries allowed platform components to be maintained independently, while each white-label project could have its own UI Project File and still reference the shared assets and systems.
The system remained in active use for the next three years. The naming, documentation, and governance issues that emerged over time are covered in Scanat — Design System Governance & Design-to-Code .