If you can make a phone call, you can use Bitcoin.
Built at the MIT Bitcoin Hackathon 2026 (Arc VII) | April 10–12
1.4 billion people are unbanked. Most have a phone—but using a full crypto wallet often still means a smartphone, apps, and data. BitVoice is different: the wallet itself is a regular phone call (no BitVoice app, no website). WhatsApp invoices and receipts need mobile data or Wi‑Fi and the WhatsApp client. No bank account is required to send and receive over Lightning through BitVoice.
| Resource | URL |
|---|---|
| Demo Video | YouTube — full walkthrough (~9 min) |
| Live Dashboard | web-production-51d43.up.railway.app/dashboard |
| Figma Prototype | reuse-rabid-40486629.figma.site |
Call a phone number → authenticate with a PIN → speak commands → Bitcoin moves.
| You say… | What happens |
|---|---|
| "Balance" | Hear your sats + USD equivalent |
| "Send 5 dollars to Alice" | AI extracts intent → confirms → instant Lightning transfer → WhatsApp receipts |
| "Receive" | Lightning invoice generated → sent to your WhatsApp |
| "History" | Last 5 transactions read aloud |
| "Add contact" | Save name (voice) + phone (keypad) |
Internal transfers on the same LNbits node settle in milliseconds with zero routing fees. Every user gets a real Lightning wallet on LNbits—not a simulation.
Example LNbits wallet backing a BitVoice user—live sats, USD, and payment history.
1. Register → Call → say name → set PIN → wallet created & funded instantly
2. Balance → "How much do I have?" → hear sats + USD
3. Send → "Send 1 sat to Bob" → confirm → instant → WhatsApp receipts
4. Receive → Lightning invoice delivered via WhatsApp
5. History → Recent transactions read aloud
6. Contacts → Save contacts by voice; auto-invite via WhatsApp when new
| Layer | Technology | Role |
|---|---|---|
| Voice | Twilio Voice + WhatsApp | Phone call interface, TwiML webhooks, receipts & invoices |
| AI | GPT-4o-mini + Whisper STT | Intent parsing, fallback transcription, amount/name cleanup |
| Backend | FastAPI + PostgreSQL (SQLite locally) | Business logic, user / contact / tx storage |
| Bitcoin | LNbits + Lightning Network | Per-user wallets, BOLT11 invoices, instant internal payments |
| Infra | Railway + CoinGecko | Hosting, live BTC/USD price for voice + dashboard |
Key design decisions
- Each user gets their own real LNbits Lightning wallet — not a simulation.
- New wallets are funded via internal Lightning invoice paid by the main funding wallet (no separate admin top-up API).
- Twilio speech gather for low-latency commands; Whisper when a recording URL is posted (fallback / legacy paths).
- GPT-4o-mini handles natural language: "pay Bob ten sats", "transfer 50 bucks to Carol", "what did I spend" — with a keyword fast-path and validation against balances and contacts.
- Field collection — if you say "send money" without an amount or recipient, the flow only asks for what’s missing.
| Feature | How |
|---|---|
| PIN auth | 6-digit, bcrypt (cost 12), 3 fails → 30-minute lockout |
| Phone privacy | SHA-256 hash stored for lookup (not raw E.164 in logic paths) |
| Webhook integrity | Twilio X-Twilio-Signature validated (HMAC-SHA1) on voice webhooks |
| Session isolation | In-memory store keyed by CallSid; 1-hour TTL (SESSION_TTL_SEC in session_store.py), refreshed on updates |
Core wallet: Registration (voice name + DTMF PIN + auto LNbits wallet), balance, send (NLU + partial-command field collection), receive (real Lightning invoices via WhatsApp), history, contacts.
AI pipeline: Whisper where needed, GPT-4o-mini intent classification, amount parser (number words, sats/USD, common STT mis-hears), keyword fast-path, contact names as Twilio speech hints in the send flow.
Admin dashboard: Real-time stats, 7-day volume chart, user growth, hourly heatmap, paginated transactions (live from LNbits), user list with balances, SSE call-log stream (/api/dashboard/stream).
Infrastructure: Defensive LNbits JSON parsing for API shape drift, parallel wallet queries via asyncio.gather + asyncio.wait_for, WhatsApp invites for new contacts, TwiML error handler so callers always get spoken feedback.
git clone https://github.com/SandaAbhishekSagar/BitVoice_Pay.git
cd BitVoice_Pay
pip install -r requirements.txt
cp .env.example .env # fill in keys
uvicorn main:app --reload --port 8000Set Twilio Voice webhook → https://your-url/voice/incoming (POST).
See .env.example for Twilio, OpenAI, LNbits, WhatsApp, and BASE_URL (required in production for signature validation).
BitVoice_Pay/
├── main.py # FastAPI app
├── config.py # Env settings
├── models.py # User, Contact, TransactionLog
├── session_store.py # Per-call sessions + TTL
├── routes/
│ ├── incoming_call.py # Call entry
│ ├── auth.py # PIN
│ ├── registration.py # Onboarding
│ ├── menu.py # Voice command routing
│ ├── dashboard.py # Admin UI + REST + SSE
│ └── commands/ # balance, send, send_fields, receive, history, contact
├── services/
│ ├── lnbits.py # Lightning wallet API
│ ├── voice_nlu.py # Whisper + GPT intent parsing
│ ├── sms.py # WhatsApp (Twilio Messages API)
│ ├── call_log.py # In-memory log for dashboard SSE
│ └── price.py # BTC/USD (CoinGecko)
├── security/ # PIN hashing, Twilio signature validation
└── static/dashboard.html # Admin dashboard (single-file)
| Timeline | Milestone |
|---|---|
| 0–3 months | Multi-language voice (Spanish, Hindi, Swahili, …) |
| 3–6 months | Voice biometrics authentication layer |
| 6–12 months | Off-ramp partnerships (BTC → local currency) |
| 12+ months | Nunchuk multisig integration for cryptographic spending controls |
Built by Team BitVoice at MIT Bitcoin Hackathon 2026.
Voice-first. No BitVoice app required. Real Lightning. Bitcoin for the next billion.



