PayPark is a real-time parking platform that replaces fixed parking blocks with usage-based sessions. Drivers can discover parking, start a session, track cost in real time, and settle payment using RLUSD on the XRP Ledger.
Built at Columbia DivHacks 2025.
π 3rd Place Overall
π Best Financial Hack β Capital One
π On-Chain Innovation β Ripple
π Most Popular Hack
Parking usually asks you to predict the future.
Pay for an hour and leave after 22 minutes? You overpaid.
Pay for 30 minutes and stay for 38? Now you are rushing back to a meter or risking a ticket.
PayPark changes the unit of parking from a prepaid block of time to a live session.
Start parking when you arrive. Stop when you leave. Pay for the time in between.
- Find a parking location through the interactive TomTom map.
- Start a parking session and begin tracking elapsed time and cost.
- Monitor the session in real time as pricing updates.
- End the session when you leave.
- Settle the exact amount through RLUSD on the XRP Ledger.
- Review the transaction and session history from the application.
Add a GIF here showing the full flow:
Find spot β Start session β Live timer β End session β RLUSD payment
A short demo is much more useful here than several screenshots.
βββββββββββββββββββββββββββ
β PayPark Web β
β Next.js + React β
ββββββββββββββ¬βββββββββββββ
β
API + real-time events
β
βββββββββββββββββββββββΌββββββββββββββββββββββ
β Express API β
β β
β Sessions β’ Payments β’ Wallet β’ Maps β
ββββββββββββ¬βββββββββββββ¬βββββββββββββ¬ββββββββ
β β β
β β β
βββββββββββΌββββ ββββββΌββββββ ββββΌββββββββββββ
β Prisma β β TomTom β β XRP Ledger β
β Session DB β β Maps API β β Testnet β
βββββββββββββββ ββββββββββββ ββββββββ¬ββββββββ
β
RLUSD settlement
PayPark separates application state from payment settlement. Parking sessions and application data are handled through the Express/Prisma backend, while RLUSD transfers are submitted and verified through the XRP Ledger testnet.
Instead of purchasing a fixed block of parking time, PayPark models parking as a continuously running session.
Each session records:
- start time
- elapsed time
- current cost
- parking location
- payment state
- completion status
The interface updates as the session progresses, allowing the final charge to reflect the time actually used.
PayPark uses Socket.io to keep parking-session information synchronized between the backend and frontend.
This allows changes such as session timing and parking state to appear without requiring a full-page refresh.
Parking payments are settled using RLUSD on the XRP Ledger testnet.
The payment flow handles:
User wallet
β
β RLUSD payment
βΌ
XRP Ledger
β
β transaction confirmation
βΌ
PayPark
β
βββ session marked as paid
The application also manages XRPL trustlines and synchronizes wallet balances with ledger state.
PayPark currently uses XRPL Testnet. No real funds are involved.
TomTom provides the geospatial layer for the application, allowing parking information to be presented directly within an interactive map rather than through a traditional list-based interface.
This creates a single flow from:
Discovery β Parking β Session β Payment
- Next.js
- React
- TypeScript
- Tailwind CSS
- Node.js
- Express.js
- TypeScript
- Prisma
- SQLite
- Socket.io
- XRP Ledger
- RLUSD
- XRPL Testnet
- TomTom Maps API
PayPark/
βββ api/
β βββ prisma/
β βββ src/
β βββ routes/
β βββ index.ts
β
βββ web/
β βββ src/
β βββ app/
β βββ components/
β βββ lib/
β
βββ config/
β βββ setup.sh
β
βββ docs/
β βββ SETUP.md
β βββ SYSTEM_ARCHITECTURE.md
β βββ GENESIS_BANK_INFO.md
β βββ TOMTOM_INTEGRATION.md
β
βββ package.json
βββ pnpm-lock.yaml
βββ pnpm-workspace.yaml
git clone https://github.com/kkanda0/PayPark.git
cd PayParkpnpm installcp api/.env.example api/.envAdd the required API and XRPL credentials to your local .env.
Never commit wallet secrets or API credentials.
pnpm --filter api prisma generate
pnpm --filter api prisma migrate devpnpm devThe application runs locally with:
Web: http://localhost:3000
API: http://localhost:4000
More detailed technical documentation lives in /docs:
SETUP.mdβ environment and installation instructionsSYSTEM_ARCHITECTURE.mdβ system and payment flowGENESIS_BANK_INFO.mdβ RLUSD issuer architectureTOMTOM_INTEGRATION.mdβ map integrationTESTING_INSTRUCTIONS.mdβ testing workflow
PayPark started with a simple question:
Why should parking require someone to guess how long they will stay?
Answering that meant connecting several systems that normally live separately: geospatial discovery, real-time application state, usage-based pricing, wallets, and blockchain settlement.
The most interesting challenge was not getting any one of those components working independently. It was making the transition between them feel like one product.
MIT