Remuner · 2024–2026

Design system from scratch

At Remuner I was the sole designer on a product that had never had one full-time. Design had been done screen by screen, with no typographic scale or component logic underneath, and the implementation matched: each engineer had built their own version of the same components, with no shared system and no Figma library to reference. I built the component library and token system from zero, alongside regular product work, over roughly two years.

The CTO and engineers agreed on the value immediately. The constraint was bandwidth. The system had to grow with the product rather than ahead of it, which meant sequencing the work carefully and being deliberate about what to fix and when.

Remuner component library overview
Remuner component library, core components and token structure.
Company Remuner
Role Senior Product Designer (sole designer)
Team CTO, Engineers (2 at start, 5 at end)
Stack Figma, Token Studio, Style Dictionary, GitHub, Vuetify, Sass

My role

I was the sole designer, which meant I drove the direction and priorities for the system.

There was no DS team. The monthly meeting with the engineering team was the governance mechanism, and I ran it.

I built the Figma component library, defined the token architecture, set up and evolved the token pipeline, and ran an ongoing product audit to close the gap between existing screens and the system. Product work ran in parallel throughout.

Fragmented implementation, no shared reference

The product had been designed without a systems mindset. Each engineer had implemented components independently, without a shared library or token reference. The result was visible inconsistency at the surface and no clear path to fixing it incrementally.

Color values differed across screens, component variants diverged between parts of the app, and Vuetify defaults filled the gaps where custom components hadn't been built. The inconsistency came from both sides. Screens had been designed one at a time, each defining its own rules, so the engineers had nothing stable to build against and every implementation went its own way.

There was also no Figma component library. Before I could propose any system, I had to build the raw material. Components needed to be defined, documented, and ready to reference before there was anything to systematize. That work ran in parallel with product design from the start.

Sequencing the work and adapting it to the team

A few weeks in, I proposed a two-tier token architecture. The more important decision was how to scope it.

I had run a similar process at a previous company and started with too large a token set, which created maintenance overhead before the system had meaningful adoption. At Remuner I started with a deliberately small set. A stable core of primitive and semantic tokens covered only what the product actually needed, with room to grow as usage made the gaps clear. The token set could expand from real pressure, not speculation.

Adapting the output to the team's existing conventions

The token pipeline was adapted from a setup I knew worked, and the engineering team translated it to match their stack. Remuner used Vuetify for components and Sass as the output format rather than CSS custom properties. That translation came out of the first monthly meeting where we talked through how the tokens would actually be consumed.

The decision that came from that conversation was to export tokens as both Sass variables and utility classes, following Vuetify's own naming conventions. Engineers already thought in that system. Rather than asking them to learn a new convention on top of the DS work, the token output met them where they were. That reduced friction on adoption without reducing the integrity of the system.

Remuner token structure in Figma variables
Primitive and semantic token structure in Figma variables.

The monthly engineering meeting

Each month, the engineering team and I met to review progress, surface problems before they became blockers, and set goals for the next cycle. Everyone presented what they had done, including nothing if that was the case. Problems got discussed and solved together rather than escalated. Goals were agreed on, not assigned.

This cadence was the governance mechanism. There was no issue tracker, no formal review process. The meeting was where decisions got made and where the system evolved based on what was actually being built.

The ongoing product audit

The component library covered new work from the start. Closing the gap on the existing product was a separate, slower problem.

I ran an ongoing audit throughout my time at Remuner. I reviewed screens systematically, identified pattern inconsistencies, and captured every instance of each pattern across the product, going screen by screen through autocompletes, input states, and navigation variants. For each one, I defined the correct variants, states, and behaviors, then created a Jira ticket and shared it with the engineers for their input before anything went into a sprint.

Not every inconsistency was fixed immediately. If a part of the product was due for a feature addition, the DS work would be absorbed into that feature's scope rather than done twice. Fixing something that will change in a few months is waste, and this judgment call was part of the practice from the start. The audit identified what needed fixing; the timing was decided with the engineering team based on what was actually coming up in the roadmap.

Component audit in Figma showing captured variants and states
Component audit: captured variants, states, and replacement candidates across the product.

The token pipeline and its evolution

The token repository matured over time. By early 2026, I worked with Codex to harden the repository. It gained a CI pipeline that validated every token update, build drift checks that kept the generated output from diverging from the committed artifact, smoke tests, an HTML preview for visual inspection without opening Figma, and a JSON output for JS consumers alongside the Sass files. Each change went through a PR reviewed by the engineering team before merging. Reviewing a PR became a question of whether a value was right, not whether the build had held together.

Token repository CI checks
CI validation on the token repository: drift checks, smoke tests, and build verification on every update.
HTML token preview sandbox showing generated typography token values and semantic class names
The HTML preview sandbox: generated token output browsable without opening Figma, rebuilt automatically on every pipeline run.

The icon library had its own repository and release cycle, separate from the component packages. This meant icons could be updated independently without introducing version conflicts or touching the component pipeline. The repository included automation for generating Vue components from SVG files, which made the process self-serve: an engineer could add an SVG file and get a usable component without a design handoff in between.

The CTO's unprompted verdict during a product review: the product had gone from a 2010 app to a 2020 app. That only happens when the change is visible outside the design process.

  • 10 of the product's 18 core screens fully on system components when I left, tracked monthly on the audit board and growing with every refactor.
  • 161 component sets and around 1,600 variants in the Figma library, built on 630 token variables.
  • 157 icons in a self-serve repository: an engineer adds an SVG and gets a Vue component, no design handoff.
  • Engineers call tokens by name, color-text-primary instead of a hex value, enforced by the pipeline rather than by code review.
  • Three engineers onboarded straight onto the system as the team grew from two to five, learning it instead of inheriting the old fragmentation.