Case Study · Affiliate Platform

Affiliation Cloud

Redesigning the system that runs an iGaming affiliate company's relationship with the affiliate partners who monetize its casino and sports betting brands.

Role
Product Designer
Year
2025 – 2026
Platform
Web
Scope
Ongoing
Affiliation Cloud Admin Report: CPA, RevShare, Clicks, and Click to FTD Rate, Cost and Profit Breakdown over time, Publishers and Sites Performance
01Overview

Overview

Affiliation Cloud runs an iGaming affiliate company's relationship with the partners who monetize its casino and sports betting brands. One product, two audiences: Publisher (light, external partners) and Admin (dark, the company's internal sales and marketing teams).

Publisher first, then the bigger problem: Admin.

Publisher side — light theme, WidgetsAdmin side — dark theme, Flat Fees

One product, two audiences — Publisher (light) and Admin (dark), same nav shell either side.


02Problem

Problem

Publisher's navigation held seven links, total. It worked. It just hadn't been designed; it had accumulated.

Admin was worse: deal requests, flat fees, sales pipelines, three workflows that grew independently, each with its own screen and its own status logic. "What needs my attention today" meant checking three places.

Four real constraints shaped every decision:

Barely any design system Legacy styles, no documentation, nothing to lean on.
A legacy codebase Some fixes had to fit the existing architecture, not the ideal one.
Parallel development The redesign ran alongside live feature releases, without blocking engineering.
Fragmented priorities Business, product, and engineering didn't agree on what mattered most.

03Process

Process

Publisher: a year of research with daily users turned into real information architecture, not a flat list, plus an onboarding flow built around one goal: a new publisher's first real result, fast.

Admin: audited the legacy system, simplified it, built the real interface on top as I went, rather than finishing a "perfect" system first.

Both sides: prototype before polish. A page this big skips too many unresolved questions jumping straight from a Jira story to a Figma mock. Build a working prototype first, settle features and layout with the team, then make it the real design. Cheaper to iterate on, and it settles arguments a static mock can't. Sales Platform and Command Center, below, both went through it.

One habit throughout: before calling anything done, a deliberate pass for cases I'd designed around without noticing. It caught real gaps on Sales Platform, more below.

Research artifact 1 of 3Research artifact 2 of 3Research artifact 3 of 3

04Solution

Solution

From a spreadsheet to a system of record

Problem

Sales ran on an Excel “Sales Bible,” bridged by hand into a bidding engine over Slack: no automation, no audit trail. A first reskin shipped and was rejected as generic.

Solution

Rebuilt the board’s IA: a peek-rail compresses past months into a scannable strip instead of a dropdown, a frozen-axis rate-card column stays legible while the board scrolls beneath it.

Paging between months, reordering a slot, then opening a sale and the month's shared notes, all without leaving the board. The rate-card rail (left) stays fixed while the months move

Command Center: one place for what needs attention

Problem

Deal requests and flat fees lived on separate screens with separate status logic: Account Managers and Operations checked two places just to answer “what needs my attention today.”

Solution

Command Center pulls both into one filterable Inbox and a per-workflow Kanban Board: one answer instead of two.

The Inbox: every open task across both workflows in one filterable list, opening a row slides in a detail drawer without leaving the list

One drawer, every workflow

Problem

Long, centered modals blocked the table behind them, reinvented separately on every admin screen: tabs, publisher info, a growing subrequests list, a “Send Back”/“Complete” pair, all crammed in.

Solution

Every one now opens the same right-docked drawer: one shared pattern, applied everywhere. Fields sit in named sections, the table stays visible behind it, and a stepper (named stages per workflow) sits up top.

Before: a centered modal, tabs and a subrequests table crammed inside, the table behind it fully blockedBefore: a centered modal, tabs and a subrequests table crammed inside, the table behind it fully blocked

After: the same Deal Request, now a right-docked drawer, stepper up top, its own Sites tab for deal terms per site, table still visible behind itAfter: the same Deal Request, now a right-docked drawer, stepper up top, its own Sites tab for deal terms per site, table still visible behind it

Opening a row anywhere on Admin surfaces the same card layout (Parties, Commercial Terms, Site Allocation), regardless of which screen it opened from. Learn to read a deal once, read it anywhere.


05Design System

Design System

Admin's design system started as almost nothing. I audited it, simplified it, expanded it alongside live feature work, built for what the product needed next.

Publisher and Admin share the same tokens, not two tuned palettes: build a component once, it reads correctly on both themes. Publisher's own dashboard proves it: one screen, one build. Drag across the boundary and every surface, border, chart fill, and status colour resolves to the other theme, nothing swapped by hand.

Same components, dark theme
Same components, light theme
LightDark
◂▸

Publisher's real dashboard, light and dark: drag to cross the boundary. Surfaces, borders, chart fills, and status colours all resolve per theme, nothing guessed afterward.

The system underneath

One name, two values.

These aren't guessed per theme: 7 of the 15 Surfaces tokens, each one resolving to a light and a dark value from the same Figma variable collection, verified side by side rather than eyeballed separately.

Token
Light
Dark
--action
#ffc101
Primary/Default
#ffc101
Primary/Default
--page
#f2f3f5
Neutrals/150
#181818
Neutrals/970
--primary
#ffffff
Neutrals/White
#1e1e1e
Neutrals/1000
--disabled
#e8e8e8
Neutrals/400
#47474c
Neutrals/750
--success
#e1f8f0
Success/100
#053926
Success/900
--destructive-hover
#e46464
Error/500
#7e0000
Error/800
--destructive-hover-2
#f6c7c7
Error/200
#e46464
Error/500

#e46464 is destructive-hover in light and destructive-hover-2 in dark: the same value, two different jobs depending on the theme, which is exactly why these are named for what they do, not what they look like.


06Retrospective

Retrospective

The Publisher onboarding and activation work moved a real number: activation rate up 18%.

Business priorities set the real scope, like on any real product. Rolling the same drawer pattern out across Command Center, Deal Requests, and Flat Fees took longer than fixing just the one screen that prompted it, but it's what kept the system from splintering back into three conventions.

The throughline: don't stop at "it looks right." Sales Platform looked right and still failed, it didn't match how the team actually worked. Both times, the fix was checking structure before trusting polish.