Onboarding Flow

Introduction

📄 Developer handover & environment setup

Quick-start instructions, environment variables, DEV_MODE flags, and full design rationale are documented in this handover.

�� Sprint Goals

The sections below walk through each Key Feature & User Story (1.1 – 4.1). For every story you 0ll find:

Assumption: Backend task V2-36 – Backend Enhancements for User State is live, providing a user-state model (wallet address, Fiat24 KYC status) and JWT-secured endpoints. The frontend relies on this to decide which onboarding stage to display and to gate features such as IBAN availability.
User story 3.1: As a developer, I need to track TON wallet and Fiat24 KYC status in the backend.

📌 Jira / Confluence Tasks

📋 Sprint 2 – Dependencies, Assumptions & QA Criteria (click to expand)

Dependencies & Assumptions

  • Fiat24 provides working WebView link and return-event system
  • Backend authentication with Telegram initData already implemented
  • Optional: use Telegram Passport pre-fill if user has enabled it

🐞 QA Acceptance Criteria

  • Wallet connects in-app, shows correct address
  • Fiat24 KYC WebView loads, completes, updates status
  • User state persists across sessions
  • Unverified users cannot access IBAN/card features
  • All flows remain inside Telegram Mini-App

🎯 Sprint Goals

  1. Users can link their TON wallet via TON Connect, fully embedded in the Telegram Mini-App
  2. Users can initiate the Fiat24 KYC process via WebView without leaving the app
  3. Backend tracks wallet address, KYC status, and user session securely
  4. Progressive onboarding logic: show/hide features based on KYC completion

Source: Jira/Confluence – Sprint 3 User Stories & Tasks

Welcome Screens (First Login)

Updated onboarding carousel that leads with value and addresses user feedback. Key insight from testing: Users need to understand why Paid24/7 is different from PayPal or Revolut before they invest time in setup.

Loading

App Preloader

Initial loading screen users see while the app prepares their personalised onboarding experience.

  • Shows just the Paid24 / 7 logo instantly.
  • After 600 ms: a Chakra <Spinner/> fades in.
  • After 5 s: marketing headline, sub-headline, body copy and “Still loading?” + Retry button appear below the logo.
  • Timers auto-clear on unmount, so the screen vanishes the moment the app finishes loading (often within 1–2 s).

Welcome 1

Brand promise first

Copy revamped based on user testing:

  • Hero headline — “Pay & Get Paid, 24 / 7” echoes the product name and resonates as a clear promise.
  • Sub-headline — “Instant payments • Free IBAN • Free debit card” delivers the top benefits in one quick-scan line.
  • Body copy — “Send or request money worldwide in seconds—almost no fees. Your funds stay in your own Swiss-regulated account.” Keeps the Swiss-regulated trust anchor while explaining fees in plain English.
  • Primary CTA — “Create account” remains large and full-width to drive conversion.
  • Secondary CTAs — “Login · What can I do with Paid24 / 7?” retained for returning users and curious visitors.

📌 Jira Tasks

(planned with reference to the architecture outlined at this overview)

Routing contract (to be implemented)

GET /session?initData=<tgWebAppData>
 ↳ { stage: "welcome" | "country" | "kyc" | "wallet" | "home",
      jwt:   "<short-lived token>" }

Backend

  • verifies Telegram signature
  • upserts user record keyed by telegram_id
  • inspects flags (hasCountry, hasKYC, hasWallet) → returns stage

Frontend

  • stores jwtauth.setToken()
  • router.replace('/' + stage)

(Until this endpoint exists, the CTA uses a stub that always returns {stage:"welcome"}.)

Edge cases

ScenarioHandling
First-time userAPI returns stage:"welcome" → user stays on hero → "Create Account" leads to /country.
Returning, onboarding incompleteAPI returns stage:"country", kyc, or wallet → hero never shown.
Fully onboardedAPI returns stage:"home" → direct to dashboard.
No tgWebAppData (opened outside Telegram)Show blocking toast "Open Paid24/7 from inside Telegram"; hide CTAs.
JWT fail / 401Soft-logout to hero, toast "Session expired. Tap again."

What Can I Do? Screens (Secondary Flow)

These screens appear when a user taps the "What can I do?" button on the welcome screen. They provide a quick tour of key capabilities before account creation.

What Can I Do 2

Request & Send Money

Demonstrates the core payment functionality with emphasis on our key differentiator.

