A local services marketplace for middle-class India — plumbers, electricians, cleaners, carpenters — built around one idea: the price is agreed before work starts, and neither side can change it alone.
Three documents follow. The product as the user experiences it, how it's built, and what it costs.
All 24 steps from first install to money paid, on two phones at once — the customer's and the worker's, moving together. Customer signup, worker signup, the booking, and the money moment. Press Play and watch it run.
Open the walkthrough →The stack, the system map, and the data model. Three steppable sequence diagrams for the flows that carry the product: dispatch with timeouts, the append-only money ledger, and guaranteed notification delivery. Plus what we deliberately don't use.
Open the architecture →Setup cost, monthly running cost line by line, and how it scales from 300 to 10,000 bookings a month. Every figure built up from vendor list prices, with the assumptions listed so any of them can be challenged.
Open the cost model →It's the apartment WhatsApp group, the watchman, and the neighbour who "knows a guy." That channel is free, instant and socially trusted. Beat only Urban Company and you've built a worse Urban Company; beat the WhatsApp group and you have a business — and today online penetration is under 1% of the total home-services market.
The customer's fear is "he'll inflate the price once he sees the job." The worker's fear is "she'll haggle me down after the work is done, or not pay at all." Those look like two problems needing two features. They're one problem needing one mechanism.
Agreed on site, before work starts, itemised and timestamped. The worker's labour rates are prefilled from the rate card he published publicly — he can't invent a number, and going above his own rate shows the customer an amber flag.
Her screen reads "this cannot change unless you approve it." His reads "she cannot reduce this — you have it in writing." One database record, both fears answered.
A change request, never an edit: photo, reason, old total struck through against new. Declining leaves the original agreement intact and payable. Nobody is punished for the pipe being rusted.