01/ 16
← Work/01
AI WorkflowDesign SystemsInitiativeSystems Thinking·7 min read

How Design Became the Engineering Layer

CompanyGainsight
RoleProduct Designer
YearMay 2026 – present

What started as two people building something nobody asked for is now the standard design-to-code workflow for three platforms at Gainsight. 20+ screens shipped, zero rewrites, and formal sign-off from product, engineering, and UX leadership.

claude-code — control-admin / @sfontfrgs/ui
$
3
Platforms running the workflow
Started on one, now organisational infrastructure
20+
Screens deployed
Legacy backend untouched throughout
9
Page templates
Covering all 120 admin pages
0
Full rewrites
React islands on top of existing PHP
01
Context

A quality ceiling nobody knew how to raise

120 admin pages. No shared component library. No documentation. A PHP/Yii stack that made every UI improvement impractical. A full rewrite was off the table.

120
Admin pages, no shared library
0
Shared component foundation
48
Design tokens, once mapped

Years of building functionality first had left the admin platform deeply inconsistent: old styles next to new ones, identical components looking different across pages, interaction patterns varying for no reason. Not one broken thing, hundreds of small decisions made independently over years, with nothing connecting them.

Every UI improvement meant writing PHP views, custom SCSS, and jQuery by hand. Modern patterns were possible in theory. In practice, the effort required made them disappear from roadmap conversations before they started. The chaos had been there long enough to feel normal.

Key points
01120 admin pages with no shared component library or documentation
02Mixed UI styles ranging from years-old patterns to recent ones
03Every new screen built from scratch with no shared foundation
04Full rewrite off the table, team size and timeline ruled it out
Before / after, all 120 pages
120 pages · before, no shared foundation
→ shared design system applied
120 pages · after, unified token baseline
02
Origin

A conversation, not a brief

We agreed on one rule before doing anything else: show something real before saying a word to anyone.

I'd been using Claude Code in my design work for a while, gradually shifting from prototyping tool to something more structural. The conversation that started this happened in the office. I was complaining about the state of Control's admin UI to Amit, a developer equally frustrated from the engineering side.

He said the generation problem might be more automatable than it looked. I said I wanted to try. We didn't ask for permission, we just started, not on the roadmap, not scheduled, built in parallel with normal work because it needed doing.

Key points
01Started as an informal conversation between a designer and a developer with the same frustration
02No roadmap item, no brief, no approval, built in parallel with normal work
03Amit handled technical integration and engineering credibility; I handled design system and generation workflow
04First principle: a working demo before any pitch
How it started
1
The conversation
A designer pushing Claude Code further than prototyping. A developer who saw the automation angle. No mandate, no brief, no approval.
2
The rule
Show something real before saying a word to anyone. No pitch, no slides, a working demo or nothing.
3
Two weeks, outside hours
Built in parallel with normal work. Not on the roadmap, not scheduled, done because it needed to be done.
4
The demo
A live screen on top of the existing PHP backend, in the actual test environment. The argument made itself.
03
Phase 1 · Build

Three layers that let Claude Code generate implementation-ready screens

The design system is not just a component library. It is the shared language that makes AI generation reliable, consistent inputs produce consistent outputs.

Since I had no repository access, I used Claude Code to scrape the live Control platform and generate a structured inventory of every UI pattern across all 120 pages. Underneath the visual inconsistency, the interaction patterns were more coherent than they looked — the chaos was mostly CSS and layout, not structure. That meant mapping to an existing component system was possible.

Amit built the architecture that connected the component library to the live platform: a React islands model, self-contained React apps embedded directly into the existing PHP/Twig pages via Vite. The PHP backend handles routing, sessions, and data as before. No migration. No rewrite.

With a well-documented, typed component library in place, Claude Code can generate a complete screen from a prototype or description: React component, TypeScript data layer, PHP controller, routing, and navigation, ready to deploy. What previously took days of PHP template work now happens in a single session, because the design system gives the model something consistent enough to generate from.

