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