The festival cashless system, end-to-end on real NFC hardware — register a band, load cash, let a vendor charge it, watch the takings. Running against dev (staging); production is untouched.
dev · livebuild v1.0.0 · c71206f2026-08-07Android · NFC
ⓘAndroid phone with NFC turned on (or the ZCS handheld). Allow "unknown sources" if prompted. The build points at dev-api.carrottickets.com.
Three roles, one app
Log out and back in to switch roles — the app sends each one to its own screen.
Role
Login code
PIN
What they do
Reseller band desk
597081
482913
Register a band, top up
Vendor "Test Bar"
640220
551282
Charge bands (tap-to-pay), see takings
Gate entry
380443
739154
Bind band, tap-to-check-in, balance
What you're showing
One physical band is a funded ticket. The balance lives on the server — the tag only carries its UID, and every tap is an atomic debit that keeps the books balanced (float = wallets + vendors + fees).
1
Register a band — a blank tag becomes a ticket + wallet.
2
Top up — load cash onto the band.
3
Vendor tap-to-pay — charge debits the attendee, credits the vendor.
4
Takings — the vendor sees every charge + a running total.
5
Gate — bind a band, tap to check in, check a balance.
The demo · about 8 minutes
Act 1
Register & fund a band
Reseller · 597081 / 482913
Log in, then pick "Cashless NFC Tap Test Fest".
Register band → choose General Admission → (optionally add cash) → tap your tag. It becomes a ticket + wallet + band in one move.
Top up a band → tap the tag → enter R50. The band now holds R50.
This is the money-in half — the wristband is now a funded wallet.
Act 2
A vendor charges the band
Vendor · 640220 / 551282
Log out, log in as the vendor → you land on Test Bar with two tabs: Charge and Takings.
Charge → enter R10 → tap the band → "Charged R10 · New balance R40."
Try to over-charge (more than the balance) → "Declined · Balance R X" — the balance is left untouched.
Takings tab → the charge is listed, and your running total updates.
Test Bar takes 10% commission, so R10 splits: vendor R9, Carrot R1 — debited from the attendee, credited to the vendor, on the ledger.
Act 3
Gate (optional)
Gate · 380443 / 739154
Log in as gate → pick the event.
Check balance → tap a band → see balance + history.
Bind band → scan a ticket QR → tap a blank band → bound.
Tap to check in → tap a bound band → the ticket checks in.
What's real vs. not
✓ Working now
NFC read on real hardware
Register / sell band, cash top-up, balance + history