BLAZOR / Madison Resources CRM Gator Design System

One Shared Foundation for Three Fragmented Codebases

40%

40%

60%

60%

60%

3

3

6

6

FASTER

UIDELIVERY

FASTER UI

DELIVERY

FASTER UI

DELIVERY

FEWER STYLING

OVERRIDES

FEWER STYLING

OVERRIDES

FEWER STYLING

OVERRIDES

FRAMEWORKS UNIFIED REACT · ANGULAR ·.NET

FRAMEWORKS UNIFIED

REACT · ANGULAR ·.NET

FRAMEWORKS UNIFIED

REACT, ANGULAR, .NET

MONTHS SYSTEM

DELIVERED

FULL SYSTEM

DELIVERED

FULL SYSTEM

DELIVERED

CLIENT

CLIENT

ROLE

ROLE

TEAM

TEAM

TOOLS

TOOLS

CAMP Systems & Honeywell

CAMP Systems

& Honeywell

CAMP Systems

& Honeywell

Senior UX

Designer

Senior UX

Designer

Senior UX

Designer

UX, Product, Engineering

UX, Product,

Engineering

UX, Product,

Engineering

Figma, Jira, Confluence

Figma, Jira,

Confluence

Figma, Jira,

Confluence

THE PROBLEM

A CRM that had outgrown itself — three frameworks, no shared design logic, and a UI held together by ad-hoc styling.

Navigator had grown across React, Angular, and .NET Blazor with no shared design logic. Every team built their own components, their own patterns, their own workarounds. Delivery slowed. Rework compounded. Three teams solving the same problems three different ways — and none of it transferable.

UX DEBT SPIRAL — HOW AD-HOC STYLING DECISIONS COMPOUND ACROSS THREE FRAMEWORKS

THE SYSTEM

One shared foundation to replace three diverging ones.

A design system isn't just a component library. It's the infrastructure that lets teams build consistently without coordinating constantly — shared language, shared tokens, shared decisions that don't have to be made twice.

WHAT WE BUILT — THE FIVE PILLARS OF THE SHARED DESIGN FOUNDATION

THE CORE TENSION

Three teams, three frameworks, zero shared foundation. Every new feature added more drift.

Without a shared token layer, each team solved styling problems independently. Every new feature became a new opportunity for inconsistency. The longer it went unaddressed, the more it cost.

MY ROLE

Led the end-to-end creation of Gator — Madison's first unified design system — partnering across Product, Engineering, and three product teams.

WHAT I OWNED

Full system — UI audit, atomic component architecture, token structure, Figma variants, multi-framework implementation guidance, and governance rollout across CRM, Payroll, and Onboarding.

HOW I WORKED

Three active frameworks — React, Angular, and .NET Blazor — had to consume the same design tokens and component patterns without a full rewrite. The system had to work within existing constraints, not replace them.

THE CONSTRAINT

Drove audits, component architecture, accessibility alignment, and implementation guidance — ensuring the system was both scalable for teams and trustworthy for developers from day one.

PROCESS

Seven phases — from audit and benchmarking to governance and adoption across three product teams.

From audit to adoption — across CRM, Payroll, and Onboarding.

1

1

UI Audit & Stakeholder Alignment

Audited every screen across three frameworks to map the full scope of UI drift before proposing anything.

2

2

Comparative System Benchmarking

Evaluated Material, Salesforce Lightning, and internal tools to define what 'good' looked like for this system.

3

3

Atomic Architecture Definition

Defined the component hierarchy, token structure, and naming conventions the whole system would build from.

4

4

Component Design & Figma Variants

Built every component with full variant sets — states, sizes, themes — implementation-ready from day one.

5

5

Theme & Token Development

Established the CSS token layer that fed React, Angular, and .NET Blazor simultaneously without framework-specific overrides.

6

6

Multi-Framework Implementation Guidance

Paired with engineering to validate components in all three frameworks — no 'designed in Figma, broken in Blazor' surprises.

7

7

Governance, Rollout & Adoption Support

Built the contribution model and documentation that let three product teams adopt the system without slowing down.

TOKEN ARCHITECTURE

One token layer three frameworks

One token layer consumed identically by React, Angular, and .NET Blazor — no per-team overrides, no drift, no dependency conflicts.

