Prioritize cash-out flow based on market research (95%+ activity)

Market context added:
- 95%+ activity is cash-out (selling Bitcoin for cash)
- Typical for remittance corridors, Bitcoin-paid workers
- Bill dispenser is REQUIRED for testing, not optional

Updated development priorities:
- Cash-out first, cash-in second
- Dispenser in minimum dev kit (~$655-855)
- Bill validator becomes secondary priority

Updated milestones:
- Priority 1: Cash-out with real dispenser
- Priority 2: Cash-in (mock validator OK initially)
- Priority 3: Advanced features (Cashu, etc.)

Phase 4 reorganized to implement cash-out before cash-in.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Patrick Mulligan 2026-01-22 15:52:24 -05:00
commit 68b797d938

View file

@ -29,13 +29,28 @@ priority: critical
--- ---
## Target Market Context
> [!important] Cash-Out Dominant Market
> Market research shows **95%+ of activity is cash-out** (users selling Bitcoin for cash). This is typical for:
> - Remittance corridors (receiving Bitcoin from abroad)
> - Bitcoin-paid workers converting to local currency
> - Merchants liquidating Bitcoin revenue
>
> **Implications:**
> - Bill dispenser is **essential** for testing, not optional
> - Cash-out flow is the **critical path**
> - Cash-in still important (equal weight in code) but secondary for go-live
---
## Guiding Principles ## Guiding Principles
> [!important] Build Philosophy > [!important] Build Philosophy
> 1. **Vertical slices** - Each phase delivers working functionality > 1. **Cash-out first** - Primary use case, test with real dispenser early
> 2. **Test on real hardware early** - Don't wait until "everything is ready" > 2. **Vertical slices** - Each phase delivers working functionality
> 3. **Mock what you must** - But prefer real components when possible > 3. **Test on real hardware early** - Dispenser essential, not optional
> 4. **Ship incrementally** - Working ATM with 1 bill validator > perfect ATM with 10 > 4. **Ship incrementally** - Working cash-out ATM > feature-complete vaporware
--- ---
@ -1436,7 +1451,13 @@ console.log(`Dispensed ${dispensed} bills`)
## Phase 4: Payment Flows ## Phase 4: Payment Flows
> [!goal] Deliverable > [!goal] Deliverable
> Complete cash-in and cash-out flows working end-to-end. > Complete cash-out (primary) and cash-in flows working end-to-end.
> [!important] Cash-Out First
> Given 95%+ cash-out activity in target market:
> 1. **4.2 Cash-Out** - Implement and test first
> 2. **4.3 Cash-In** - Implement second
> 3. Both flows share Lightning.Pub integration
### 4.1 Lightning.Pub Integration ### 4.1 Lightning.Pub Integration
@ -1589,14 +1610,23 @@ export class ATMCashuWallet {
### 4.5 Milestone Checklist ### 4.5 Milestone Checklist
**Priority 1: Cash-Out (95% of volume)**
- [ ] Lightning.Pub client connects - [ ] Lightning.Pub client connects
- [ ] Can create invoices - [ ] Can create invoices (for user to pay)
- [ ] Can receive payments - [ ] Invoice payment detection working
- [ ] Cash-in flow works end-to-end (mock hardware) - [ ] Dispenser integration (real hardware!)
- [ ] Cash-out flow works end-to-end (mock hardware) - [ ] Cash-out flow works end-to-end with real dispenser
- [ ] NFC BOLT card tap-to-withdraw working
**Priority 2: Cash-In**
- [ ] Can receive payments (CLINK debit)
- [ ] CLINK offer request/response working - [ ] CLINK offer request/response working
- [ ] Cash-in flow works end-to-end (mock validator OK)
- [ ] NIP-17 receipts delivered - [ ] NIP-17 receipts delivered
**Priority 3: Advanced**
- [ ] Cashu offline mode works - [ ] Cashu offline mode works
- [ ] Real bill validator integration
--- ---
@ -1725,28 +1755,31 @@ export function useFleet() {
## Development Hardware ## Development Hardware
### Recommended Dev Kit (One-Way: Cash-In Only) > [!warning] Cash-Out is Primary Use Case
> With 95%+ activity being cash-out, **bill dispenser is required** for meaningful testing - not optional.
### Minimum Dev Kit (Cash-Out Priority)
| Component | Model | Purpose | Est. Cost | | Component | Model | Purpose | Est. Cost |
|-----------|-------|---------|-----------| |-----------|-------|---------|-----------|
| SBC | Raspberry Pi 5 (8GB) | Development machine | $80 | | SBC | Raspberry Pi 5 (8GB) | Development machine | $80 |
| Display | Waveshare 7" touch | UI development | $70 | | Display | Waveshare 10.1" touch | UI development | $90 |
| Bill Validator | ITL NV200 (used) | Real hardware testing | $300-500 | | **Bill Dispenser** | Puloon LCDM-1000 (used) | **Cash-out testing (critical)** | $400-600 |
| NFC Reader | ACR122U | BOLT card tap-to-withdraw | $35 |
| Printer | Generic ESC/POS | Receipt testing | $50 | | Printer | Generic ESC/POS | Receipt testing | $50 |
| NFC Reader | ACR122U | BOLT card testing | $35 | | **Total** | | | **~$655-855** |
| **Total** | | | **~$535-735** |
### Full Dev Kit (Two-Way: Cash-In + Cash-Out) ### Full Dev Kit (Two-Way)
| Component | Model | Purpose | Est. Cost | | Component | Model | Purpose | Est. Cost |
|-----------|-------|---------|-----------| |-----------|-------|---------|-----------|
| SBC | Raspberry Pi 5 (8GB) | Development machine | $80 | | SBC | Raspberry Pi 5 (8GB) | Development machine | $80 |
| Display | Waveshare 10.1" touch | Larger UI for two-way | $90 | | Display | Waveshare 10.1" touch | Larger UI for two-way | $90 |
| Bill Validator | ITL NV200 (used) | Cash-in acceptance | $300-500 | | **Bill Dispenser** | Puloon LCDM-1000 (used) | Cash-out (primary) | $400-600 |
| **Bill Dispenser** | Puloon LCDM-1000 (used) | Cash-out dispensing | $400-800 | | Bill Validator | ITL NV200 (used) | Cash-in (secondary) | $300-500 |
| Printer | Generic ESC/POS | Receipt testing | $50 |
| NFC Reader | ACR122U | BOLT card testing | $35 | | NFC Reader | ACR122U | BOLT card testing | $35 |
| **Total** | | | **~$955-1,555** | | Printer | Generic ESC/POS | Receipt testing | $50 |
| **Total** | | | **~$955-1,355** |
### Bill Dispenser Options ### Bill Dispenser Options
@ -1757,7 +1790,15 @@ export function useFleet() {
| Fujitsu F53 | 4 | 2,500 notes | USB/RS-232 | $800-1,200 | | Fujitsu F53 | 4 | 2,500 notes | USB/RS-232 | $800-1,200 |
> [!tip] Start with Puloon LCDM-1000 > [!tip] Start with Puloon LCDM-1000
> Single cassette is sufficient for development. Simple RS-232 protocol with existing lamassu-machine drivers to reference. > Single cassette handles the primary use case. Multi-cassette (for multiple denominations) can come later.
### Bill Validator Options (Secondary Priority)
| Model | Protocol | Notes | Est. Used Price |
|-------|----------|-------|-----------------|
| **ITL NV200** | eSSP | Industry standard, good docs | $300-500 |
| MEI Cashflow | ccTalk/MDB | Common in NA market | $250-400 |
| JCM iVizion | ID-003 | Existing lamassu driver | $200-350 |
### Sourcing Used Equipment ### Sourcing Used Equipment
@ -1765,10 +1806,11 @@ export function useFleet() {
- **Alibaba** - New units, but longer shipping - **Alibaba** - New units, but longer shipping
- **ATM parts suppliers** - atmpartsnow.com, atmequipment.com - **ATM parts suppliers** - atmpartsnow.com, atmequipment.com
- **Bitcoin ATM operators** - Sometimes sell retired units - **Bitcoin ATM operators** - Sometimes sell retired units
- **ATM route liquidations** - Best prices, bulk deals
### Mock-First Development ### Mock-First Development
For most development, mocks are sufficient: For initial UI/flow development, mocks work - but **test with real dispenser early**:
```typescript ```typescript
// Start with mocks // Start with mocks