Built for Claude Code, Cursor and Copilot

The React Native Boilerplate Your AI Agent Already Understands

Expo SDK 54 and React Native, with auth, in-app and Stripe payments, push and offline sync already wired. Your agent reads a 37-row map of this repo before it writes anything, so it opens the right file instead of inventing a new one.

Claude Codeready CLAUDE.md12 KB Cursor Copilot
37agent lookup rows 285files 27components 85tests passing 2OS · iOS · Android
01 why this exists

Every mobile app burns the same three weeks before feature one

Week one

Wiring auth, secure token storage, and refresh-token rotation, before you build a single screen.

Week two

Fighting RevenueCat, Stripe, and Apple's IAP rules to take your first payment.

Week three

EAS builds, push certificates, and a TestFlight rejection you did not see coming.

This is the codebase you wish you had started with. Auth, payments, push, offline, and native APIs are already wired, so day one is your actual product.

what your agent reads first

A 37-row table tells your agent which file to open before it writes anything

Not a README it might skim. A file Claude Code loads at the start of every session in this repo, mapping the sentence you are about to type to the exact rule or recipe it should read first.

CLAUDE.md
# CLAUDE.md

This file is loaded into Claude Code's context every
session in this repo. It's the single source of truth
for **how to code in this project** — conventions,
architectural rules, and pointers to per-task recipes.

⋮

## Conventions (these are RULES, not suggestions)

1. **Backend-agnostic by default.** No code in
   `apps/mobile/` may import from `apps/api/`. The
   mobile app talks only through `@repo/api-client`
   against a configurable `EXPO_PUBLIC_API_URL`.

2. **Type safety end-to-end.** Every API response goes
   through a zod schema. No `any`. Shared types live in
   `packages/auth/src/types.ts` or alongside the
   relevant zod schema.

3. **Secrets in secure storage.** Tokens go in
   `expo-secure-store` on native and `localStorage` on
   web (dev-only). Never `AsyncStorage` for tokens.
CLAUDE.md: the opening, then the conventions section 54 lines later. Wrapped to fit; the ⋮ marks the gap.
37
rows telling it which file to open

A "before you code" table mapping what you might ask for to the rule or recipe to read first. All 37 targets exist in the repo, so none of them sends your agent to a file that is not there.

8
rules that override its habits

A section headed "Conventions (these are RULES, not suggestions)", from backend-agnostic imports to where tokens may be stored, plus 7 more under "What NOT to do".

4
slash commands instead of guesswork

/new-screen, /new-api-call, /new-form and /add-paywall scaffold the wiring, so your agent fills in logic rather than layout.

38
scoped playbooks it can open

11 per-feature rule files and 27 task recipes, covering the offline queue, deep linking, infinite scroll, camera, maps, and the Apple rules for non-IAP payments.

the modern mobile stack
Expo SDK 54 React Native 0.81 React 19 TypeScript 5.9 Expo Router 6 NativeWind 4 Reanimated 4 TanStack Query RevenueCat Stripe Hono 4 Drizzle ORM Sentry PostHog EAS Build
02 what's inside

Every system you'd build yourself — already wired up

Pick a system to see what's done. Auth, payments, push, offline, native device APIs, and 27 UI components ship ready to use.

Auth & Accounts

One useAuth() interface, three adapters
Custom JWT ships wired and working. Clerk and Better Auth are adapter slots: install their SDK and uncomment one line in lib/auth.ts, and your screens never change.
Sign in with Apple + Google
Social login verified server-side against Apple/Google JWKS, not just a client-side token.
Refresh-token rotation
Secure access/refresh flow with rotation and expo-secure-store token storage.
Reset password + delete account
Forgot/reset via emailed one-time tokens, plus DELETE /me, required to pass Apple review (5.1.1(v)).
Auth-optional mode
Building a calculator or habit tracker? Set EXPO_PUBLIC_AUTH_ENABLED=false and the sign-in wall and account UI disappear. The (auth) folder is then safe to delete.

Payments: IAP + Stripe

RevenueCat in-app purchases
Subscriptions and one-time IAP wired through react-native-purchases, entitlement-gated end to end.
Stripe web checkout
Non-IAP payments via a small Stripe REST client instead of the full SDK, with HMAC-verified, idempotent webhooks.
<Gated> entitlements
Wrap any screen in <Gated entitlement="pro">. Your code never branches on the payment provider.
Paywall + useEntitlement()
A ready paywall screen and hook that work the same with RevenueCat or Stripe.

Native Device Features

