Erika WrightErika WrightSenior Product Designer
Case study 01 · Enterprise loyalty platform
  • System-wide
  • Brownfield

150+ live sites, moved to mobile. None taken offline.

I owned a 12-month responsive migration for an enterprise loyalty platform, and turned it into a repeatable way to ship change safely.

V5 designs, reconstructed from the shipped system and anonymized.
Sites migrated150+branded program sites, live the whole time
Documented
Support tickets3–5 / modown from about 20 a month
Measured · Azure DevOps
Active work per migration24→7.5htimed subset, June 2024
Owner-reported
My role

Owner of the migration: sequencing, method, theme guardrails, runbook and team ramp-up.

Timeline · 12 months
KickoffDec 2024 · in production
Team & tools
  • 2 junior designers
  • Contract designer
  • Figma
  • CSS variables
  • Notion
Deep read · about 7 min

The 30-second version

For busy reviewers

The problem

More than 150 branded client sites ran on older templates, and on some programs participants couldn’t use a phone at all. Every fix changed a live, revenue-bearing site.

What I did

I owned the migration. I re-sequenced it by participant impact, built guardrails into the theme system, wrote the runbook and brought two junior designers up to speed.

The result

All 150+ sites responsive in 12 months. Support tickets dropped from about 20 a month to 3–5, and active migration work fell from 24 to 7.5 hours in a timed subset.

01

A decade of custom themes, and a phone problem

Skim shows the headline and the constraints. Deep adds the full story.

An enterprise loyalty and incentives platform ran more than 150 branded program sites for its clients. Many sat on older templates with a decade of bespoke styling and program-specific rules. Several clients paid seven figures a year and ran multiple programs each.

Participants on some of those programs couldn’t use the mobile experience at all. Those clients were frustrated, and some were signaling they might leave. Shopping, account history, claims, contact forms and custom pages all had to make the move.

A template change could update the structure, but it couldn’t decide which content mattered to a particular program, or how that program’s brand should appear. The repeated, page-by-page work was the real problem.

Constraints
  • About 24 hours of migration budget per program
  • Two-week sprints, alongside the team’s other work
  • No staging environment per program
  • Clients had to preview, approve and supply assets first
  • Brand styling applied inconsistently across programs
My role and the team
  • Owned the initiative: sequencing, method, guardrails and runbook
  • Led two junior designers who were new to the platform
  • Onboarded a contract designer in another time zone partway through
  • Routed revisions through account managers to the assigned designer
  • Stayed the point person for technical questions throughout
02

Three decisions that shaped the rollout

Each one lists the constraint, the call I made, and what it cost.

1 · Sequence by who was locked out

Constraint
Limited migration capacity, and a queue ranked by last year’s gross profit that put the largest accounts first regardless of how well their sites worked.
Decision
I re-sequenced with the team by participant impact and churn risk. Programs whose participants couldn’t reach mobile went first. The highest-revenue program was stable, so it waited at medium priority.
Trade-off
The biggest account waited, and that had to be explained and agreed rather than assumed. In return, the most visible harm was fixed first and at-risk relationships saw movement soonest.

2 · Guardrails in the theme system

Constraint
Two designers new to the platform had to edit production themes for major clients, at pace, with no staging environment per program.
Decision
I split the theme system so the safe surface was the most convenient one: brand variables to change, a config layer not to touch, and a separate space for sanctioned custom work.
Trade-off
Less freedom per site and a slower first week while people learned the runbook. The common ways to damage a live program stopped being reachable by accident.
LayerDocumented exampleMaintainer guidance
SharedPublic and private bannersApply global elements across program pages.
ConfigurablePrimary color, primary tintPrimary drives buttons and table headers. Tint drives account-card title backgrounds.
CustomDesigner VariablesKeep custom work and overrides in this layer. Never fork the base theme.
Setup checkPublic and private footersAdd sections explicitly on new builds. They are not automatic.
How the theme configuration was layered, summarized from the migration documentation.
Migration runbook · excerpt
Staging
Build on the demo site. Copy to production only after the client previews and confirms.
Production
Lock the site before any edit. Unlock only when the work is complete and approved.
Safe to change
Brand variables, prefixed --brand-, carry the client’s branding.
Do not change
Theme Config variables. Ask before removing any template token.
Check
Every page styled to the client’s brand, with no UI or responsive defects, before hand-off.

