I spent 4 months building a Bitcoin wallet solo, live-streaming (on twitch and twitter) the entire build from wireframe to finish to an audience of 3. It’s janky, it works, and I learned more about engineering — and myself — than any tutorial could teach.
This is that story.
⚠️ DISCLAIMER: This wallet is testnet-only and in ALPHA. Do NOT use it with real Bitcoin. It’s a learning project, not production software.
👉 GitHub Link (give it a quick star! :) )
https://youtu.be/YURGi_GPb98 <-- YouTube Video
The Origin Story
I previously founded BitEscrow (a non-custodial Bitcoin escrow service) and worked on it for a very long time. My co founder and I shipped something amazing. But after 3 long, hard, bootstrapped years I learned a really hard lesson: nobody wants to spend their Bitcoin. After that startup wound down, I did what any reasonable person would do — I binged Factorio for 270 hours… in a month.
My friend with a PhD in computer science, who has 5000+ hours in the game, mentored me through Factorio at its deepest level, and I was totally hooked. But while playing, something clicked. The game’s systems thinking, optimization patterns, and relentless focus on efficiency rewired how I approach engineering problems. I realized Factorio is just a gamified version of actual systems engineering, and playing it had genuinely sharpened a skill I didn’t fully appreciate I had. When I emerged from my Factorio haze, I knew I wanted to build something substantial again.
After taking some time off and well rested, I learned mobile development in 2 weeks and started building a Bitcoin wallet from absolute scratch as an MVP for a bigger project.
Why Build Another Bitcoin Wallet?
Short answer: I’m pivoting to infrastructure again, and this wallet was my technical deep dive before the jump.
Long answer: I originally planned this as an MVP for a product idea. Build wallet → grow waitlist → pitch investors. Classic playbook. But four months of solo development changed my perspective.
As the weeks turned to months, I realized:
- My idea was too niche (BitEscrow 2.0 mistake territory)
- True market demand wasn’t there
- I missed building infrastructure more than consumer products
- Infra makes way more money when done correctly
Most importantly, a friend helped me re-frame my thinking of said idea entirely when I was at Bitcoin Las Vegas. By month three, I knew this wallet would be my graduation project — not my destination.
The Journey of Building it Alone
I set a hard deadline: 4 months from first commit. Full kanban board. Ship or die. Two months in, I almost quit. The kanban overflowed with features, nothing worked properly, and those early dopamine hits from small wins had evaporated. I seriously considered writing a post-mortem about my failed wallet instead. Then something snapped — in a good way. I realized perfection was optional. Momentum wasn’t.
The Art of Saying No
Feature creep nearly killed this project. My kanban had everything: Bitcoin price screens, USD/sats converters, beautiful animations. All nice-to-haves that blocked real progress. Take the Bitcoin price feature I had planned — I kept hitting CoinGecko’s rate limits, so I engineered this elaborate solution: multiple API fallbacks, which led to orchestrated price averaging, centralized state management. Then I had an epiphany — just delete the entire feature.
Removing USD conversion eliminated complexity across the entire codebase:
- No conversion logic in SendAmountScreen.tsx, SendConfirmScreen, InvoiceScreen.tsx, ReceiveScreen.tsx
- No storing historical Bitcoin prices for transaction details
- Simpler state management overall
I systematically blocked everything non-essential:
- UI smoke tests (I tested edge cases manually anyway)
- Branding and fancy animations
- Custom fonts and icons
- Component refactoring and modularization
- Security hardening beyond basics
- CI/CD pipelines
- Refactors of certain files in Go
- App Store readiness
- Polished error handling
- Full test coverage
One feature I desperately wanted: Jibberlink for air-gapped transaction signing. Would’ve been cool. Would’ve taken too long. Cut.
The Core Truth
Here’s what actually matters in a Bitcoin wallet: sending and receiving. That’s it. When I finally built a transaction that passed all UTXO validation, saw that success screen, and watched it confirm on the mempool — that dopamine rush was unreal. I built that. From scratch. Just raw transaction construction.
Systems Thinking and AI Partnership
Somewhere around month three, my brain shifted. I stopped thinking in code and started thinking in systems. I’d lie in bed visualizing the wallet’s architecture — not files and functions, but flows and rules. The wallet transformed from “stuff that works” to “a thing with internal logic.”AI became less of a tool and more like a temporary co-founder. I wasn’t just writing prompts — I was thinking in prompts. Prompting is just software architecture in disguise — and thanks to Factorio, that’s a skill I had sharpened. I’d architect the flows, and Claude/Cursor would handle the implementation. It wasn’t perfect, but it gave me a second wind when energy faded. I got really good at prompting.
The Final Push
The last week was pure triage. Days blurred together: debugging one minute, rewriting UI the next, then losing hours to obscure Expo polyfills. Context-switching became my primary skill. I kept wanting to refactor. Reorganize files. Create neat folder structures. But that was procrastination dressed as progress. I had to wear all the hats and feel the weight of each one. When I finally committed that last bugfix and watched my transaction go through — signed, broadcasted, confirmed — I let it stay ugly. Because ugly is honest, and shipping is beautiful.
The Tech Stack & Architecture
I researched extensively, using Blue Wallet as inspiration. Every library choice had a purpose:
Core Libraries:
- BitcoinJS-lib v6.1.7 — The Bitcoin Swiss Army knife
- React Native + Expo — Cross-platform mobile development
- TypeScript — Because Vanilla JavaScript sucks
- Zustand v5.0.4 — State management that is actually good
Bitcoin Standards:
- BIP-32 — HD wallets (hierarchical deterministic)
- BIP-39 — Mnemonic seed phrases
- @scure/bip39 & secp256k1 — Additional cryptographic operations
APIs & Infrastructure:
- Mempool API (primary) with Esplora fallback
- Axios with custom rate limiting
- Zod for schema validation
- MMKV for fast key-value storage
- React Query for data fetching
Key Features Built:
- Full send/receive with dedicated hooks (
useSendBitcoin
,useReceiveHandlers
) - Transaction history with complete validation pipeline
- Multi-network support (testnet, mainnet, regtest)
- HD wallet generation and import
- QR code scanning
- Mempool.space integration
The Lessons
No tutorial, course, textbook, or bootcamp could’ve taught me what this build did. Four months of solo development beats four years of theory. Using “Programming Bitcoin” as my bible, I came to appreciate Bitcoin as the marvel of engineering it truly is. The wallet works. It’s not pretty. But I shipped it, and that’s what matters.
What I Learned (Technical)
- Building a wallet solo is really hard. Don’t do it unless you’re prepared for pain. Do it if you want to level up fast.
- Key generation, signing, and address derivation will humble you quickly
- UTXO handling is where theory meets reality (and usually loses)
- BitcoinJS is powerful but raw. With a team, I’d use BDK + LDK instead.
- State management in financial apps needs paranoid-level attention
- “Securely storing private keys” is harder than yelling “not your keys, not your coins” on Twitter
- Xcode remains the worst development experience in modern computing
- AI pair programming is the future — it makes good devs better, and bad devs worse.
- How to run, use, and interface with Bitcoin Core — and why it’s still the gold standard for full nodes.
- Segwit is actually brilliant once you implement it yourself
What I Learned (Personal)
After 4 months of solo development, streaming to empty rooms, and wrestling with cryptographic primitives:
- Perfection is the enemy of momentum. Ship ugly.
- Execution is the ultimate filter. Ideas are easy, 4-month commitments aren’t.
- You can do hard things alone. But you probably shouldn’t.
- Persistence beats everything else.
The deepest lesson? I’m an infrastructure engineer at heart. Those months of micro-adjusting UI pixels confirmed what I already knew — I belong in the backend, architecting systems, not pixels for a UI.
What’s Next?
This wallet works. It’s ugly, under-tested, and desperately needs refactoring. Could I perfect it? Yes 100%. Will I? No.
I have bigger projects calling my name. This wallet served its purpose: deepening my Bitcoin knowledge, sharpening my engineering skills, and clarifying what I actually want to build.
If nothing else, I hope this helps one person understand how Bitcoin wallets actually work under the hood. The architecture is clean, the code is organized, and it’s all there for you to explore, break, and learn from.