Booking and payments system case studyInstant quotes, online booking and card payments for a home-cleaning business, taken live within three weeks as the sole developer.
A family-run cleaning business wanted customers to get a price, pick a time and pay online without a phone call — and wanted its own back office to run the day.

The live public landing page. The other screens use demo data; no customer data is shown.
A home-cleaning business needed customers to get a price and book online, cleaners to see their jobs on a phone, and the owner to run bookings and payments from one screen. I built the whole system: a rules-based quote engine, booking by arrival window, card-on-file payments, a cleaner app and an admin back office — with the rules that cost money if broken (double-booking, double charges, over-refunds, duplicate webhooks) enforced by the database itself, not by hope.
Quotes by phone, schedules by memory.
A family-run home-cleaning business took enquiries by phone, priced each job by hand and kept the schedule in people’s heads. They wanted customers to see a price and book online, cleaners to know where to be, and one place to manage bookings, payments and refunds.
A booking is a promise about money and time.
Two things cannot go wrong: a cleaner cannot be booked twice, and a card cannot be charged twice. Both had to hold when two customers pick the same slot in the same second, when a payment request is retried, and when a webhook arrives twice — and the price a customer sees had to be the price they pay.
One web app for three kinds of user.
A two-minute quote form that shows the price live and sends unusual homes to the owner for review, booking by arrival window with a card kept on file, recurring visits, a phone-first cleaner app, and an admin back office for the schedule, payments, refunds, pricing and the questions the quote form asks.
From address to booked visit
Running the day







Screens from the real product, captured with demo data. No client or customer data is shown.
From an address to a paid, scheduled visit
- 01Quote formHome, service, condition
- 02Pricing rulesOne function, one price
- 03Book a windowSlot held by a database constraint
- 04Schedule & assignAdmin back office
- 05Cleaner appOn my way · check in · check out
Rules the database enforces.
No double-booking, by constraint
A database exclusion constraint makes two overlapping jobs for one cleaner impossible to store. Availability checks sit in front of it, but the constraint is what guarantees it.
Charges that cannot repeat
Every payment is written as a record before the payment provider is called, and that record is the idempotency key — so a retry can never create a second charge.
One pricing function
Prices come from a single pure function, never from the browser. During review, an invariant sweep of 120,960 input combinations confirmed every quote’s lines add up to its total, with no negative line and no discount larger than the base.
Side effects as records
Emails, charges and reminders are written as rows in the same transaction as the change that caused them, then sent by background workers — so nothing is sent for a change that did not happen.
AI that only advises
OpenAI gpt-4.1-mini reads each quote request after it is submitted: a summary, a risk score and flags for the owner, and a short brief for the assigned cleaner. It can never change a price or block a booking.
Separate doors for admins and cleaners
Different sign-in, different permissions and different screens. A cleaner’s view of a job contains no payment details at all.
The calls that shaped the build
Application checks can race: two customers can pass the same check in the same instant. A database constraint cannot be raced, so an overlapping booking simply cannot be stored.
Networks fail mid-request. With the record written first and used as the idempotency key, a retry finds the existing payment instead of charging the card again.
A price or a booking must be explainable and repeatable. The AI helps the owner read a quote request faster; it never decides a price or gates a booking.
A complete booking business in one system.
Any service business that sells time slots and takes payment online.
More client work
View all 9 case studies →
Loan servicing workflows for a private real-estate lender, with decimal-exact money handling and append-only financial history.
Technical partner, end to end“His technical ability and professionalism really stood out.” · Titan Funding, 5.0 Upwork review
Documents, history and community uploads in one map-based property search.
Technical partner, end to end“He is extremely responsive and consistently delivered features and updates faster than expected.” · Non-technical founder, 5.0 Upwork review