Critical feature: Recipients don't need the app or account—something users didn't initially realize but loved once they understood.

What Can I Do 3

Swiss Banking Integration

Showcases the traditional banking features alongside crypto capabilities.

Trust signal: Swiss IBAN reassures users about regulatory compliance and security.

What Can I Do 4

Virtual Card & Apple Pay

Highlights instant spending capabilities and familiar payment methods.

User expectation: Instant, frictionless payments comparable to existing solutions they know.

Country Selection (Regulatory Compliance)

Mandatory step that determines available features based on regulatory constraints. This addresses the global nature of our user base while managing compliance requirements.

Country Selection

Regulatory-Driven Feature Gating

Captures country of residence to tailor available features. Users from supported countries access full CHF/EUR/USD accounts with KYC and virtual cards. Unsupported countries get crypto-only features via TON wallet.

Why this matters: Fiat24's compliance requirements determine which financial services we can offer in each jurisdiction.

How to test:

Testing Instructions:

  • Select a Euro-zone FIAT24 country → the flow will create a EUR account.
  • Select Switzerland → you’ll get a CHF account.
  • Select any other FIAT24-approved country → you’ll see a USD account.
  • Select a non-FIAT24 country → you’ll bypass KYC altogether and go straight to the TON-wallet-only screen.

📌 Jira Tasks

Account Created (Post-Registration)

Screens that appear after successful account creation, guiding users toward identity verification. User feedback: "Verify Identity" was too vague—users didn't understand what it meant or why it was needed.

Welcome – please complete KYC

Value-First KYC Introduction

Leads with immediate benefits (personal IBAN & free Mastercard) before explaining the verification requirement. Uses plain English and sets clear time expectations.

User research insight: Higher conversion when payoff is front-loaded and jargon is removed. The 5-minute promise reduces anxiety about the process.

UX detail: Both "Balances" and "Card" tabs route to verification, preventing dead-end navigation while the account is locked.

📌 Jira Tasks

KYC Missing

Preview each possible Fiat24 KYC status returned by the API and how the app informs the user.
API reference ↗

KYC Status

There is one other API status COMPLETED. In this case, users are automatically routed to the next step: Activate Debit Card →

TON Wallet Connect Only

Crypto-Only Path

Appears for users in countries not supported by Fiat24. Shows only USDT functionality via TON wallet connection—no fiat account features.

Design decision: Removing unavailable options keeps UX clear rather than showing disabled features.

Crypto-Only but eligible for fiat24

Eligible users see fiat features locked

For users whose country is unsupported by Fiat24 but later change to a supported jurisdiction. Only crypto wallet features are visible until they complete Fiat24 KYC.

Identity Verification (KYC Process)

The actual verification process powered by Fiat24. User feedback: "What is the value of verify, why do I do this?" This flow now clearly explains the purpose and requirements upfront.

KYC intro (V2-30)

Clear Verification Requirements

User story 2.1: As a user, I want to complete KYC for Fiat24 directly in the Mini-App without any friction.

  • Plain language – title reads “Let’s confirm your identity”, which testers preferred over jargon like “KYC/AML”.
  • Benefit first – the intro sentence promises the payoff (CHF account, IBAN, free Mastercard) before mentioning effort.
  • Time reassurance – the ≈ 5-minute estimate is visible straight away to curb anxiety.
  • Partner trust signal – Fiat24 is named to explain who runs the check and why.
  • Three-item checklist – reminds users of location, phone camera, and biometric passport/ID (the critical item is visually highlighted in the UI).
  • Single CTA – one high-contrast button keeps the path clear (“Start ID Check with Fiat24”).

Design Principles:

  • Plain language – title reads “Let’s confirm your identity”, which testers preferred over jargon like “KYC/AML”.
  • Benefit first – the intro sentence promises the payoff (CHF account, IBAN, free Mastercard) before mentioning effort.
  • Time reassurance – the ≈ 5-minute estimate is visible straight away to curb anxiety.
  • Partner trust signal – Fiat24 is named to explain who runs the check and why.
  • Three-item checklist – reminds users of location, phone camera, and biometric passport/ID (the critical item is visually highlighted in the UI).
  • Single CTA – one high-contrast button keeps the path clear (“Start ID Check with Fiat24”).

Interactive Checklist Rationale:

