Split the trip. Settle in a tap.
Roundtrip is a mobile-first Nimiq Pay Mini App for tracking shared expenses and settling the final balance directly in NIM. It removes the two awkward parts of a group trip: figuring out who owes whom and asking everyone to open a separate payment app.
- Web: nimiq-roundtrip.vercel.app
- Nimiq Pay deeplink:
nimiqpay://miniapp?url=https%3A%2F%2Fnimiq-roundtrip.vercel.app%2F
Open the web demo and tap Explore a demo. To test a real payment, open the same URL as a Mini App inside Nimiq Pay.
Shared-expense tools usually stop at the IOU. Roundtrip closes the loop:
- Add an expense in seconds.
- Split it across any combination of friends.
- Let the settlement engine minimize the required transfers.
- Pay the suggested recipient through Nimiq Pay with an attached trip memo.
No account, email, or backend is required. Trip data stays on-device until the user explicitly exports it or creates a compressed share link.
- Nimiq Pay wallet connection with
listAccounts() - Native NIM transfer with
sendBasicTransactionWithData() - Integer-Luna accounting to avoid floating-point money errors
- Zero-sum balance engine and minimized settlement routes
- Uneven participant selection per expense
- Shareable compressed trip snapshots, QR codes, and Nimiq Pay deeplinks
- Identity selection when joining a shared trip
- Offline-first PWA with on-device persistence
- Portable JSON import/export
- Graceful web demo mode outside Nimiq Pay
- Responsive, accessible mobile UI with reduced-motion support
- Nimiq Pay language detection ready through
window.nimiqPay.language
Roundtrip has no backend, analytics, trackers, or private-key access. Wallet actions are requests to Nimiq Pay; the host wallet shows its native approval UI before a transaction can be sent. Share links contain a compressed snapshot of the visible trip data, and the app makes that explicit before sharing. See PRIVACY.md.
Requirements: Node.js 20+
npm install
npm run devThen open http://localhost:5173. For device testing, Vite also exposes the app on your LAN; enter that URL in Nimiq Pay under Mini Apps.
npm test
npm run build
npm auditThe test suite covers money conversion, zero-sum balances, settlement minimization, and Unicode-safe share serialization. GitHub Actions repeats tests and the production build, while Vercel deploys the connected main branch.
React + TypeScript
├── Local trip state (localStorage)
├── Integer-Luna settlement engine
├── Compressed URL / QR snapshots
├── @nimiq/mini-app-sdk
│ ├── listAccounts
│ ├── isConsensusEstablished
│ └── sendBasicTransactionWithData
└── Vite PWA → Vercel
The detailed submission package, demo script, and launch copy are in docs/.
