RipPay — Self-Custody XRPL Checkout
2025liveIn-person tap-to-pay checkout that keeps the private key on a Ledger Nano X. NFC loads a session, buyer signs on hardware, XRPL settles on-chain — merchant sees live confirmation.

Story
The thesis: NFC tap-to-pay UX without giving up self-custody. Most crypto checkout flows either hand over a key or trust a hot wallet. RipPay keeps the private key on a Ledger Nano X — the buyer reviews and approves the transaction on the hardware device, and only the signed blob comes back to the app.
A monorepo: an iOS buyer app, a merchant web app + backend, an Android HCE spike, and a shared package of canonical session types so every client agrees on the same state machine. SessionStatus is the contract: every component reads and writes against the same set of transitions.
The merchant sees live confirmation via Server-Sent Events as the transaction moves through `AWAITING_BUYER → AWAITING_SIGNATURE → SUBMITTED → VALIDATING → PAID`. Failure and expiry states are first-class — sessions auto-cancel after 24 hours.
What I built
- 1Designed the canonical SessionStatus state machine (CREATED → AWAITING_BUYER → AWAITING_SIGNATURE → SUBMITTED → VALIDATING → PAID / FAILED / EXPIRED)
- 2Built the iOS buyer app with NFC tag handling and Ledger Nano X signing integration
- 3Built the merchant web app + backend with Server-Sent Events for live transaction status
- 4Spiked Android Host Card Emulation as an alternative initiation path; documented iOS NFC limitations