Splitting prep across multiple pages felt like needless friction, yet a static list was too easy to skim. Tiny inline toggles create a one-tap “readiness gate”: users must actively confirm each requirement, so they pay attention without hitting extra “Next” screens. The primary button stays disabled until all items are ticked; if they tap early we nudge them by highlighting unticked rows. It’s faster for users, reduces drop-offs, and gives analytics on which prerequisite blocks people most.

📌 Jira Tasks

KYC intro – turn on location services

Prompt to enable location

Shows how the screen appears when location sharing hasn't been granted yet. Users must tap the checkbox to allow location, triggering the permission modal if denied.

KYC intro – existing Fiat24 account

Legacy account import

Existing Fiat24 users can securely migrate their account by importing their private key, address & optional token in one step — no need to repeat identity verification. Click “Already have a Fiat24 account?” to view the guidance and input screen.

Let’s confirm your identity

Standard checklist shown

A standalone demo of the primary “Let’s confirm your identity” screen, useful for video walkthroughs and usability testing.

Progressive Onboarding Flow (V2-41)

The core user journey from account overview through card activation. Each step builds on the previous, guiding users toward full feature unlock while demonstrating our multi-currency capabilities.

User story 4.1: As a user, I want to unlock new features step by step, reducing friction.

📌 Jira Tasks

Account > KYC > Activate Card

Default Home State

The starting point for new users—no currency selected yet. First step in the progressive journey from overview to full activation.

Multi-Currency Home (Complete)

Replaced single-currency CHF view with dual currency cards. Tap to switch between USDT and CHF—all buttons, balances, and feeds update instantly.

User need: Both traditional (CHF) and crypto (USDT) accounts in one app, addressing the growing demand for hybrid financial services.

Top Up and Activate Card

Card Activation Process

Drawer explaining the 10 CHF minimum to unlock the virtual Mastercard. Auto-opens for demonstration purposes.

User expectation: Clear requirements and instant activation once threshold is met.

I’ve sent at least 10 CHF

Transfer Confirmation State

Shows updated messaging after user confirms they've sent the minimum deposit. Card displays "Transfer on the way..." status.

UX principle: Keep users informed about process status to reduce anxiety during waiting periods.

Money arrived

Card Activation Success

Final state when deposit has arrived and card is ready for use. Shows celebration messaging and clear next steps.

User goal achieved: Clear success state with immediate call-to-action to start using the card.

Card Activated

Fully Activated Account

Normal home view post-activation. All onboarding prompts removed, showing active account with IBAN, transaction feed, and standard actions.

User experience: Clean, uncluttered interface focused on daily usage rather than setup tasks.

TON Wallet (Crypto Integration)

Non-custodial crypto wallet integration for USDT management. User feedback: Crypto veterans appreciated the non-custodial approach, while novices needed plain language explanations.

TON Wallet Connection (V2-22)

Wallet Connection Process

User story 1.1: As a user, I want to link my TON wallet so I can interact with crypto features.

Bottom drawer flow for connecting external TON wallets. Simulates 80% success rate to demonstrate both success and error states.

Non-custodial advantage: Users maintain control of their crypto—Paid24/7 never holds private keys.

⚠️ Known issue: Connect button sometimes requires two clicks (logged for fix).

📌 Jira Tasks

USDT Account Details

Connected Wallet Interface

User story 1.1 (cont.): Once my wallet is linked, I want to see my address and manage USDT easily.

Post-connection home screen showing USDT mode with wallet address row. "Details ⬆" button opens drawer with address, QR code, and future MoonPay integration.

User need: Easy access to wallet information for external transfers and receiving payments.

📌 Jira Tasks

Send & Receive USDT

USDT Transaction Flows

Demonstrates send and receive functionality via bottom action buttons. Includes address validation, blockchain simulation, and sharing options.

User expectation: Familiar payment patterns (like CHF flows) applied to crypto transactions for consistency.

Help & Privacy Features

Accessibility and privacy controls addressing user concerns about support access and public usage. User feedback: Need for quick help access and privacy when showing the app to others.

Help & Privacy Features

Support & Privacy Controls

❓ icon opens Help drawer for immediate support access. 👁 icon toggles balance visibility (blur effect) across the entire app. Balance amount itself is also tappable for quick privacy.

Privacy use case: Essential for users demonstrating the app to others or using it in public spaces.

Support access: Immediate help without leaving current screen or interrupting user flow.