One form on the website. One admin panel behind it. I built the backend that takes an event enquiry all the way to a booked team and a paid invoice, with no phone tag and no spreadsheets.
🥊 OVERVIEW
SBRG is an event staffing agency in the North East of England. It supplies professional ring and cage girls and promotional staff for boxing, MMA and brand events across the UK.
I was the backend developer. I built the API, database and payment flows behind the public website, the admin panel and the staff dashboard.
🎯 THE CHALLENGE
Bookings used to come in through messages and calls. Every event meant checking who was free, confirming with the client, then chasing payment.
The goal was one system that:
Turns a website enquiry into a booking the admin can approve in a few clicks
Never books the same person for two overlapping events
Sends invoices with an online payment link, including deposits and balances
Lets staff see only their own jobs and calendar
🛠 WHAT I DID
Enquiries: A public enquiry form saves the event date, time, venue, event type and how many staff are needed. The admin gets an instant email with a direct link to the enquiry. Admins can also add enquiries manually, and every enquiry moves through clear statuses from pending to completed.
Rostering without double bookings: When the admin approves an enquiry and assigns staff, the API checks every overlapping event and blocks anyone already booked. Only free staff are offered for each event.
Booking confirmations: The client is emailed automatically when their booking is confirmed, only on the first confirmation so they never get duplicates.
Invoices and payments: Invoices are generated as PDFs, stored in Cloudflare R2 and emailed with a Stripe payment link. Clients can pay in full or pay a deposit first, then a balance invoice. A verified Stripe webhook marks invoices paid, and admins can record cash payments too.
Admin dashboard: Stats for enquiries, bookings, revenue by month, outstanding invoices and top-performing staff.
Staff accounts and access: Admin and staff roles with Better Auth. Staff can only see their own jobs and calendar, and password reset works by email.
Rebuild into one app: I moved the original separate Express backend into Next.js API routes, so the whole product deploys as one app. I also added database indexes and UK phone validation.
🏆 THE OUTCOME
Live in production for a real agency
Enquiries go straight to the admin's inbox, with a link to approve and assign staff
No double bookings: staff availability is checked automatically for every event
Clients get a PDF invoice and can pay online by card, in full or by deposit
⚙️ STACK
Backend: Next.js API routes, TypeScript, PostgreSQL, Prisma
Built the backend for SBRG, a UK event staffing agency: enquiries, double-booking-safe rostering, PDF invoices and Stripe deposit and balance payments.