Inspiration
Most loyalty rewards programs force merchants to adopt expensive platforms and force customers to give up personal data. At the same time, Bitcoin merchants often already have a working checkout and don’t want to replace it just to offer simple rewards.
I was inspired by the simplicity of paper punch cards and asked:
What would a digital punch card look like if it worked with Bitcoin payments, respected privacy, and didn’t introduce a new platform or payment system?
Bunch is my answer.
What it does
Bunch is a drop-in customer loyalty punch-card layer for Bitcoin-accepting merchants.
It works alongside existing Bitcoin payment flows (e.g., BTCPay, LNbits, zap-based payments) without creating invoices or handling money.
- Merchants create a punch card (e.g. “Buy 5, get 1 free”)
- Customers join a session by scanning a QR
- Each purchase generates a one-time QR
- After the merchant confirms payment, a punch is awarded
- When the card is full, the customer redeems in person with merchant confirmation
No accounts. No customer database. No new payment system.
How I built it
I built Bunch as a local-first, browser-based app optimized for speed and reliability.
- Frontend: React, TypeScript, Tailwind
- Storage: IndexedDB (merchant-local state)
- Sync: lightweight session-based connection between merchant and customer screens
- UX: QR-based flows to minimize typing and friction
- Payments: intentionally out-of-scope; simulated for hackathon reliability
The design keeps a clear boundary:
Bitcoin handles payments. Bunch handles rewards.
Challenges I ran into
- Designing loyalty without turning it into surveillance
- Preventing abuse (e.g., replays, double punches) without heavy infrastructure
- Balancing privacy with ease of use for real merchants
- Avoiding over-engineering while still supporting future extensibility
- Making the flow intuitive for non-technical users
Accomplishments that I'm proud of
- Built a working loyalty system that never touches payments
- Kept the flow to a small number of clear, human steps
- Avoided accounts, logins, and customer tracking
- Delivered a demo-reliable experience in a short hackathon window
- Designed Bunch as a composable layer instead of a platform
What I learned
- Simplicity is a feature, especially for merchants
- Clear boundaries between systems (payments vs rewards) improve trust
- Freedom tech doesn’t have to be maximalist to be meaningful; incremental progress is still progress
What's next for Bunch
- Optional Nostr-based social gifting of completed rewards (“Coffee Bunch / Brunch Bunch”)
- Customer-held, privacy-max punch cards for users who want full self-custody
- Native integrations with BTC payment systems like BTCPay Server and LNbits
- A small SDK so other Bitcoin apps can add loyalty with minimal changes
- Exploring portable proof of redemption without turning loyalty into money
Built With
- anthropic
- chatgpt
- claude
- cursor
- goose
- sonnet4.5
Log in or sign up for Devpost to join the conversation.