# The Cold-Start Problem for Paid React Native Templates

I'm going to walk you through, in embarrassing detail, how we got the first 100 paying customers for [Applighter](https://www.applighter.com), a catalog of full-stack React Native + Expo templates. Every channel we tried, the numbers behind each, and the ones we quietly buried.

If you're a solo dev or a two-person team about to sell paid code for the first time, this is the write-up I wish I'd had before launch.

## TL;DR

*   The first 20 customers took 3 months. The next 80 took 2.
    
*   Long-tail SEO and brand search drove the overwhelming majority of sales.
    
*   Twitter/X, Product Hunt, and paid ads were all dead ends for us.
    
*   The real problem in month 1 isn't "no customers." It's no evidence.
    

## The situation, in numbers

*   7 templates live at launch (all Expo SDK 54 + TypeScript + Supabase)
    
*   $79 per single-app license
    
*   7-day no-questions-asked refund
    
*   Zero email list, zero Twitter following, zero backlinks
    
*   First sale: day 12
    
*   Customer #100: about 5 months in
    
*   Total revenue by #100: modest four figures
    

The path was not linear. Once compounding starts, everything changes, but you have to survive the flat months first.

## The cold-start problem, defined

The cold-start problem for paid templates is not "no customers." That's a symptom. The disease is **no evidence**: no reviews, no case studies, no Google rank, no name recognition, no referrals. Every channel that scales in month 12 requires evidence that doesn't exist in month 1.

So the entire game of the first 100 sales is one thing: build evidence faster than your runway burns. Copy, pricing tiers, and the color of the buy button are rounding errors next to that.

## Channel 1: Long-tail SEO (biggest lever, slowest payoff)

We don't try to rank for "react native template." We rank for queries like:

*   `react native supabase template with rls and storage`
    
*   `streaming ai responses to react native`
    
*   `expo eas build cost calculator`
    
*   `how to sign urls in supabase storage for private buckets`
    

These have search volume in the low hundreds per month. That's the point. The developer typing that exact query has already decided to build the thing. They're not tire-kicking. They convert.

Here's the funnel breakdown from month 6:

| Channel | Sessions | CVR | Attributed sales |
| --- | --- | --- | --- |
| Long-tail SEO (blog) | 4,200 | 0.9% | 38 |
| Direct + brand search | 1,100 | 3.4% | 37 |
| Reddit referral | 380 | 1.3% | 5 |
| Hacker News (one-off) | 2,100 | 0.14% | 3 |
| Twitter/X | 90 | 1.1% | 1 |
| Paid Google Ads | 40 | 0% | 0 |

Long-tail wins on volume. Brand search wins on conversion. Together they account for 75 of the 84 attributed sales. Everything else is noise on the tail.

**Why it works:** every technical essay is a permanent asset. Written once, it ranks for years and keeps producing sales. Measured as labor hours against recurring sales, this is the highest-paid work I've done as a founder.

**The catch:** the payoff window is 3 to 6 weeks minimum after publishing. Google has to index you, judge you, rank you, and get a real human to click. That loop runs no matter how good the essay is, and most founders quit at week three.

## Channel 2: Reddit, done carefully

Not r/reactnative. The moderator culture there is heavily anti-promo, and we got flagged twice.

What worked:

*   **r/expo:** answering technical questions with real depth, mentioning the template at the end only when directly relevant.
    
*   **r/indiehackers:** long-form "here's how I built this" posts with numbers.
    
*   **r/SideProject:** same, slightly more casual.
    
*   **r/Supabase:** bug threads where our stack overlapped.
    

The rule: you can promote in a comment after you've given three comments of pure help. Reddit's spam radar, human and algorithmic, is exceptional at spotting drive-bys.

## Channel 3: Open source as credibility

We open-sourced two things. First, a tiny Supabase migration generator:

```ts
export function generateMigration(schema: SchemaDefinition) {
  const columns = schema.columns.map(colToSql).join(',\n  ');
  return `create table ${schema.table} (\n  ${columns}\n);`;
}
```

Second, our Stripe-to-Supabase license-grant webhook pattern:

```ts
export async function POST(req: Request) {
  const event = stripe.webhooks.constructEvent(
    await req.text(),
    req.headers.get('stripe-signature')!,
    process.env.STRIPE_WEBHOOK_SECRET!,
  );

  if (event.type === 'checkout.session.completed') {
    const session = event.data.object as Stripe.Checkout.Session;
    await supabase.from('license_grants').insert({
      user_id: session.metadata!.user_id,
      product_slug: session.metadata!.product_slug,
      granted_at: new Date().toISOString(),
    });
  }
  return new Response(null, { status: 200 });
}
```

Neither piece went viral. But both:

*   Gave us a real GitHub org for buyers to click through
    
*   Turned into two Indie Hackers threads and one Hacker News mention
    
*   Continue to send small trickles of trust-first traffic
    

The HN mention alone drove 3 same-day sales and got us into Google's index for terms we didn't otherwise rank for.

Don't open-source the whole template. Open-source one useful piece. Buyers pay for the composition of the parts, not the parts.

## Channel 4: Multi-SKU cross-linking

Once we had three or more templates, we cross-linked them on every product page. When AI Voice Notes started ranking, it pulled up Chat with PDF and AI Calorie Tracker with it. Same buyer intent, same domain authority.

This is the compounding advantage of a small catalog over a single hero product.

## Channel 5: Refund policy on the pricing card

7 days, no questions asked. Refund rate to date: 3.1%. Moving the badge from the footer to the pricing card gave us a significant CVR lift, though it's hard to isolate cleanly from other changes we made at the same time.

Buyers of a $79 developer template are risk-buyers. A visible, generous refund is the cheapest way to reduce perceived risk. Our accountant hates it. Our conversion rate loves it.

## What we buried

| Channel | Why |
| --- | --- |
| Twitter/X threads | Broad reach, zero buyer intent |
| Product Hunt launch | One-day spike, no SEO compounding |
| Paid Google Ads | $120 CAC on a $79 product |
| LinkedIn posts | Not repeatable at scale |
| YouTube tutorials | Editing labor per view was untenable |

The pattern: broad-intent paid channels have bad economics. Specific-intent organic is the whole game.

## Against ThemeForest

The category we sell into has been trained by ThemeForest to expect UI-only templates with mocked data. Every template we ship goes deeper:

*   Full Expo SDK 54 source
    
*   Supabase Row Level Security policies
    
*   Working AI integrations with real API contracts
    
*   Stripe-powered license grants provisioned to the repo the moment payment clears
    
*   NativeWind, TypeScript, and an EAS Build config that actually builds
    

The gap between "UI template" and "working product" is what buyers pay for. It's also the gap you have to demonstrate, because writing "full-stack" on a landing page means nothing on day one.

## If we started over

1.  Ship one template. One.
    
2.  Write 4 technical essays about problems your template solves.
    
3.  Set up analytics before launch: Search Console, Plausible, a UTM convention.
    
4.  Open-source one small, useful utility.
    
5.  Show up in 2 or 3 communities regularly.
    
6.  Put the refund policy on the pricing card.
    
7.  Wait. Six months.
    

The founders who cleared the cold-start went through the same flat months you're in now. They just kept writing.

If you're selling code and stuck in those flat months, tell me in the comments which channel you're betting on. Happy to share what we saw.

*Originally published on the* [*Applighter blog*](https://www.applighter.com/blog/cold-start-problem-paid-react-native-templates-first-100-customers)*.*
