Optimize your onboarding flow to increase user engagement and retention. This guide outlines the best practices that will keep your users in-app and engaged.

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

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)
Read more in Authentication.

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
  • 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
Learn how to implement them with SDK actions.

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

Further reading