Camera + QR/barcode scanner
expo-camera capture and a scanner screen, both behind clean permission gates.
Maps + location
<Map>/<Marker> and useLocation() with a production key-gate so builds fail loudly, never silently.
Push notifications
Expo push-token registration, tap-to-deep-link, and a backend POST /devices/test to fire one.
Image upload
Pick from library or camera and upload straight to a signed URL, progress included.
Haptics, localization, deep links
expo-haptics, expo-localization, and a typed deep-link scheme all wired in.

Data, Offline & Sync

TanStack Query data layer
Backend-agnostic apiFetch + zod schemas, normalized ApiError, and a sane retry policy.
Offline mutation queue
NetInfo-aware queue that pauses writes offline and replays them on reconnect. Runs on device and simulator; the web target cannot report offline state.
Optimistic updates + infinite lists
Pull-to-refresh, infinite scroll, and optimistic mutations demoed and documented.
Bundled backend or your own
Ship the included Hono + SQLite backend, or point EXPO_PUBLIC_API_URL at your Django, Rails, or Node API.

Observability & Feature Flags

Sentry error tracking
Crash and error reporting with auto-identify on sign-in and source-map upload in CI.
PostHog analytics
A typed TrackedEvent union with 15 starter events, so a renamed event is a compile error instead of a broken funnel.
Feature flags + killswitches
useFlag(), <FlagGate>, and env-var overrides to dark-launch or remotely kill a feature.
No key required to run
Every integration no-ops without its key, so the whole app runs green on a fresh clone.

Built for Claude Code

CLAUDE.md single source of truth
12 KB of conventions, loaded at the start of every session, so Claude Code, Cursor, and Copilot never guess your patterns.
11 per-feature rule files
Scoped rules load the right context for auth, payments, data, native, and more.
4 slash commands
/new-screen, /new-api-call, /new-form, and /add-paywall scaffold a correct feature from one prompt.
37-row intent to recipe map
A "before you code" table routes what you asked for to the exact rule to read first. All 37 targets exist in the repo.

Ship to the Stores

EAS Build + Submit
development / preview / production profiles ready to build and submit to TestFlight and Play Internal.
GitHub Actions CI
Format, typecheck, smoke tests, Jest, and expo-doctor run on every push.
OTA updates
expo-updates + eas-update.yml push JavaScript fixes to installed apps without a store review.
Tag-based releases
git tag v0.1.0 triggers the release workflow, versioned and repeatable.
Dockerized backend
The optional backend ships a multi-stage Dockerfile and compose file for one-command deploy.
03 see it running

Real screens, not mockups

Every screen below is the boilerplate running unmodified. Tap through the tour.

Mobile App Boilerplate home screen on a phone
Internationalization screen switching languages live
Profile and settings screen
Offline handling screen with a queued mutation
Toast notifications demo screen
Notifications screen with local and push controls
In-app purchase demo screen
Image upload screen
Camera permission screen
QR and barcode scanner screen
Searchable, filterable list screen
Onboarding welcome screen
04 why not just…

This template vs. the alternatives

Against rolling your own Expo setup, or starting from a bare create-expo-app project.

Feature This template Build from scratch Generic boilerplate
One useAuth() interface (JWT wired, Clerk / Better Auth adapters)
Social sign-in (Apple + Google), verified server-side
In-app purchases (RevenueCat)
Stripe non-IAP checkout
Push notifications wired
Offline mutation queue
i18n + RTL (en / es / ar)
Sentry + PostHog + feature flags
Optional bundled backend (Hono + SQLite)
EAS build/submit + CI + OTA updates
27 themed UI components (NativeWind)
85 passing tests
CLAUDE.md for AI coding tools
Time to first store submission ~1 week ~2 months ~3 weeks
05 who it's for

You'll get the most out of it if…

Solo builders shipping a mobile app

You want your app in the stores, not another month wiring auth, payments, and push from scratch.

Teams with an existing backend

You already run Django, Rails, or Node. Delete the bundled backend, set one env var, and keep your API.

AI-coder teams (Claude / Cursor / Copilot)

CLAUDE.md and slash commands mean your AI agent scaffolds correct screens, hooks, and forms every time.

No-login app makers

Calculator, habit tracker, offline tool? Turn auth off and ship a no-account app on the same foundation.

pricing

Buy it solo — or bundled and save

Just this boilerplate, or a bundle that unlocks the courses and every other boilerplate too.

Mobile App Boilerplate

React Native and Expo boilerplate built for Claude Code, Cursor and Copilot. Auth, payments, push and offline sync already wired, with a 37-row map telling your agent where each one lives.

  • Mobile App Boilerplate $59
  • Lifetime access to all updates
