DEV Community

Cover image for Cutting React Native template support 70% with docs
Chris F A
Chris F A

Posted on • Originally published at applighter.hashnode.dev

Cutting React Native template support 70% with docs

We sell React Native templates. In Q1 2026 we rewrote our docs. Support tickets dropped 70%. This is the exact process, the exact structure, and the numbers.

The audit (do this first)

Before rewriting a single page, tag every support ticket for six weeks. Six columns:

date | customer | category | root_cause | resolution | in_docs?
Enter fullscreen mode Exit fullscreen mode

Categories we ended up with: install, configure, extend, ship, billing, other.
Root causes: docs_missing, docs_wrong, docs_unfindable, product_bug, user_misunderstanding, out_of_scope.

The audit output for us:

Category % of tickets Docs-fixable?
install 24% yes
configure 21% yes
extend 18% yes
ship 5% yes
billing 10% no
other 22% mostly no

68% of tickets were docs-fixable. That number is the whole rest of the article.

The four-mode structure

Restructure your doc site around the four stages a new customer hits, in order:

docs/
├── getting-started/     # install
│   ├── installation.mdx
│   ├── environment.mdx
│   ├── quick-start.mdx
│   └── folder-structure.mdx
├── core-concepts/       # configure
│   ├── supabase.mdx
│   ├── expo-integration.mdx
│   └── ui-components.mdx
├── extend/              # extend
│   ├── adding-a-screen.mdx
│   ├── auth-guards.mdx
│   └── swapping-ai-provider.mdx
└── ship/                # ship
    ├── eas-build.mdx
    ├── app-store.mdx
    └── ota-updates.mdx
Enter fullscreen mode Exit fullscreen mode

Order matters. Doc-site ordering is not aesthetic. It is a state machine — each page assumes the customer completed the previous one.

The five rules

Print these. Stick them to a monitor.

1. First paragraph states the outcome, not the topic.

Bad:

# Authentication

This page covers authentication in the template.
Enter fullscreen mode Exit fullscreen mode

Good:

# Adding auth to a new screen

By the end of this page, tapping a locked screen will redirect
signed-out users to `/sign-in` and preserve the deep link they
originally opened.
Enter fullscreen mode Exit fullscreen mode

2. Every code block is copy-paste runnable.

Bad:

// ... existing imports
export function Screen() {
  const { user } = useSupabase();
  // ...
}
Enter fullscreen mode Exit fullscreen mode

Good:

import { useSupabase } from "@/lib/supabase";
import { Redirect } from "expo-router";

export function ProtectedScreen() {
  const { user, loading } = useSupabase();
  if (loading) return null;
  if (!user) return <Redirect href="/sign-in" />;
  return <YourScreenContents />;
}
Enter fullscreen mode Exit fullscreen mode

3. Every page links to the next page. Never let the customer bounce to Google.

4. If you answer the same email twice, the docs get updated that day. Same day. This is the only rule with real leverage.

5. Ship a claude.md at the project root. If your customer opens the template in Claude Code, Cursor, or any AI-native editor, the AI reads this file first. The one we ship in every Applighter template looks roughly like this:

# Applighter — <template name>

## Stack
- Expo 54, React Native 0.76
- Supabase (auth, Postgres, storage, edge functions)
- NativeWind 4, React Native Reusables (primitives)
- TanStack Query 5

## Key files
- `app/(auth)/*` — auth flows
- `app/(app)/*` — signed-in surface
- `lib/supabase.ts` — client + typed helpers
- `supabase/migrations/*` — schema (RLS policies live here)

## Conventions
- All server access via TanStack Query hooks in `hooks/`
- Never call supabase-js directly from a component
- Add new tables with a migration, not the dashboard

## Env vars
See `.env.example`.
Enter fullscreen mode Exit fullscreen mode

The AI now writes correct code the first time. The customer never emails you.

Operational loop

Once the docs exist, keep them alive:

  1. Log every ticket in a shared sheet (6 columns above).
  2. 30-minute triage every Friday. Flag anything asked twice.
  3. Doc gap → paragraph inline or new page scaffolded same day.

That's it. No LLM classification. No analytics vendor. The marginal cost of writing one paragraph is much lower than the marginal cost of answering the same email eight times.

Results

  • Support tickets: −70%
  • Docs-caused refunds: −85% (from ~4% to ~0.6% of purchases)
  • Time-to-first-customized-screen: 2–4 hours → 25–45 min
  • Five-star reviews mentioning "docs": 2 → 34 across two quarters

What we didn't do

  • No chatbot. Deflection metrics are gameable.
  • No paywalled docs. Public and indexable.
  • No community forum. Half-populated forums are worse than none.
  • No codebase restructure to match docs. Different audiences, different shapes.

Reference docs I used

If you sell anything to developers, run the audit this week — tag your last hundred tickets and the shape of your docs problem will be obvious within an hour. Drop a comment with what your top ticket category turns out to be; curious whether install beats configure for everyone or just for us.

Top comments (0)