CRM AUDIT & DRIFT REMEDIATION

A mountain of debt mapped and resolved

A full audit surfaced every inconsistency across Navigator's UI. The findings gave engineering a sequenced remediation roadmap — decisions backed by evidence, not opinion.

UI AUDIT PRIORITIZATION — DEBT MAPPED AND SEQUENCED BY IMPACT AND EFFORT ACROSS NAVIGATOR

ANGULAR'S TOKEN ECOSYSTEM

Angular Material was already built for this

Angular Material is built on a token-first architecture semantic tokens, density tokens, typography scales, component-level overrides. That alignment is why Angular consumed Gator's token layer with no friction. Designing to Angular's model first meant Blazor and React could consume the same tokens — a future-proof architecture rather than a lowest-common-denominator one.

RESEARCH & DISCOVERY

What three product teams actually told us.

Three teams, three frameworks, zero shared design logic. What we heard made the problem clear — the drift wasn't accidental. It had been accumulating for years with nothing to stop it.

TOKEN STUDIO INSPECTION — DESIGN TOKENS AUDITED ACROSS COMPONENTS AND FRAMEWORKS IN FIGMA

Heard Directly

Product Teams

Heard Directly

Engineering

"We built our own components because nothing existed that worked across our stack."

Each team had independently solved the same problems — buttons, inputs, grids, modals — in isolation. React, Angular, and .NET Blazor had each accumulated their own component libraries. None of them talked to each other, and none of them were consistent.

"Every new feature adds more drift. There's no shared source of truth to build from."

Without a shared token architecture or component library, every new feature became a new opportunity for inconsistency. Engineers were making ad-hoc styling decisions because there was no governed alternative — and those decisions compounded with every release.

Heard Directly

Designers

Heard Directly

Product Leadership

"I design it in Figma and it breaks in Blazor. Every time."

The handoff gap between design and .NET Blazor implementation was systemic. Figma components had no direct relationship to Blazor component capabilities. Designers were discovering constraints after delivery — not before — and rebuilding work as a result.









"We can't coordinate across teams if every team is speaking a different design language."

Cross-team product decisions were slowed by the absence of shared vocabulary. What one team called a card, another called a tile. What one team had solved for modal states, another was still figuring out. Coordination required translation at every touchpoint.






Four teams, four different versions of the same problem. That alignment across stakeholders became the mandate for every architectural decision that followed.

CORE TENSION

Every user story shipped with custom code. No shared foundation meant every feature was built from scratch.

STAKEHOLDERS WANTED

Faster delivery

  • Consistent UI across products

  • Scalable across teams

  • Predictable timelines

ENGINEERS

NEEDED

Reusable components

Reusable components

  • One token layer, not three

  • No custom code per story

  • Clear contribution model

DESIGN RESOLVED

Governed component library

Governed component library

  • Atomic system all frameworks consumed identically

  • Mobile-first, desktop-ready

  • Governance rollout with adoption support

The Resolution

Developers weren't moving slowly because they lacked skill. They were rebuilding the same components repeatedly because nothing governed existed to build from.

RESEARCH - DESIGN

Every decision traced back to a finding.

Four design decisions — each one a direct response to what the audit and stakeholder alignment surfaced. Gator wasn't designed from convention. It was built from the evidence outward.

Four design decisions — each one a direct response to what the audit and stakeholder alignment surfaced. Gator wasn't designed from convention. It was built from the evidence outward.

  1. One token layer, three frameworks — the decision that made everything else possible.

ATOMIC FOUNDATION — TOKENS, TOGGLES, CHECKBOXES, AND ICONS AS THE BASE LAYER OF THE SYSTEM

FINDING

FINDING

FINDING

Each framework had accumulated its own styling approach. React, Angular, and .NET Blazor were solving the same problems independently — no shared values, no shared vocabulary, no way to change one thing across all three.

Each framework had accumulated its own styling approach. React, Angular, and .NET Blazor were solving the same problems independently — no shared values, no shared vocabulary, no way to change one thing across all three.

INSIGHT

INSIGHT

INSIGHT

A token layer wasn't just a technical convenience — it was the only architecture that could unify three frameworks without requiring a rewrite. One change to a token would propagate across every surface simultaneously.

DESIGN

DESIGN

