Product design system
RequestWave, broken down.
A white-label client portal means one component system, re-skinned per agency tenant. This page takes it apart: the palette observed from the live product, the type, and the defining move rebuilt live — the same portal re-themed per tenant. Exact tokens (Tailwind + shadcn) land from the repo (manifest).
In my words
What I built
RequestWave is my own product — I designed the brand, the UI, and built the full stack solo: React front end, a multi-tenant Postgres backend with row-level security, Stripe Connect payments, transactional email. No handoff, brand to backend.
The design problem that shaped everything: white-label. Every agency runs the portal under its own name and colors, so the system had to separate what's constant (layout, components, flows) from what's the tenant's (brand). The toggle below is that separation, made literal.
- Role
- Founder — brand → backend
- Since
- 2025
- Stack
- React · Supabase · Stripe
- Model
- Multi-tenant · RLS
The originals
The finished outputs, first
The live marketing site (requestwave.com).

Color
Constants, and what varies
Observed from the live product (dark navy ground, a product blue). Exact tokens are confirmed from the repo's Tailwind config + shadcn theme.
Constants
The tenant brand — the variable
Each agency's accent replaces the product blue across the whole portal. Four sample tenants below; try the live toggle.
Type
Typefaces + specimens
Closest-match stand-ins; the production type comes from the repo tokens.
White-label
The same portal, any agency — live
The defining move: pick a tenant and the portal re-skins (accent + name) while the layout stays fixed. A real rebuild of the multi-tenant theming.
One component tree, one database — the tenant's brand (name + accent) is a prop. Row-level security keeps each agency's data walled off underneath.
The chrome
Repeating components, named
The component system the white-label runs on.
The asset set
The vocabulary the system draws on
What it took
Built with
The full stack, brand to backend — one person, no handoff.
Product lexicon
.png)