RentMate
A trust-first marketplace for booking identity-verified companions for platonic, public plans. Coffee, events, city tours, study sessions.
Key features
- Identity verification with a government ID and a live selfie, shown as a seal that fills one notch for each check passed.
- Escrow booking with Razorpay checkout, and wallets for customers and companions.
- In-app chat over Socket.IO, with bios and messages scanned for phone numbers, emails, handles and links, so every plan stays on the platform.
- Live safety tools during a meet. Check-ins, live location, and an SOS that pages the safety team.
- A trust-and-safety admin console with seven roles, a verification queue, moderation and an audit log.
- Automatic localisation across 20 regions and 16 currencies.
What it is
RentMate is a marketplace for booking identity-verified companions for everyday plans: coffee, events, city tours, study sessions. It is explicitly not a dating service. The product is built to keep every meet platonic, public and accountable: verification before anyone can book, contact only inside the app, and live safety tools while the meet is happening.
How it’s built
One repository, two applications. The web app is Next.js with React and TypeScript. The backend is a NestJS API on PostgreSQL through Prisma, with Redis for rate limiting, one-time sign-in codes and lockouts, Socket.IO for chat, and Razorpay for payments. The web app is deployed on Vercel and the API on Railway.
One seam between the interface and the API
Every network call in the web app goes through a single module. With no API configured, the app runs on realistic mock data. Set one environment variable and the same functions make real requests, with no change to the interface. That let the whole interface be finished before the backend existed, and it keeps local interface work fast now that it does.
Money and permissions
The paths that move money run inside database transactions, some at serializable isolation, to keep bookings and balances consistent when requests arrive at the same time. Admin permissions come from the server across seven roles: the interface hides what a role can’t do, and the API refuses it regardless. Admin actions are written to an audit log.
Testing and delivery
Unit and end-to-end tests run on Jest, and CI runs on GitHub Actions. Releasing the API is a deliberate two-step: deploy, then run the database migrations.
Known limits
The legal pages are still drafts. The source code is in a private repository.


