AiSalonHub licenses its salon discovery platform as a white-label product for salon chains and franchise groups, turning each partner into a reseller and creating a distributed, low-CAC sales channel for software distribution. By giving salon chains their own branded version of the platform — with custom domains, tenant-isolated databases, and revenue-sharing economics — AiSalonHub replaces expensive outbound sales with a partner-driven model where the people who already know salon owners do the selling for you.

The Problem

Selling SaaS to salon owners is expensive. The traditional playbook — Facebook ads, cold email, trade-show booths — runs into three structural problems:

**High CAC.** Typical SaaS CAC for small-business salon software runs $200–$800 per customer. At $29–$99/month ARPU, that's 7–28 months to break even. Most startups can't sustain that burn.

**Low trust in direct sales.** Salon owners are bombarded with software pitches. The channel that works is peer recommendation. Cold outreach is ignored.

**Fragmented market.** ~80,000 salons in the US, but no single channel reaches more than 2–3% efficiently. A direct sales team can't scale.

White-label partnerships solve all three: existing salon networks — chains, franchise groups, distributors — get a financial incentive to distribute the platform to people who already trust them.

The Solution

Salon chains already have what AiSalonHub needs: trust, distribution, and a reason to resell. A chain with 50 locations selling a white-labeled AiSalonHub gets a recurring revenue stream from existing customers, deeper franchisee engagement, and a competitive differentiator.

The partner does the selling. AiSalonHub provides the platform, infrastructure, and support. Result: near-zero marginal CAC.

Architecture

The white-label system is built on multi-tenant D1 databases with per-tenant configuration isolation inside Cloudflare Workers.

**Tenant schema.** Each partner gets a row in `white_label_tenants` with all configuration — branding, pricing, domain, feature flags — stored at the row level.

```sql

CREATE TABLE white_label_tenants (

id INTEGER PRIMARY KEY AUTOINCREMENT,

partner_name TEXT NOT NULL,

subdomain TEXT UNIQUE NOT NULL,

custom_domain TEXT,

branding JSON NOT NULL DEFAULT '{}',

revenue_share_pct REAL NOT NULL DEFAULT 30.0,

base_price_cents INTEGER NOT NULL DEFAULT 2990,

commission_model TEXT NOT NULL DEFAULT 'recurring',

feature_flags JSON NOT NULL DEFAULT '{}',

status TEXT NOT NULL DEFAULT 'active',

created_at TEXT NOT NULL DEFAULT (datetime('now'))

);

CREATE TABLE white_label_customers (

id INTEGER PRIMARY KEY AUTOINCREMENT,

tenant_id INTEGER NOT NULL REFERENCES white_label_tenants(id),

salon_name TEXT NOT NULL,

owner_email TEXT NOT NULL,

stripe_subscription_id TEXT,

status TEXT NOT NULL DEFAULT 'active',

enrolled_at TEXT NOT NULL DEFAULT (datetime('now')),

UNIQUE(tenant_id, owner_email)

);

```

**Tenant isolation at the Worker level.** Every request passes through a middleware that extracts the tenant from the subdomain or custom domain, loads the config, and attaches it to the request context.

```typescript

export async function tenantMiddleware(request: Request, env: Env) {

const url = new URL(request.url);

const host = url.hostname;

const tenant = await getTenantByDomain(host, env);

if (!tenant) return handleRequest(request, env);

if (tenant.status !== 'active')

return new Response('Partner account inactive', { status: 403 });

request.tenant = tenant;

request.tenant.db = getTenantDB(tenant.id, env);

return handleRequest(request, env);

}

```

**Per-tenant D1 binding.** Rather than row-level filtering in a shared database (which risks data leaks), each tenant gets a dedicated D1 binding. The Worker routes queries to the correct database based on the resolved tenant.

```typescript

const TENANT_DBS: Record<number, D1Database> = {

1: env.TENANT_1_DB,

2: env.TENANT_2_DB,

3: env.TENANT_3_DB,

};

function getTenantDB(tenantId: number, env: Env): D1Database {

const db = TENANT_DBS[tenantId];

if (!db) throw new Error(`No binding for tenant ${tenantId}`);

return db;

}

```

Implementation

The onboarding flow follows five steps:

1. **Partner qualification.** Evaluate the chain's reach (min 20 locations or 200+ salon relationships), distribution channels, and willingness to promote. Sign a partner agreement covering revenue split and branding.

2. **Tenant provisioning.** Create the tenant record, provision a new D1 database with base schema, configure Cloudflare custom domain routing, and set up the partner's subdomain.

3. **White-label customization.** Partners configure branding (logo, colors, fonts), custom domain, commission rates, feature toggles, and email templates via an admin dashboard.

4. **Partner launch.** AiSalonHub provides a launch kit: email templates, co-branded landing pages, and a referral tracking dashboard. The partner promotes through existing channels.

5. **Ongoing management.** Each partner sees active subscriptions, MRR generated, commission accrued, and churn metrics in their dashboard.

Revenue split is straightforward: the partner receives a configured percentage (default 30%) of every subscription payment they refer. AiSalonHub handles billing, support, and infrastructure. Commission is paid monthly via Stripe Connect.

```typescript

function calculatePartnerPayout(tenant: Tenant): {

grossMRR: number;

partnerShare: number;

platformFee: number;

} {

const grossMRR = tenant.activeSubscriptions

.reduce((sum, sub) => sum + sub.amountCents, 0);

const partnerShare = Math.round(grossMRR * (tenant.revenueSharePct / 100));

const processingFee = Math.round(grossMRR * 0.029);

const platformFee = grossMRR - partnerShare - processingFee;

return { grossMRR, partnerShare, platformFee };

}

```

Results

While still scaling, early indicators based on comparable white-label SaaS programs are promising:

| Metric | Direct Sales | White-Label Partnerships |

|--------|-------------|--------------------------|

| CAC per customer | $200–$800 | $15–$60 |

| Partner onboarding rate | N/A | 2–4 partners / quarter |

| MRR attribution | 100% direct | 30–50% from partners |

| Time to first sale (new mkt) | 3–6 months | 2–4 weeks |

**Channel CAC of $15–$60** comes from the partner's existing relationship. Even at 30% revenue share, blended unit economics beat direct sales because acquisition cost is amortized across thousands of customers the partner already influences.

**MRR from partnerships.** At 10 partners with 20 subscriptions each at $29/mo, that's $5,800/mo in partner-attributed MRR. AiSalonHub keeps 70% ($4,060/mo). The partner keeps $1,740/mo — a meaningful side revenue stream that incentivizes continued promotion.

Key Takeaways

1. **White-label partnerships are a sales channel, not a distribution channel.** The partner actively sells to their network — they put their own brand on the line, which drives higher conversion than a passive distributor relationship.

2. **Tenant isolation must be baked in from day one.** Per-tenant D1 bindings with Worker-level routing provide genuine data isolation and simplify SOC 2 compliance. Row-level filtering in a shared database creates unacceptable risk.

3. **Revenue share should be simple and transparent.** A flat percentage of recurring revenue (20–35%) is easy for partners to track. Stripe Connect automates the payout.

4. **The partner's brand becomes your brand in their network.** Invest in custom domains, full theming, and co-branded emails. The more it looks like their own product, the more enthusiastically they'll promote it.

5. **Start with 2–3 high-quality partners.** A single well-aligned partner with 100+ locations outperforms 10 small ones who rarely mention your platform.

6. **The numbers work at low price points.** At $29/mo, 30 referred customers per partner generates $609/mo in platform revenue. With 20 partners, that's $12,180/mo — all acquired at near-zero CAC.