One Sandwich Max.

Role
Product, architecture, design, implementation
System
Universal app + private lunch ledger
Stack
Expo, React Native, TypeScript, Supabase
Platform
iOS, Android, web

The napkin ledger

A stupid problem needed a real system.

Sandwich Bets started with a tiny social failure: two friends make a dumb prediction, forget the terms, and later remember the outcome differently. The joke only works if the system remembers exactly what was proposed, what changed, who accepted it, and whether the resulting sandwich was ever delivered.

That turned a novelty into a real product exercise. The app separates theatrical odds from settlement, caps every consequence at one sandwich, versions negotiated terms, keeps the ledger private to participants, and leaves an obligation open until lunch is delivered or forgiven.

This is the actual stateful interface prototype, not a video or flattened mockup. Tap through the wager, negotiation, odds, resolution, and ledger screens.

The social loop

3 connected stages

Bet state

  1. Proposed
  2. Qualms or accepted
  3. Active
  4. Resolution pending
  5. Resolved
  6. Owed
  7. Delivered or forgiven
Sandwich Bets poster reading Put a Sandwich on It beside an illustrated sandwich badge

Loading the coded prototype…

If the prototype does not load, open Sandwich Bets in a new tab ↗

The joke needed rules

No cash. No crypto. Just lunch.

A casual bet becomes contentious in the gaps: who accepted which terms, whether the odds mattered, who won, and whether the loser actually followed through. The product makes those gaps explicit without converting lunch into a financial instrument.

Decorative odds. Real lunch consequences.

Every guardrail protects the same distinction: this is a private social ritual with a ledger, not a gambling platform wearing a novelty hat.

Under the deli paper

3 protected layers
Settlement boundary
Every accepted bet settles in exactly one sandwich, subject to the mutually agreed cap
Money boundary
No deposits, wallets, cash payouts, transferable value, or odds-based rewards
Consent boundary
The counterparty may decline or renegotiate; active terms require explicit mutual acceptance
Privacy boundary
Wagers and obligations are participant-scoped and protected by row-level security
Odds boundary
Generated odds are decorative theater and have no effect on settlement
Fulfillment boundary
A resolved obligation remains open until the sandwich is delivered, acknowledged, or forgiven

The actual product

A joke with state.

Sandwich Bets works because it treats a trivial wager with exactly enough seriousness: explicit terms, mutual consent, a recorded outcome, and an obligation that remains open until lunch changes hands.

The result is less a betting app than a tiny social contract. The software does not make the prediction matter. It makes the promise harder to rewrite.