Key points
01React islands embedded into existing PHP pages, no migration, no rewrite required
02Claude Code generates complete screens from a prototype or description in a single session
03Output includes: React component, TypeScript data layer, PHP controller, routing, navigation
04Before: days of PHP template work per screen. After: one session.
Claude Code, live session
claude-code — control-admin / @sfontfrgs/ui
$
Before
Days per screen
PHP views, custom SCSS, jQuery
After
One session
Implementation-ready output, no rewrite
Phrases & translations, regenerated with @sfontfrgs/ui: key search, language filters, slide-in edit panelAfter
Phrases & translations, original PHP/jQuery admin screenBefore
◀ ▶

Phrases & translations, regenerated from a description in a single session. Backend untouched. · drag to compare

04
Adoption

No deck. No slides. Just a live screen.

By the time we reached the wider group, the question was how, not whether.

We were deliberate about the order. Allies first: my manager and the design team, people who would engage constructively and sharpen the pitch. Engineering leads next, where Amit's credibility as a developer from the inside removed every objection I couldn't answer alone. By the time we reached product stakeholders, the demo had already built its own momentum.

We never led with the technology. We led with the problem. Everyone in that room had looked at Control and wished it was better. The demo didn't need explaining, it just needed to run. That momentum carried through to a formal sign-off across product, engineering, and design leadership.

Key points
01Worked outside normal hours for two weeks to have something real to show
02First live screen in a test environment closed the argument, no slide deck needed
03Built support strategically: allies first, sceptics once the momentum was established
04By the time we presented to the wider group, the question was how, not whether
"One live screen is worth more than one image, and an image is already worth a thousand words."
— Senior Manager, Product Management, on seeing the first deployed screen
Formal sign-off received from
VP of Product✓ approved
Director of Engineering✓ approved
Head of UX✓ approved
Who we showed first
1
Manager + design team
Constructive early feedback. Helped sharpen the pitch and identify the right next audience.
2
Engineering leads
Amit led these conversations. A developer vouching from the inside removed every objection I couldn't answer alone.
3
Product stakeholders
Momentum existed. Conversations were about scope and sequencing, not viability.
Moderation Overview, rethought: all queues at a glance, metrics, multi-view, live filtersAfter
Moderation Overview, the legacy admin screen before the redesignBefore
◀ ▶

Moderation Overview, the screen that made the argument. Not restyled. Rethought. · drag to compare

05
Rollout

120 pages. 9 templates. One decision.

Legacy-first: validate the workflow, prove quality in production, build team confidence before touching the pages users depend on daily.

9
Templates covering 120 pages
120
Admin pages mapped
Legacy-first
Rollout strategy

With approval in place, I mapped all 120 Control pages into page types, manually, page by page, since no documentation existed. Nine templates emerged covering the full surface area. Once built and validated, any page can be regenerated by dropping it into the right template and running it through the workflow.

The sequencing was deliberate: start old and low-traffic, validate without risk, deprecate legacy code, build team confidence. High-traffic pages come next, once production quality is proven. The worst thing that could happen to this initiative was shipping something broken on a page thousands of people use every day.

Key points
01Mapped all 120 pages to 9 reusable templates, no documentation existed before this
029 templates: Settings, Table/list, Dashboard, Two-column, Chat UI, Profile, Content creation, Drag & drop, Code block
03Legacy-first rollout: validate without risk, deprecate old code, build confidence
04High-traffic pages are next phase, only once the workflow is proven in production
9 page templates
Settings
Table / List
Dashboard
Two-column
Chat UI
Profile
Content creation
Drag & drop
Code block
9 templates cover all 120 admin pages120 pages mapped
User Overview, rebuilt with colored avatars, inline filters, and a slide-in detail panelAfter
User Overview, the legacy member management tableBefore
◀ ▶

User management, built from the Table/List template. One of nine. · drag to compare

06
Scale

FE developers join the loop. The handoff changes.

Developers review and refine. They no longer interpret and rebuild.

Once approval came through, FE developers were brought into the workflow. Their job shifted: instead of receiving Figma specs and building their own interpretation, they now receive working code generated directly from the design system and refine it for production. The gap between design intent and deployed output closed almost entirely.

In parallel, we're optimizing the skills/md files, the instruction layer that tells Claude Code exactly how to use the component library and what patterns to follow. Better-calibrated skills mean more consistent output from the first pass and fewer revision rounds. The goal isn't just to generate screens faster. It's to make generation reliable enough that FE review becomes a quality check, not a rebuild.