Transcribed from the runbook I wrote. Client names, colleague names and internal paths removed.

3 · Standardize the pattern, preserve the program

Constraint
Carrying every program’s brand forward unchanged would have carried its inconsistencies into the new system.
Decision
I used CSS variables to apply brand styling consistently within the shared structure, and reviewed color pairings, text size and spacing so each program stayed readable, not just on-brand.
Trade-off
Some programs lost one-off styling they were used to. White text on a yellow brand color, for example, had to change.
03

One path, with room for program differences

The repeatable method every migration followed.

  1. Shared template

    Apply the V5 template and the provided starter code.

  2. Program identity

    Set brand variables. Preserve Theme Config.

  3. Custom overrides

    Use Designer Variables only where a program needs it.

  4. Preview and approval

    Check branding and responsive behavior, then get client sign-off on demo.

  5. Production handoff

    Copy approved demo work to a locked production site.

04

Same catalog, before and after

Legacy template next to the V5 design. V5 designs, reconstructed from the shipped system and anonymized.

Before: legacy catalog with a dense department list and a desktop-only layoutAfter: V5 catalog with search and shop-by-category tiles

Before: legacy catalog, anonymized. After: V5 designs, reconstructed from the shipped system and anonymized.

V5 designs, reconstructed from the shipped system and anonymized.

05

What changed, and how it was measured

Every number is labeled with how it was collected.

150+program sites moved to a responsive frameworkDocumented
12 morollout, in production December 2024Documented
3–5support tickets a month, down from ~20Measured · Azure DevOps
24→7.5haverage active work per migration, timed subsetOwner-reported

Support tickets per month

Measured. Source: Azure DevOps (TFS) reports provided by the Scrum Master and VP of Technology.

Active hours per migration

Owner-reported timed subset, around June 2024. Covers coding, testing and active approval handling, not waiting time. Not extrapolated to all programs.
06

Edge cases and alternatives

Where the happy path needed more care, and what else was on the table.

Edge case

Custom or optional pages

A program has Rules, FAQ, custom recognition pages or modules the standard template doesn’t include.

Handling: preserve applicable content and verify public and private pages. A template switch alone doesn’t count as done.

Edge case

Demo versus live editing

A maintainer follows demo-site instructions while changing a production program.

Handling: lock a live site while working, and keep demo publishing separate from production preview.

Alternative A

Separate page layouts

Each page owns its structure and styling. Repeated local changes keep components inconsistent and every update means redundant checking.

Retrospective comparison against the old baseline, not a documented rejected proposal.

Alternative B

One fixed theme

Every program gets an identical hero, layout and brand treatment. Simple to roll out, but it leaves no room for client branding or custom content.

Retrospective concept, not a documented historical proposal.

Switch to Deep for edge cases and alternatives.

07

What I’d keep, and what I’d do next

The strongest part of this approach was connecting participant access to release decisions. Prioritization addressed the most immediate harm, and a constrained theme system with client-preview gates gave a growing team a safer way to deliver.

The cost was less freedom per site and a slower first week. The lasting result was a repeatable method: shared patterns, clear customization boundaries, and a review process that traveled with the implementation.

  • Track mobile session share for the programs that had been locked out, not just support volume.
  • Document rollback and recovery steps alongside the release rules.
  • Turn the runbook’s release rules into automated checks before the next modernization.
Next case study · 02

From a qualifying sale to a claim someone can trust

I built the claims frontend, then audited it: settle eligibility before the form, keep invoice, product and proof together, and show status after Submit.

  • Feature
  • Brownfield
Read the case study →

Need someone who can modernize a live product without breaking it? Let’s talk.

Erika WrightErika WrightSenior Product Designer
Email
erika@ewright.tech
Location
Atlanta, GA · Remote
LinkedIn
Profile