Problem
Football clubs each wanted their own branded fan app, but building a bespoke app per club is slow and unmaintainable. The challenge was to ship a single codebase that could become any club's app through configuration alone.
What I built
A multi-tenant React Native platform where each club is a tenant defined by a theme, locale set, and content feed. A build/config pipeline injects branding (colors, logo, typography), enables features per tenant, and wires the club's content sources (news, videos, players, fixtures).
Architecture / technical decisions
- Theme-as-data: every visual token resolved from a tenant manifest, so a new club is a config change, not a code change.
- i18n-first: all copy externalized; RTL-aware layouts.
- Content abstraction: a normalized content layer so different club CMSs map to one app model.
- Release strategy: shared release train with per-tenant store metadata.
Result / impact
New clubs onboarded in days instead of weeks, with a single maintained codebase serving many branded apps.
Lessons learned
White-label discipline pays off only if you treat configuration as a first-class product surface — the manifest schema is the real product.