Key points
01Eliminates the Figma-to-code interpretation gap, deployed screen matches design intent directly
02FE reviews and refines rather than interprets and rebuilds
03skills/md files calibrated for more consistent first-pass output
04Design is no longer handing off specifications. Design is handing off working code.
Old handoff vs new
Old handoff
1
Design in Figma
Designer creates screens. Developer interprets. Gap opens immediately.
↺ review · revise
2
Back and forth
Review rounds, adjustments, re-implementation. Quality degrades under pressure.
↺ review · revise
3
Ship and drift
Deployed screen is the developer's interpretation of design intent. Inconsistencies compound.
1
2
3
avg 3 review rounds
New handoff
1
Design + generate
Designer prototypes with the component library. Intent is encoded in the components, not the spec.
2
Code is the handoff
Developer receives working code. Refines, does not rebuild. One review round, not three.
3
Ship with confidence
Deployed screen matches design intent. The design system enforces consistency automatically.
1
one review round · code is the handoff
Currently shipping
In progress
01Optimizing skills/md files to improve Claude Code generation consistency
02HTML prototypes from the design system, working UI context, not static specs
03Empowering the design team to generate implementation-ready screens independently
04Reducing handoff friction through richer, code-based design deliverables
07
Impact

One personal initiative. Three platforms.

What started on one legacy platform is now the standard workflow across the organisation. Not a tool adoption, a new way of working.

3
Platforms running the workflow
120
Admin pages mapped to 9 templates
48
Design tokens enforced across platforms

Control is no longer the only platform running this workflow. The same audit-to-template methodology is now being applied to Gainsight's Education platform and Analytics platform — both actively in progress, not planned future work.

This is the part of the story that emerged after initial adoption: what started as two people frustrated enough to try something without being asked has become organisational infrastructure, with formal sign-off and a growing list of platforms depending on it.

Platform expansion
01
Origin · Phase 2 active
Control (admin platform)
The platform where it started. 120 pages audited, 9 templates built, 20+ screens shipped to production. FE developers now review implementation-ready code, not Figma files.
20+
Screens in production
9
Page templates
0
Rewrites required
02
Rollout in progress
Education platform
Same audit-to-template methodology applied. Design system adapted for platform context. FE integration actively underway.
03
Rollout in progress
Analytics platform
Third platform adopting the workflow. Actively in progress — not scoping, not planned. The methodology is now organisational infrastructure.
08
Reflection

The constraint was never the engineers

Design quality problems inside legacy products are almost never engineering capacity problems. They are shared-language problems.

The easy read on this project is that it's about AI tooling. The more important thing it demonstrated: when design and engineering don't have a common foundation, every screen is a negotiation. The design system solved that, not by replacing engineers, but by giving Claude Code something consistent enough to generate from and developers something reliable enough to ship from.

This started because two people were frustrated enough to try something without being asked. A lot of problems that accumulate in legacy products sit outside anyone's formal remit. Waiting for this to appear on a roadmap would have meant waiting indefinitely.

Further reading: The shared-language problem
Reflection
The real problem
Shared-language problems, not engineering capacity. The design system was the solution, the AI tooling was what enforced it at scale.
Why it started without permission
Two weeks of outside-hours work, one working demo, and the conversation shifted from "should we" to "how do we scale this". The demo did more than any proposal could have.
What this signals
Designers who can close the gap between design intent and deployed output, without coding at a developer level, will work differently. Already happening.
What I'd do differently
Map the page templates earlier. A typed template contract upfront would have made generation more reliable from day one and reduced the calibration work in Phase 2.
09
Team

Team
Product Designer
Sergi Font

Concept, initiative, 120-page audit, @sfontfrgs/ui design system, 9-template page mapping, generation workflow, internal pitch, skills/md optimization, design team enablement.

Frontend Developer
Amit

Technical integration, React islands architecture, Vite setup, test environment, engineering credibility internally. Genuine partner, not support.

No PM. No brief. No roadmap item. We created the mandate.

Next project

Role-Based Access Control

The existing permission system had no concept of scope, an Editor was an Editor everywhere, forcing admins into role explosion or over-provisioning. I designed a new RBAC architecture, co-designed the backend data model with engineering, resolved a high-stakes architecture debate between two competing backend approaches, and built nine functional prototype versions with Claude Code to drive alignment before a single sprint was scoped.

Read case study →
Role-Based Access Control