03
Design system
In-house design system
Overview
I helped maintain the internal component library that lets several products speak the same visual language.
I connected icons from Figma to code, kept themes intact in published builds, and documented keyboard and focus behaviour.
Problem
When icons and style rules are copied into each app, the same meaning accumulates in different shapes.
A library has to be more than a component collection: it should remove decisions from every new screen.
Constraint
Icons are numerous and change
When Figma and code drift, updates depend on someone remembering. Hand-wrapping every icon does not scale either.
Themes must survive publishing
If @theme rules visible in development disappear from the bundle, consuming apps have little way to find the cause.
Decision
Make icons a typed pipeline
Figma assets are synchronized and a createSvgIcon factory gives every component the same props and accessibility rules. Metadata and categories live alongside them in Storybook.
Make visible state part of the documentation
I introduced an a11y addon and tightened focus and keyboard behaviour. A component that only works in its default state is not finished in a product.
Component lab
export const SearchIcon = createSvgIcon({
name: 'search',
viewBox: '0 0 24 24',
paths: ['M11 4a7 7 0 1 0 0 14…'],
});No company code is shown; this is the factory pattern that removes repeated SVG boilerplate.
PORTFOLIO PRIMITIVES · LIVE PREVIEW
The small rules that make the site
Not a fictional library: these are the primitives this portfolio actually needs, shown in their states.
TYPE SCALE
COLOUR TOKENS
The actual type and colour values from this site’s CSS variables.
Engineering
- FigmaIcon source and metadata
- FactoryConsistent React components
- RollupOnly needed icons remain in a build
- StorybookUsage, states and accessibility documented
Tree-shakable icons
Module boundaries keep unused icons out of an app bundle.
Published-build regression fixed
I fixed the path that stripped @theme directives from published builds, keeping development and consumer output aligned.
Result
Icons, themes and documentation now travel through one publishing path.
Product teams can start by choosing verified building blocks rather than inventing rules per screen.
This is informed by internal design-system work. No company code or design assets are shown; the Component lab independently reconstructs portfolio-specific primitives.