AI Onboarding by Default
Wire AI generative onboarding ships on by default, with a guaranteed static fallback and a free-key upgrade path
AI Onboarding by Default
The boilerplate ships Wire AI dynamic onboarding on by default. Instead of a hard-coded questionnaire, your onboarding screen can ask AI-generated, personalized questions, and it degrades gracefully to the same static flow the boilerplate has always shipped when no key is configured.
The @wireai/activation kit is already installed and wired into src/features/onboarding. A fresh clone runs the static flow with zero setup. Add a Wire AI key to upgrade the exact same screen to AI onboarding, with no code changes.
How it works
The onboarding entry point (WireOnboardingScreen) has two modes and picks between them at runtime:
- AI mode: when a Wire AI key is present, it renders
WireOnboardingfrom the kit, which streams AI-generated question cards from your Wire AI tenant. - Static mode: when no key is set,
isOnboardingEnabled()returnsfalseand the original static questionnaire renders unchanged.
The AI flow also passes the static screen as its fallbackFlow, so a backend or generation error degrades to the static flow instead of breaking onboarding. You never end up with a broken first-run experience.
Fresh clone (no key) → static questionnaire (works out of the box)
+ Wire AI key → AI-generated onboarding
Wire AI error at runtime → fallbackFlow → static questionnaireThe upgrade path
Clone and run: static onboarding, no setup
Straight after cloning, EXPO_PUBLIC_WIREAI_API_KEY is unset, so the app runs the static onboarding flow. Nothing to configure.
Claim a founder slot and grab your key
Claim a founder slot at getwireai.com to set up your tenant. Then open your app in the dashboard, go to the Set Up tab, and copy its key. That key and an app id are all the boilerplate needs.
Your key lives in the dashboard Set Up tab. Read it from your environment and never commit it.
Add the env vars
Copy the Wire AI values into your .env (they're already scaffolded, commented out, in .env.example):
# AI Onboarding (Wire AI), ON by default once a key is present
EXPO_PUBLIC_WIREAI_API_KEY=your-wire-ai-tenant-key
EXPO_PUBLIC_WIREAI_APP_ID=your-app-idRestart the dev server. The same onboarding screen now renders AI-generated questions.
The static fallback
The static questionnaire is not a placeholder. It's a real, shippable onboarding flow that the kit reuses as its safety net. This means:
- No key → static flow renders directly.
- Key present, but a request fails → the kit's
fallbackFlowrenders the same static flow.
So AI onboarding is strictly additive. Turning it on can only ever improve the experience; it can never leave a buyer with a broken onboarding.
Storage adapter
The kit persists only its own session-correlation id (never the user's answers) so that an app kill mid-onboarding resumes the same backend session instead of minting a new one, which keeps the analytics funnel honest.
The boilerplate satisfies the kit's WireOnboardingStorage contract (getItem / setItem / removeItem) with a small, dedicated MMKV instance, kept separate from the redux-persist store:
const mmkv = createMMKV({ id: "wire-onboarding-storage" });
export const wireOnboardingStorage: WireOnboardingStorage = {
getItem: (key) => Promise.resolve(mmkv.getString(key) ?? null),
setItem: (key, value) => { mmkv.set(key, value); return Promise.resolve(); },
removeItem: (key) => { mmkv.remove(key); return Promise.resolve(); },
};Analytics
Onboarding events are forwarded to the boilerplate's analytics layer, so the AI and static flows report into the same funnel:
ONB_COMPLETE: onboarding completed.ONB_ABANDONED: onboarding skipped.wire_onboarding_event: per-step events from the kit (event.type), logged for funnel analysis.
Where the code lives
| Concern | Location |
|---|---|
| Entry point | src/features/onboarding/screens/wire-onboarding-screen.tsx |
| Static fallback | src/features/onboarding/screens/onboarding-screen.tsx |
| Storage adapter | src/features/onboarding/services/wire-onboarding-storage.ts |
| Env template | .env.example |
Reading your onboarding data back
Once AI onboarding is live, your Wire AI tenant collects insights you can pull straight into your AI assistant as markdown. See Claude Skills and MCP Integration for the hosted Wire AI MCP server, the insights.md download path, and how to query it.