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
Share this project:

Updates