One Design System, Web and Mobile

One Design System, Web and Mobile

Design system documentation, shared component states and mobile flows for a livestock breeding management SaaS, built so the web app and the mobile app read and write the same records.

Design system documentation, shared component states and mobile flows for a livestock breeding management SaaS, built so the web app and the mobile app read and write the same records.

Overview

Overview

I work on the design system of a livestock breeding management SaaS used on the web and on iOS. The mobile app is an extension of the web app: the same record is read and written from both, so the two libraries have to agree on every field, state and token. New screens are designed by people and, more and more, drafted by AI agents, so the rules have to be written down, not just shown.

I work on the design system of a livestock breeding management SaaS used on the web and on iOS. The mobile app is an extension of the web app: the same record is read and written from both, so the two libraries have to agree on every field, state and token. New screens are designed by people and, more and more, drafted by AI agents, so the rules have to be written down, not just shown.

Scope: this page covers only the parts I built myself: the design system documentation, the component state rules, and mobile flows for a new student persona.


Principle: mobile is an application of the web app, not a separate product. Same records, same fields, same tokens.

2025 – Present

Timeline

Design Systems & Mobile

Role

Web + iOS

Platforms

2025 – Present

Timeline

Design Systems & Mobile

Role

Web + iOS

Platforms

A desktop dashboard and a mobile today screen built on one design system

A design system written down

A design system written down

Eight linked guides. I turned the web Figma file into a documented system: eight linked markdown guides covering principles, colour, typography, spacing and layout, radius and shadow, components and the product’s domain, built from the variable, text and effect exports and about 27 product screens.


Tokens with one source. I wrote a generator that turns the Figma export into code-ready tokens (W3C DTCG JSON, a CSS theme and a Tailwind config), so token values live in one place and can’t drift between the guides and the code.


Load three files, not eight. A usage guide maps four workflows (designing a screen, coding a prototype, auditing in Figma and developer handoff) to the three files each one actually needs, so neither a person nor an agent has to read everything.


Saying what the system doesn’t decide. A coverage-gaps file lists what is still open, such as motion, truncation, undo, permissions and localisation, so nobody mistakes a gap for a rule.

Design system guides and generated token files in a code editor

States the whole library agrees on

States the whole library agrees on

Pressed is a border, not a fill. For bordered, card-like components such as selection cards and chips, pressing keeps the white background and only darkens the border, one step at a time. Selected items follow their own darker green steps. Green belongs only to what is selected or active.


One focus ring. Focus comes only from a ring effect style, never from a recoloured border, so every component shows focus the same way.


One disabled rule. Buttons and visual elements fade with an opacity/disabled token; form fields and cards switch to disabled colour tokens; never both at once.


Measured, not assumed. I measured how much of the mobile library is bound to tokens: 956 of 961 text layers, 95 of 111 effects, 844 of 863 corner radii and 3,478 of 3,498 spacing values.

Selection cards in default, hover, pressed, selected and disabled states
Bar chart of token binding coverage in the mobile library

Mobile flows that write the same record

Mobile flows that write the same record

Same fields, better input. Each mobile task asks for the same fields, with the same data types, as its web form. Only the presentation changes: prefilled values, a note tucked behind a button, a bottom sheet instead of a modal.


Log Weight. A six-screen flow from an empty entry to a saved record. A typo check catches a value like 24 lbs typed instead of 2.4: Save stays disabled and the warning offers a one-tap fix, because nobody means to save 24 lbs.


After a daily care check. I proposed four after-save states, from a calm confirmation to a milestone, following the product’s rules: reward accuracy rather than activity, no streaks or points, and never frame a missed day as a failure.


Prototypes that behave like the app. Figma prototypes can’t hold state, so Back often lands on the wrong screen. I built coded React prototypes of the mobile student app and the web show-entry flow, so flows could be reviewed and tested like the real product.

Six mobile screens of the Log Weight flow
Four after-save screens for the daily care check

Handoff developers and agents read first

Handoff developers and agents read first

Specs on the canvas. Developer handoff lives as a Figma Spec inside both design files, mobile and desktop, kept identical: rules, states, and what is not designed yet.


Metrics before launch. For the student feature I wrote the analytics plan: the events, the success metrics and how each one is computed, so the team knows what success looks like before launch.

A handoff spec next to the mobile screen it describes

What’s next

What’s next

A baseline before the restructure. The guides will split into separate mobile and desktop versions. Before that, I set up a baseline: three frozen screen scenarios and a scoring sheet, to compare what an agent produces before and after.


Honest status. There are no measured outcome numbers yet. Running that baseline is the next step.

Protected case study
This case study covers client work. Enter the password to view it.
Back to home