# One Codebase, Ten Branded Apps: Notes From a White-Label Flutter Platform

> How a single Flutter repository ships more than ten branded health apps: flavours, a Firebase project per brand, six AI screening SDKs and a release process that holds together.

- URL: https://nexentrasolutions.tech/blog/one-codebase-ten-branded-apps-white-label-flutter
- Author: Talha Rasool, CEO & Full-Stack Mobile Engineer
- Published: 2023-11-07
- Updated: 2026-10-05
- Topic: Build Notes
- Tags: Flutter, White-label apps, Mobile architecture, Digital health, Case study

Youth.ai is part of our team's experience: it was built by people now on the Nexentra team, before or independently of Nexentra. The [Youth.ai case study](https://nexentrasolutions.tech/portfolio/youthai) covers the product. This article is about the architecture decision underneath it, because the same question comes up whenever a business wants more than one version of an app.

> **In short:** Instead of copying the app for every brand, one Flutter repository uses flavours: each brand gets its own assets, Firebase project, bundle ID and store metadata, while the features stay shared. A new partner becomes a new configuration, not a new codebase, which is how one repository ships more than ten branded health apps.

## The problem with one app per brand

The business behind Youth.ai works with health and supplement brands, including Purovitalis Aura, Vitamins&Me, Cerva and Haus of Life. Each partner wanted its own app in the App Store and Google Play, with its own name, colours and store listing.

The obvious way to do that is to copy the project for every brand. It works for the second app. By the fourth, every bug fix has to be made four times, the copies drift apart, and nobody is quite sure which version has which feature. The cost of maintenance grows with every partner you sign, which is the opposite of what a platform should do.

## Flavours instead of forks

The answer was a multi-flavour Flutter platform. There is one repository and one feature set. What changes from brand to brand is configuration:

- the brand's assets, icons and colours
- its own Firebase project
- its own bundle ID
- its own store metadata

[Flavorizr](https://pub.dev/packages/flutter_flavorizr) generates the per-flavour setup, and environment-based configuration decides which brand a build is for. A new partner becomes a new configuration, not a new codebase. That's how one repository ships more than ten branded apps.

The discipline this needs is easy to state and hard to keep: brand differences live in configuration, never in brand-specific conditions scattered through the feature code. The moment a feature starts checking which brand it's running in, you're back on the road to separate apps.

| Approach | A bug fix | Features | Adding a brand |
| --- | --- | --- | --- |
| A copied project per brand | Made again in every copy | Copies drift apart | Another project to maintain |
| One codebase with flavours | Made once for every brand | One shared feature set | A new configuration: assets, Firebase project, bundle ID and store metadata |

## Six screening providers, one experience

The health features rely on AI screening from six providers: Shen.AI, Canary Speech, Binah, Gero, MX Lab and Skinive. Between them they cover face, voice, skin and biological-age analysis. Each SDK has its own capture requirements. Some need the camera, some need audio, some need video.

Left alone, that becomes six different experiences glued together. Instead, the capture flows were designed as one journey. Users are guided the same way each time, whatever runs underneath, and results are presented consistently. People don't need to know which vendor measured what. They need to trust the result.

## The unglamorous parts that make it work

A white-label platform is only as good as its release process. With ten or more apps, "we'll remember the steps" stops being an option. The platform has documented multi-brand release workflows, so shipping an update to every brand is a repeatable procedure rather than an afternoon of guesswork.

Around that sit the production essentials: Crashlytics for crash monitoring, Mixpanel for analytics, Intercom for in-app messaging, and StoreKit for in-app purchases and subscriptions. Features are organised in modules with GetX, which keeps state management predictable as the product grows.

## When is a white-label app the right call?

It isn't always. A white-label platform pays off when:

- several products share most of their features
- the differences are mostly visual or commercial, not functional
- you expect to add more brands over time

If each brand needs substantially different features, separate apps sharing a common library can be cleaner. Either way, it's a decision worth making deliberately at the start. Moving from copied projects to flavours later is far more painful than starting with flavours.

[Purovitalis Aura](https://nexentrasolutions.tech/portfolio/purovitalis-aura) is one of the branded apps built on this platform. If you're planning several apps from one product, our [mobile app development](https://nexentrasolutions.tech/services/mobile-app-development) work starts with exactly this kind of architecture decision.
