Overview
Deliver value instantly and avoid blocking actions.- Make the first interaction instant and non-blocking
- Authenticate only when required for security purposes and defer prompts until necessary
- Prefer the built-in Base Account; only offer connect/switch for alternate wallets, never gating
- Use progressive disclosure tied to intent (buy, post, personalize)
- Keep users in-app with SDK actions for links; avoid fragile static urls
Recommended onboarding flow
1
First render
- Show immediate value (demo content, sample state, or read-only mode)
- Personalize instantly with
context
of the user’s profile to instantly personalize - Display one clear CTA that leads to a meaningful action (e.g. “Post a message”, “Buy a token”, “Follow a user”)
2
User initiates a protected action
- Trigger Sign In with Farcaster (SIWF) / Quick Auth only when needed per Authentication
- For onchain actions, use the Base Account automatically. Eliminate explicit wallet connect flows
- Alternate wallets: offer a non-blocking connect/switch option without gating exploration
3
Celebrate and amplify
- After success, prompt social actions via SDK actions and Sharing & Social Graph
- Offer next step: save, follow, or share — optimize with Search & Discovery
UX patterns that work
- Progressive prompts: ask only when needed (buy, post, personalize)
- Clear copy: explain why you’re asking (“Sign in to save your score”)
- One-time deep link (Connect Account users): if SIWF requires a one-time Farcaster link to register auth address, message it as a quick, one-time setup and return the user seamlessly
- Friendly fallbacks: if auth is skipped or fails, allow continued browsing in read-only mode
Authentication and wallet guidance
Authentication
- Only when your backend needs a verified user
- Use SIWF/Quick Auth to issue a session (JWT) when required
Do not treat Mini App context as primary auth (it can be spoofed)
Wallets
- Base App provides an in-app Base Account. This should be the default wallet used by your app to streamline interactions.
- Do not show a connect button on first load
- If you support other wallets, show connect/switch as optional and non-blocking
- Use the OnchainKit Wallet component or Wagmi hooks as needed
Do not use raw deeplinks
- Always use official SDK actions for cross-client compatibility (e.g., compose cast, view profile)
- This prevents dead ends and ensures consistent behavior across hosts
Measure activation and iterate
- Define activation as the first successful protected action (e.g., first post, first onchain action)
- Track funnel: first render → intent click → auth/wallet prompt → success → share/save
- Break down Create Account vs Connect Account behavior to spot friction
- See: Base Build Analytics (coming soon)
Implementation checklist
- Landing screen is usable without auth or wallet prompts
- Trigger SIWF/Quick Auth only when backend needs it
- Use MiniKit context for analytics only; avoid using it as primary auth
- Use Base Account seamlessly for onchain actions; no upfront connect flow
- If supporting alternate wallets, provide optional, non-blocking connect/switch
- Use SDK actions for social flows (compose/view) instead of deeplinks
- Provide a post-success share step and clear next action
- Test both Create Account and Connect Account paths