Today I’m excited to share a new project that I’ve been working on. A Bitcoin wallet made specifically for freelancers and digital nomads.
Here’s the TL;DR:
🌎 Get paid in Bitcoin, anywhere
🤑 Low fees: 0,25% + 40 sats to receive
⚡️ Built on Lightning & Liquid
🧡 Your keys, your coins
🧾 1st class Invoicing & Accounting
What Problem does StashPay solve?
After running my coaching business almost entirely in bitcoin for the last two years, I’ve learned a lot about what a small business needs to run on bitcoin and the gaps of the current solutions. I went through the pain of running on bitcoin intentionally. My working hypothesis is that medium-of-exchange adoption will start picking up when small businesses start demanding payment in bitcoin. While accepting bitcoin has been positive for my business financially, the user experience has not. Fees were high, privacy was bad, and invoicing/accounting needed several manual steps. So I’ve decided to build a product specifically for the freelancer/solopreneur that wants to receive payment in bitcoin with low fees and without needing to sign up for a custodial service.
Who am I?
I’ve worked in startups for 12 years and led the development of one of the first self-custody Lightning Wallets at Lightning Labs in 2018/2019. I’ve seen wallets come and go, including the one we built. So I know how hard it is to find a business case. But I feel now is the right time in terms of technology and adoption to make a bet on bitcoin payments.
I’m doing this because I enjoy the autonomy of building a bootstrapped product that scratches my own itch. I value owning my time and love the creative process. So I decided to build in true indie hacker ethos: learning out in the open, self-funded and bootstrapped. This means I can focus on customers and build for the longterm. My intention is to build product iterations quickly and ship early to get customer feedback often. The first release is limited in scope by design. I’m not making any assumption on what customers want. I will listen and learn.
Building the Proof-of-Concept
As a first step I’ve built a proof-of-concept wallet using the new Breez Liquid SDK. They refer to it as a “nodeless Lightning integration” that offers developers an alternative to a custodial Lightning service. More details below. Here are my impressions so far.
Initial thoughts on the Liquid SDK:
Fees
The fees are quite low. It’s 0.25% plus 40 sats to receive a Lightning payment and 0.1% plus 40 sats to send. This is considerably cheaper than LSP based Lightning wallets. Phoenix is one of my favorite options for a self-custody Lightning wallet (shout out to the ACINQ team, they are absolutely killing it). Phoenix currently charges ~1% plus an on-chain fee for every payment I receive (either to open a new channel or to splice into an existing channel to add receive capacity). The problem with this approach is that it’s cheaper for my business to have clients pay me on-chain for monthly invoices. In high fee environments this can be expensive! I’ve had a client not wanting to pay their invoice while fees were around 100 dollars after the halving. Instead they asked to be able to pay in Lightning. So I’ve been looking for a solution to improve my client UX ever since. While accepting Lightning reduces the fees on my client’s side, it just moves the burden of paying the on-chain fee to my side, effectively making my business a speculator on the on-chain fee market 😕 Using Liquid swaps saves my business 0,75% (of the payment volume!) in Lightning fees plus any main-chain fees per received payment. If we assume, for example, a monthly revenue of 10k USD this saves me north of 75 USD per month just in Lightning fees to receive payments. And this doesn’t yet take into account the fees I would have to pay later to send.
Liquid Trust Model
In contrast to Bitcoin main-chain the Liquid sidechain is not trustless but rather requires trusting the entities running the Liquid Network. And unlike in the Lightning Network unilateral exit is not possible, which is why many argue Liquid is not a Layer 2. I personally agree with this definition. But as a business owner I’m totally fine with this trust model for payments, even for larger monthly freelancer invoices. The Breez SDK uses Boltz.exchange for trustless Lightning swaps and payment amounts can range between 1000 sats (~0.50 USD) and 0.25 BTC (~15k USD). This meets my current needs for invoicing. When a certain threshold of value in the wallet is reached and I want a higher level of security, I can always swap out to a main-chain multi-sig wallet for 0.1% plus the lockup/claim transaction fees (see SDK docs). But until I do, I don’t have to worry about the main-chain fee market at all and can run my business payments with low fees.
Privacy
Liquid SDK privacy is not as good as the Fedimint protocol. Boltz sees all Lightning transaction amounts and payment recipients. But so would an LSP, for example the ACINQ node in the case of Phoenix. This gives my business similar privacy to using a self-custody Lightning wallet. The clients paying me get the sender privacy of Lightning. Receiver privacy for my business will hopefully improve with BOLT12 adoption. But in the meantime this is good enough for my threat model and certainly better than the on-chain solution I currently use. This protects me and my clients from seeing each others’ UTXOs. And my invoicing/accounting service does not see my UTXOs (on-chain addresses are stored with monthly invoices).
The alternative is a custodial service
The other option to receive freelance payments via Lightning would be to use a custodial service. This would link all of my personal data and payment data in a single company’s database. Waiting to sold, hacked or leaked in some other way. The fees would also be higher than using Liquid swaps. Custodial services on the market currently charge around 1% in fees, so about 4 times as expensive as using Liquid swaps. And I would prefer to keep personal data to myself and trust the Liquid Network instead of trusting a single custodian.
Developer UX
The developer complexity of building with the Liquid SDK is also considerably lower than building an LSP based self-custody wallet. There is no channel management, no inbound liquidity, no channel-state to backup and no gossip sync to worry about. Breez does all the heavy lifting wrt Boltz swaps integration. It’s written in Rust and has bindings for React Native. This means I can build a Lightning wallet as a single developer and only have to worry about product. This is huge!
Next challenge: offline receive
Offline receive and lightning-address support is still under development in the Liquid SDK. Though this is scheduled to be released soon. I’m excited to test this, as it will be a crucial component to enable the UX I need. The SDK uses the same mobile notification solution that other Lightning wallets use. The mobile app is woken up via a push notification to release the preimage for the Lightning invoice in order to settle a payment trustlessly.
A big thank you…
I want say Kudos to the Breez and Boltz teams for creating such an amazing developer UX! I’ve known Roy since the original Breez wallet was built on the LND mobile library we developed at Lightning Labs in 2019. They’ve been building relentlessly in the meantime and I know how hard it is to make a Lightning business model work. It definitely feels great to work with them again. Their support and service has been second to none.
Invoicing & Accounting integration
StashPay is a freelancer first wallet. So tight integration with existing invoicing and accounting software is key. I want to take a moment here to give a shout out to John and the team at Zaprite. It’s one of my favorite Bitcoin products and I’ve been a customer since I was able to pay for it. I’ve been in touch with John from the beginning of building StashPay to figure out how to best integrate with Zaprite’s amazing invoicing and accounting. And I hope this product brings a lot of value to their customers as well.
Onwards⚡️
⚡️⚡️⚡️
Amazing!