$59 one-time
Get Mobile App Boilerplate
14-day money-back guarantee
★ Best value
Build With AI 1.0

The course + all 4 boilerplates.

  • Build With AI 1.0Course $149
  • Desktop App Boilerplate $49
  • Python MCP Server Boilerplate $79
  • Mobile App Boilerplate $59
  • Django Web App BoilerplateComing $49
  • Private Discord community $99
  • Lifetime access to all updates
Total value $484
$149 one-time
You save $335 (69%)
Get Build With AI 1.0
14-day money-back guarantee
Bundle
Solo Builder Complete

Every course, boilerplate, and product I build, in one bundle.

  • Build With AI 1.0Course $149
  • Self Hosting 2.0Course $69
  • Business Ideas LibraryComing $49
  • Desktop App Boilerplate $49
  • Python MCP Server Boilerplate $79
  • Mobile App Boilerplate $59
  • Django Web App BoilerplateComing $49
  • Private Discord community $99
  • Lifetime access to all updates
Total value $602
$199 one-time
You save $403 (67%)
Get Solo Builder Complete
14-day money-back guarantee
🔒 Secure checkout · Stripe & PayPal ⚡ Instant GitHub access
questions

Frequently asked questions

What exactly do I get when I buy the Mobile App Boilerplate?

You get an invitation to a private GitHub repository with the full source code: 285 files, 85 passing tests, 27 UI components, an optional backend, 9 guides, and 27 task recipes. Clone it, ship it under your own name to the App Store and Google Play, and get lifetime updates by running git pull when new versions land.

How long does it take to get running?

On a fresh clone: well under a minute of commands, then the app opens on the web target. Timed at 25 seconds from git clone to a migrated database with the package cache warm, plus about 90 seconds for the first browser bundle. The very first install on a new machine pulls the whole dependency tree and takes two to four minutes. From there you sign up in the app and land on the home screen with your own account.

Do I run it in Expo Go, or do I need a dev build?

The JavaScript surface runs in Expo Go for fast iteration, and the whole app also runs in a browser on the web target while you develop. Native modules such as RevenueCat, push notifications, camera, and maps need a dev build, which is one EAS command. The docs walk you through both paths.

Can I use it with my own backend?

Yes, it is backend-agnostic by design. Keep the bundled Hono + SQLite backend, or delete apps/api, point EXPO_PUBLIC_API_URL at your Django, Rails, FastAPI, or Node API, and implement the documented backend contract.

Can I really swap auth providers with one setting?

Custom JWT is wired and working out of the box, against the bundled backend or your own. Clerk and Better Auth are adapter slots rather than finished integrations: you install the provider SDK and uncomment one line in apps/mobile/lib/auth.ts, and your screens keep calling the same useAuth() hook. Budget an hour for that swap, not a rewrite.

In-app purchases or Stripe, which do I use?

Apple and Google require in-app purchase (RevenueCat, included) for digital goods sold inside the app. Stripe is for web checkout, physical goods, or services. Both sit behind one PaymentAdapter, and the full Apple-rules matrix is documented so you stay compliant.

Do I need a Mac?

For iOS you either build locally on macOS or use EAS cloud builds, so no local Mac is required. Android builds run from any OS, and you can preview the whole app in a browser while you develop.

Do I need to know React Native?

You need basic React. The app is React 19 + Expo Router, which uses file-based routing like Next.js, so if you have built a React or Next app you will be productive quickly. You do not need Swift or Kotlin; the boilerplate handles the native modules for you.

What if my app has no login?

Set EXPO_PUBLIC_AUTH_ENABLED=false and the sign-in wall and account UI disappear, leaving the (auth) folder safe to delete. You get a no-account app on the same foundation, with offline, analytics, payments, native APIs, and store tooling all still working.

How are updates delivered, to me and to my users?

To you: you keep GitHub access for the lifetime of the product, so git pull brings new features and fixes. To your users: ship JavaScript changes over the air with expo-updates, and push native changes with eas submit.

Is there a refund policy?

Yes. If the boilerplate does not work for you, email me within 14 days for a full refund. No questions asked.

Can I use this with Claude Code, Cursor, or Copilot?

Yes, it is built for it. CLAUDE.md documents every convention, 11 per-feature rule files load the right context, and four slash commands (/new-screen, /new-api-call, /new-form, /add-paywall) scaffold a correct feature from a single prompt.

Stop reinventing the app shell. Start shipping.

$59 once. Lifetime updates. One commercial app.

Get Mobile App Boilerplate →