OZP

000%

OZP Studios
Design systemAccessibilityB2BCompleted

DEPMatrix

Four products from one company that no longer looked related, built on three diverging forks of MUI.

Client
B2B SaaS, four-product suite
Year
2024
Duration
21 weeks + 6 weeks of office hours
Team
1 designer, 1 front-end engineer
Role
Design system + front-end
Type
Systems
Approach
Figma variables · Style Dictionary · React · Storybook · axe-core in CI
DEPMatrix 01. Audit findings, token pipeline and cutover order.
01

Audit findings, token pipeline and cutover order.

The audit

Quoting, order fulfillment, a mobile web app for field technicians, and an admin console. Each team had forked MUI at a different time and customized it separately. We screenshotted every primary screen and sorted the parts. There were 11 button styles, 7 table styles, 9 input styles and 4 different navigation shells. Support had a saved reply explaining which blue button to click.

What we didn't standardize

The fulfillment team's packing grid needed drag-to-pack, cell-level highlighting and keyboard shortcuts that would have made the shared table worse for everyone else. It stays local, and the contribution rules say so in writing. Field technicians use tablets outdoors, so larger touch targets come from a density token, not a separate set of components.

DEPMatrix 02. Button documentation in Storybook, with the packing-grid exception called out.
02

Button documentation in Storybook, with the packing-grid exception called out.

Tokens to code

Tokens live as Figma variables and build through Style Dictionary into CSS custom properties and TypeScript types. The React package is versioned with a changelog, and every component has Storybook stories. axe-core runs on every story in CI, and contrast or labeling failures block the merge. While apps were mid-migration, a temporary MUI theme generated from the same tokens kept old screens matching new ones.

Rollout

Each product team migrated its own screens. We paired with them and reviewed. Admin went first because it was mostly forms and had the fewest users. Field went last because it needed testing on real devices outdoors. Teams kept shipping features throughout.

Outcome

All 38 primary screens use the shared package, which has 46 components. UI inconsistency tickets went from 31 in the quarter before rollout to 6 in the quarter after. The client's two designers and front-end lead own the library now.

Scope

  • Component audit across four apps
  • Figma library and token pipeline
  • React component package with Storybook docs
  • Accessibility checks in CI
  • Migration support for 38 screens, paired with each product team
  • Contribution rules, including the packing-grid exception
  • Handover and six weeks of office hours

Next

Ready to take the next step?

Tell us what you need built and what it has to work with. We will tell you plainly whether we are the right team for it.

Start a project