Hey Indie Hackers 👋
I'm Seb, solo founder from Arendal, Norway. I've spent a long stretch building MyFriendlyWallet — a non-custodial wallet that sends stablecoins (USDC, EURC, USDT) to anyone, across 54 chains and 156 tokens, in under 5 seconds. No app install, no seed phrase drama, no gas fees for the user.
The pitch is simple: for everyone, as simple as sending to @username. The 54 chains underneath only show up if you flip on power mode. Crypto payments that just work.
I want to share the technical and product decisions that made shipping this solo actually possible, because most of them weren't obvious and I had to learn them the hard way.
## The constraints I started with
- Solo. No co-founder, no engineering team.
- Non-custodial. I refuse to touch user funds.
- Multi-chain from day one. Users shouldn't care whether their USDC is on Base or Solana — it just works.
- Payments-first. Not a portfolio tracker, not a DeFi aggregator. Just "send money."
## What the stack actually looks like
Frontend: A single-file React PWA. The entire app is one minified index.html that gets edited via Python string replacement with assert count==1 guards — a discipline I adopted after losing a full day to a misplaced brace in a minified bundle. Every change passes node --check before I push. It's weird, but it works.
Backend: Cloudflare Workers, end to end. RPC proxying for 54 chains, fee enforcement, gas relayers, broadcast orchestration. Sub-100ms cold starts at every edge. The whole multi-chain footprint runs on edge compute that wouldn't exist on traditional infra at any sane price.
Gasless UX: On Base (USDC/EURC) and Solana (USDT), I run a pool of relayer wallets. User signs an intent, Worker picks a relayer that's not mid-nonce-lock, relayer pays the gas and broadcasts. User sees "$50 sent" in ~3 seconds, no gas math, no native token juggling.
Keys: Generated and stored on the device only. The Worker never sees a private key. Which means I can leave this running for anyone forever without being in the custody business.
## Free embeddable widgets
This part I'm especially proud of. MFW ships with a small library of free, embeddable payment widgets that any creator, freelancer or small business can drop onto their site in two minutes. No account, no API key, no SDK install — just paste an HTML snippet:
- Coffee shop / tip jar — accept a $5 (or any amount) stablecoin tip
- Donate button — for nonprofits, side projects, GitHub READMEs
- Checkout — fixed-price product or service payment
- Pay button — generic CTA that opens the MFW send flow pre-filled
- Invoice — single-use payment link with a fixed amount and reference
Recipient enters their @username once in the widget builder at myfriendlywallet.io, gets the snippet, pastes it in their site. Payer doesn't even need to be an MFW user — the widget handles onboarding. Receiver still pays nothing; we only take the 0.25% on the sender side.
## For developers
There's a small developer + partner API layer for people who want to do more than just embed a button:
- Developer API — programmatic access to send and receive flows, fee quoting across chains, balance lookups, payment intent generation. REST, simple bearer auth.
- Partner API — for fintechs, exchanges, and platforms that want to embed MFW under their own brand. Includes per-partner fee splits, custom branding, and account-level reporting.
- Webhook events — for payment received / payment confirmed / payment failed, so partner backends can update orders, fulfill goods, or trigger downstream automations without polling.
- Docs at mfw-developers.html on the marketing site — kept deliberately short and copy-pasteable. No 200-page reference manual no one reads.
The whole layer is the same Cloudflare Worker that powers the consumer app, so partners get the same edge performance and uptime characteristics.
## The hard-won lessons
1. Multi-chain is a UX problem, not a technical one. Technically, adding a chain is a weekend. Making that chain feel identical to the 53 others — same send flow, same fee display, same confirmation UX, plus the developer tools and embeddable widgets that wrap each chain — takes real, careful work per chain. I did it anyway because the alternative (chain switchers, separate wallets per chain) is what makes normal people bounce.
2. Surgical edits over rewrites. On a minified single-file app, every change is a scalpel cut. I never "refactor." I change the one thing that needs changing and leave the rest untouched. Slower per-change but massively faster overall — no regressions, no "spent the week rewriting and broke Solana."
3. Stablecoin-first beats token-list-first. Most wallets show you 50 tokens and ask you to pick. I default to USDC/EURC/USDT because that's what people actually want to send. The 156 other tokens are there when needed, but never in your face.
4. Cloudflare Workers changed what a solo person can run. I wouldn't have started this project on AWS. Edge compute + instant cold starts + cheap pricing is what makes "54 chains, solo" a thing that can exist.
5. Free widgets > paid integrations. I made every embeddable widget free, no signup, no rev share. The bet: distribution > short-term margin. Someone pasting a tip jar on their newsletter is a thousand future MFW users that no paid acquisition channel could touch.
## Where I am now
- Live at myfriendlywallet.io and app.myfriendlywallet.io
- Free widgets live at myfriendlywallet.io
- Developer docs at the same domain (mfw-developers.html)
- Launching on Product Hunt soon
- Native iOS/Android coming later this year (currently a PWA, works on every phone without install)
Happy to answer questions in the comments — architecture, widgets, the developer API, multi-chain UX, anything. I'm not a fast chatter but I read every reply. Feedback genuinely valued.
Seb