DESIGN

CSS custom properties established as the single token layer, sitting above every framework's theming structure. React, Angular, and .NET Blazor consumed identical values — no per-team overrides, no drift, no dependency conflicts. A change made once applied everywhere.

CSS custom properties established as the single token layer, sitting above every framework's theming structure. React, Angular, and .NET Blazor consumed identical values — no per-team overrides, no drift, no dependency conflicts. A change made once applied everywhere.

  1. Audit before architecture — mapping the debt before proposing anything.

COMPONENT INVENTORY — Button and tab variants documented across frameworks. Inconsistencies like these were catalogued across every screen before architecture began.

FINDING

FINDING

FINDING

Every team had built their own version of the same components. Buttons, inputs, tabs, modals — all solved differently, none of them consistent, none of them documented.

Every team had built their own version of the same components. Buttons, inputs, tabs, modals — all solved differently, none of them consistent, none of them documented.

INSIGHT

INSIGHT

INSIGHT

Proposing an architecture before mapping the full scope of drift would have produced a system designed around assumptions. The audit made every decision defensible.

DESIGN

DESIGN

DESIGN

Every screen across three frameworks audited before a single component was designed. Findings sequenced by impact and effort — giving engineering a prioritized remediation roadmap, not just a list of problems.

Every screen across three frameworks audited before a single component was designed. Findings sequenced by impact and effort — giving engineering a prioritized remediation roadmap, not just a list of problems.

  1. Designing to Angular's model first — making React and Blazor follow.

ORGANISMS — Modal panels and data grid rows composed from the atomic component hierarchy.

FINDING

FINDING

FINDING

Angular Material was already built on a token-first architecture. React and Blazor had no equivalent foundation — every styling decision was made ad-hoc.

INSIGHT

INSIGHT

INSIGHT

Designing to Angular's model wasn't a compromise — it was the smartest available foundation. A system built to Angular's token structure meant React and Blazor could consume the same layer without a lowest-common-denominator approach.

DESIGN

DESIGN

DESIGN

Angular Material's semantic tokens, density tokens, and typography scales became the architectural reference. React and Blazor were mapped to consume the same token layer — future-proof by design, not by accident.

  1. Implementation-ready specs — closing the "designed in Figma, broken in Blazor" gap.

PAGES — Full CRM contact view assembled from the complete Gator component hierarchy.

FINDING

FINDING

FINDING

Designers were discovering Blazor constraints after delivery — not before. Every mismatch between Figma and Blazor landed back on the design side to resolve, slowing every sprint.

INSIGHT

INSIGHT

INSIGHT

A component library is only as good as its implementation guidance. Figma variants without Blazor binding specs were incomplete deliverables — not handoff-ready.

DESIGN

DESIGN

DESIGN

Every component delivered with Blazor parameter bindings, state definitions, and responsive behavior documented. Paired with engineering to validate in all three frameworks before release — no surprises at handoff, no rework after.

"The hardest part wasn't building the system — it was designing it to work inside three frameworks simultaneously without asking teams to stop shipping."

OUTCOMES

A scalable, governed foundation delivered in weeks — adopted across three product teams.

40%

40%

Faster UI Delivery

Faster UI Delivery

60%

60%

Fewer Styling Overrides

Fewer Styling Overrides

3

Frameworks Supported

Frameworks Supported

4

Teams
Adopted

Teams
Adopted

Component adoption across CRM, Payroll, and Onboarding — one governed system replaced three independent component libraries.

Increased engineering trust and consistency —developers built against a documented foundation instead of resolving styling conflicts case by case.

Coordinator relearning eliminated — consistent layouts and behaviors across every Navigator module from day one.

Three frameworks unified without a rewrite — React, Angular, and .NET Blazor consuming identical tokens and patterns simultaneously.

PROJECT GALLERY

From fragmented codebases to one shared design foundation

Components

Components

Token Settings

Page Components

Page Templates

Color System

What I'd do differently

Start with the question I now ask in every engagement: how mature is your design system? Watching styling debt compound week after week across three frameworks made that lesson permanent. The cleanup was constant, milestones were slipping, and the dev team wasn't at a senior level — which meant every inconsistency landed on the design side to resolve. I'd surface the foundation gap in discovery, before the first component is built.