TheTripMan
Client • Booking and Payments Platform
Notice: The production repository is private for business reasons. Screenshots avoid customer and booking data.
About this project
The problem
The business had a large social following but no way to convert it. Bookings arrived through DMs and phone calls, payment happened in person, and nothing was tracked. They needed customers to browse services, reserve a time, and pay up front without a developer involved day to day.
My role
Sole developer. I own the product: design, frontend, API, database schema, Stripe integration, deployment, and the maintenance that follows. I still ship changes against live traffic.
What I shipped
- Replaced a DM-and-phone booking process with a self-serve flow that takes payment at the time of booking, so the business stops chasing no-shows.
- Built the Stripe integration end to end, including webhook handling so a reservation is only confirmed once payment actually settles.
- Shipped an authenticated admin dashboard that turned scattered messages into one reservation list the owner can run the business from.
- Automated confirmation email and calendar invites, removing the manual follow-up that used to happen for every single booking.
- Running in production on a revenue-share agreement, which means the code has to keep working whether or not I am watching it.
Achievements
3 of 4 unlocked
Goes Live
Deployed for a paying client. Real customers book and pay on it.
Money Moves
Stripe wired end to end. A booking confirms only after the webhook says payment settled.
Made Myself Optional
An admin dashboard so the owner runs daily operations without calling me.
Hidden achievement
Keep playing this project to find out.
Case study
TheTripMan (Client)
The platform I built: thetripman.com The same company's rider app: trvoo.com
Summary
A booking and payments platform I built solo for a transportation business with a 1.7M-follower audience. It is live, it takes real customer payments, and I still maintain it. I work on it under a revenue-share agreement, so I earn a commission on every booking the platform processes.
The problem
The business had reach but no way to convert it. Bookings arrived as Instagram DMs and phone calls, payment happened in person or not at all, and nothing was recorded anywhere searchable. Every reservation cost the owner a conversation, and no-shows cost real money because nothing was collected up front.
They needed customers to book and pay without a human in the loop, and they needed one place to see what was actually scheduled.
What I built
A self-serve booking flow. Browse services, pick a time, enter details, pay, receive a confirmation. No message thread required.
Stripe, wired properly. Payment is the part that has to be correct. A reservation is only confirmed once Stripe's webhook says the payment settled, not when the browser thinks it succeeded. That distinction is what stops the database from holding bookings that were never actually paid for.
An admin dashboard. Authenticated, and built so the owner can manage every reservation without contacting me. The goal was to make myself unnecessary for daily operations, which is what a client actually wants.
Automated confirmations. Transactional email through Resend, with calendar invites for both sides. This removed the manual follow-up that previously happened for every booking.
Two scheduling modes. An embedded scheduler and a custom calendar, because the business runs differently in peak season than off season.
Tech
- Next.js 15 (App Router), TypeScript
- Tailwind + shadcn/ui
- Stripe for checkout and webhooks
- PostgreSQL (Neon) with Prisma
- Cal.com / FullCalendar / Google Calendar sync
- Resend for transactional email, GA4 for analytics
- Vercel, with Jest and jest-axe accessibility tests behind Husky hooks
Why it matters
This is not coursework. It is a production system with a paying client, real money moving through it, and consequences when something breaks. I own it from the schema to the deploy button, which means I have had to think about things coursework never asks: what happens when a webhook arrives twice, how to change a live schema without downtime, and how to ship a fix on a Saturday because bookings do not pause for weekends.
Notes
The production repository is private for the client's business reasons. Screenshots avoid customer and booking data.