Module 9: Designing a Bitcoin Wallet for Real Users
9.1 Introduction
Building a Bitcoin wallet isn't just about cryptography or clean architecture. At the product level, you must translate Bitcoin’s real constraints into an experience normal people can actually survive without losing their money.
Bitcoin is powerful, but unforgiving. Users are human: they forget passwords, ignore warnings, fall for scams. Wallet product design must balance safety, usability, education, and empowerment.
This module will cover how to design:
Onboarding flows
Backup flows
Receiving flows
Sending flows
Fee handling
Transaction tracking
Privacy protections
Recovery processes
If you design Bitcoin UX naively, you will lose users. If you design it wisely, you will create true Bitcoin citizens.
9.2 First Principles for Wallet UX
principle | meaning |
|---|---|
Protect the user from themselves without lying to them | Make safety easy but real — don’t create illusions of reversibility. |
Teach at critical moments | Onboard users into Bitcoin concepts when they need to understand, not before or after. |
Minimize irreversible errors | Make backup mandatory, validate addresses, confirm send actions clearly. |
Default to privacy, not exposure | Rotate addresses, warn against address reuse. |
Make security invisible when possible, visible when necessary | Use biometrics quietly but celebrate backup achievements. |
9.3 Designing Onboarding
The first user experience is critical. At onboarding, users must:
Generate a seed phrase.
Understand its critical importance.
Backup securely before they can receive Bitcoin.
Do not allow receiving Bitcoin until backup is complete.
Good flow:
Welcome → Explain Bitcoin wallet basics
Generate Seed → Show 12 or 24 words
Backup Flow → User must record the seed
Seed Verification → User must re-enter certain words to continue
Wallet Ready → Only now allow address generation
Onboarding is your single chance to teach users they control their Bitcoin, not your app.
Use human, powerful language: "This is not a password. This is the key to your Bitcoin vault. Lose it, and your Bitcoin is gone forever. Protect it like you protect your life savings."
9.4 Designing Backup Flows
Backup must be serious, unavoidable, and verifiable.
Backup education must explain:
The seed phrase is not recoverable by your company.
The seed phrase must never be shared with anyone.
The seed phrase must be written down or secured somewhere offline.
Seed verification examples:
Pick 3 random words and ask the user to select the correct ones.
Ask for specific word positions (e.g., "Enter word 5").
Optional Advanced: Allow optional encrypted cloud backups only if encryption happens client-side with user’s passphrase.
9.5 Designing Receiving Flows
When a user wants to receive Bitcoin:
Display a new Bitcoin address (QR code + text).
Rotate address after it is used for a transaction.
Label the address internally if needed (e.g., "Savings," "Payment from Amina").
Notify user upon receipt of incoming transaction.
Never encourage address reuse — it damages privacy permanently.
Display friendly language: "Share this address to receive Bitcoin. For your privacy, a new address will be automatically generated after you receive a payment."
9.6 Designing Sending Flows
When a user wants to send Bitcoin:
Show clear fields: amount, destination address, optional label.
Validate destination address format immediately (catch typos).
Allow users to set the fee: Fast, Normal, Economy.
Display estimated confirmation time based on fee level.
Confirm sending action clearly.
Send confirmation screen example:
Protect users from accidental mistakes:
Warn if users try to send with extremely low fees.
Double-check if sending large amounts.
9.7 Handling Fees
Because Bitcoin’s fee market fluctuates:
Always fetch dynamic fee estimates.
Offer simple options:
Fast (next block)
Normal (1–3 blocks)
Economy (3+ blocks)
Show total cost clearly:
Help users understand why fees vary without overwhelming them with technical details.
9.8 Handling Transaction Confirmations
After sending Bitcoin:
Show pending transactions immediately.
Update status dynamically:
Pending (0 confirmations)
Confirming (1–5 confirmations)
Finalized (6+ confirmations)
Notify user when confirmations progress.
Example language: "Transaction broadcasted. Waiting for network confirmation. This may take 10–60 minutes depending on network congestion."
If a transaction gets stuck or dropped:
Offer "Speed up" (RBF fee bumping) if supported.
Warn clearly if stuck beyond reasonable times.
9.9 Privacy Protection Defaults
Wallets should automatically:
Rotate addresses after every incoming payment.
Avoid showing user’s full balance publicly if not necessary.
Avoid linking multiple transactions together unless explicitly grouped by the user.
Encourage use of SegWit and Taproot addresses (better privacy + lower fees).
You can expose advanced privacy settings later — but good privacy must be the default, not a "pro" feature.
9.10 Designing Recovery Flows
When users reinstall or change devices:
Offer clear "Recover Wallet" option.
Require full seed phrase entry.
Guide user gently through recovery.
Recovery flow steps:
Welcome → "Recover existing Bitcoin wallet"
Enter Seed Phrase
Derive Wallet Keys
Scan Blockchain or Register Addresses
Show Wallet Dashboard
If seed phrase is incorrect, error clearly and respectfully — never fake partial recovery. "We could not match this seed phrase to a valid Bitcoin wallet. Please double-check each word carefully."
9.11 Example End-to-End User Journey
Scenario: Kojo in Accra installs a Bitcoin wallet.
Kojo downloads the app.
Kojo generates a 12-word seed phrase.
Kojo backs up his seed, verifies 3 random words.
Kojo receives 0.1 BTC from a friend using a fresh SegWit address.
Kojo sees 0.1 BTC balance after 3 confirmations.
Kojo sends 0.05 BTC to his cousin Amina.
Wallet offers fee options — Kojo chooses "Fast" (~10 minutes).
Transaction is broadcasted and confirmed.
Kojo installs app on a new phone six months later.
Kojo recovers wallet using his seed phrase, regains access to his Bitcoin.
Every step protects Kojo’s autonomy, privacy, and security without unnecessary friction.
9.12 Summary of Module 9
Real Bitcoin wallet UX must:
Force and verify backup at onboarding.
Rotate addresses automatically.
Explain sending and fees clearly and responsibly.
Show transaction status accurately.
Protect user privacy by default.
Handle stuck transactions intelligently.
Offer clean, trustworthy recovery flows.
Bitcoin wallets succeed when users feel powerful but safe — because good design made serious security feel natural.
Module 9 Complete
You now understand how to design a Bitcoin wallet product that real users can survive, trust, and grow with — without sacrificing Bitcoin’s serious security and privacy foundations.