Skip to main content
Mobile Launcher
AI Onboarding

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 WireOnboarding from the kit, which streams AI-generated question cards from your Wire AI tenant.
  • Static mode: when no key is set, isOnboardingEnabled() returns false and 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.

Text
Fresh clone (no key)        →  static questionnaire  (works out of the box)
+ Wire AI key               →  AI-generated onboarding
Wire AI error at runtime    →  fallbackFlow → static questionnaire

The 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-id

Restart 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 fallbackFlow renders 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:

Ts
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

ConcernLocation
Entry pointsrc/features/onboarding/screens/wire-onboarding-screen.tsx
Static fallbacksrc/features/onboarding/screens/onboarding-screen.tsx
Storage adaptersrc/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.

Additional Resources