I wanted a Lightning wallet that was actually mine
This one has been sitting in the drawer for a while, so let me pull it out. In the summer of 2025 I built my own Bitcoin Lightning wallet. Not a fork, not a skin on someone else's app. A real wallet, for iOS, Android and the web, written solo, in one summer, with Cursor.
The reason is the same reason I run my own Bitcoin node and self-host basically everything I touch: I do not love handing my money to a custodian and hoping they behave. Most of the slick Lightning wallets you can install in thirty seconds are custodial. Your sats live on their server, your keys are their problem, and the day they decide to freeze, delist or shut down, you find out exactly how much of it was ever really yours. I did not want that trade. So I built the alternative.
What it actually is
It is a non-custodial Lightning Network wallet built on top of LNbits. It connects to your own (or any configurable) LNbits instance, and the keys live locally on the device. Nothing is shipped off to some backend I control. If you point it at your own LNbits, the whole stack is yours end to end, which is exactly the part I cared about.
Feature wise it does what a daily driver needs to do:
- Send and receive over
BOLT11invoices andLNURL - QR scanning, because nobody wants to retype an invoice
- Real-time balance shown in sats, BTC, USD and CZK
- Full payment history
- A two-step, confirm-before-send flow, so you do not fat-finger a payment
- A dark design with orange accents, because it is Bitcoin and I have taste
None of this is revolutionary on its own. Plenty of wallets do invoices and QR codes. The point was never to reinvent Lightning. The point was that this one is mine, the keys never leave the device, and I understand every layer underneath it.
Three native apps, one person, one summer
Here is the part I am quietly proud of. This was not one codebase pretending to be cross-platform. It is three real, native builds:
- An iOS app in
SwiftUI, targeting iOS 15 and up - An Android app in
Jetpack Compose, with Material 3 and a proper MVVM structure - A marketing website in
Next.js 14with Tailwind and Framer Motion, bilingual in English and Czech
I am not going to pretend I hand-wrote every line of Swift and Kotlin from muscle memory. I did not. That was the whole experiment. I wanted to know, honestly, whether one person with Cursor could ship genuinely native iOS and Android and a web front end in a single summer, without faking it through a webview wrapper. The answer turned out to be yes, with a lot of asterisks.
The honest part about vibecoding it
Vibecoding three platforms is not a magic button. The AI is fast at the parts that are boring and well documented: layout, list views, wiring a QR scanner, formatting a balance four different ways. It is much weaker the moment you touch something with real consequences, and a wallet is nothing but real consequences. Key handling, the confirm-before-send flow, making sure an LNURL response is what it claims to be, making sure a failed payment fails loudly instead of silently. That part is on you. You cannot vibe your way through money and walk away.
So my actual job shifted. Less typing, more reviewing. I read every line that came near a key or a balance. I treated the AI like a very fast junior who is confidently wrong about security maybe ten percent of the time, which is exactly the ten percent that matters in a wallet. Used that way, Cursor was an enormous multiplier. Used carelessly, it would have happily shipped me a footgun.
Why I keep mentioning sovereignty
This ties straight back to the thing I keep banging on about: run your own node, hold your own keys, own your own stack. A Lightning wallet is the most personal point in that whole chain, because it is the thing in your pocket that actually spends. If that part is custodial, the node and the self-hosting and the privacy posture are half a gesture. Building my own closed the loop. My node, my LNbits, my keys, my app, my code.
Is it for everyone? No.
Let me be straight, because I would rather under-promise. This is a personal, self-custody tool. It assumes you are the kind of person who is comfortable running or pointing at an LNbits instance and who understands that with non-custodial, there is no support desk that can recover your funds if you lose your keys. That is the deal with self-custody, and it is the deal on purpose. If that sentence scared you, a custodial wallet is genuinely the more honest recommendation for you, and that is fine.
But if you are like me, if "not your keys, not your coins" is not a slogan but a design requirement, then building the thing yourself is deeply satisfying. You can see the wallet running on the live site. The repositories are private for now, so I am not going to link code, but the apps are real and they are what I actually use.
One summer, one person, three native platforms, and a wallet where the keys finally belong to me. That is the kind of project that reminds me why I do this.