Industries/Service business
Take the booking, hold the deposit, and let the paperwork follow.
Booking pages that collect a deposit before the slot is held, then proposals, contracts, invoices and review asks that run on their own.
What ships today
Everything below is running in production
Every line here describes code that runs for a paying workspace right now. Anything designed but not built is in the second list, and it says so.
Booking pages that take a deposit
Live
A page per service, priced and bookable. Times come from your real weekly hours and the calendar you connect; the deposit is collected through Stripe before the slot is held.
Double-booking refused by the database
Live
Two people checking out for the same slot at the same instant is settled by a Postgres exclusion constraint, not by application code that hopes to win the race. Buffers are frozen onto each booking, so changing a setting never moves one you already have.
Google Calendar, both directions
Live
Busy times are read from the calendar you connect and confirmed bookings are written back to it. If the calendar cannot be read, no times are offered — never the wrong ones.
Booker and forms on your own site
Live
One script tag embeds the booker in your site, and bookings land in the pipeline tagged with the campaign they came from. Lead forms are switched on per workspace.
Proposals accepted online
Live
The customer picks packages and add-ons on a branded page and accepts. Acceptance is what generates the contract and the deposit link.
Contracts signed in the browser
Live
The agreement is built from the accepted proposal and signed online. No printing, no attachments, no chasing.
Reminders and review asks
Live
Appointment reminders, payment nudges and a review ask after the job — each one deduplicated so a retry never sends twice, each one logged.
Text reminders on your own number
Live
Bring a Twilio number and reminders go out by text, with consent recorded per contact and STOP honoured. A phone number on a booking is not treated as consent.
Pipeline and CRM
Live
Every enquiry in one board from first contact to won, with the contact, the history and the source attached to it.
Invoices and Stripe pay links
Live
Deposits and balances become pay links on their own. Payment is confirmed by Stripe's webhook, not by the customer's browser reaching a success page.
Client portal under your name
Live
One private page per customer for files, invoices and status, carrying your brand rather than ours.
Follow-ups that run without you
Live
Deterministic rules and templates on a nightly engine: a lead that has gone quiet is nudged, an unanswered proposal expires on its own, every send deduplicated so a retry never mails twice. No AI, so the wording never drifts and the cost never scales with volume.
Unsubscribe, consent and suppression
Live
Every commercial email carries a working unsubscribe link and your postal address. Consent is recorded per contact and a suppression is honoured everywhere.
Reports that reconcile
Live
Revenue and activity over a period you choose, bucketed in your workspace's own timezone and shown in its own currency.
Where the work comes from
Live
Nightly rollups attribute leads and revenue back to the source that produced them, first touch and last. Switched on per workspace.
Not built yet
Designed, not shipped
Listed because it is on the build order, not because it is nearly done. None of it is available today and nothing above depends on it.
Post-job surveys
In build
A short survey after the work, feeding the review ask so the ask goes to everyone and the rating decides where it points.
Questions
What buyers ask
- Can I take a deposit at the moment someone books?
- Yes. The slot is held while the customer is in Stripe checkout and released if they do not pay. Confirmation comes from Stripe's webhook rather than the browser landing on a success page, so someone who pays and closes the tab is still confirmed.
- What stops it double-booking me?
- A Postgres exclusion constraint over the booked range, including the buffers around it. Two simultaneous checkouts for the same slot cannot both win; the loser is told the time went. Group sessions are one booking with many attendees, not overlapping rows.
- Does it work with my Google Calendar?
- Yes, in both directions: busy times are read from the calendar you connect, and confirmed bookings are written to it. If that read fails, the booker offers no times rather than guessing — an unreadable calendar and an empty one must never produce the same answer.
- Can the booker live on my own website?
- Yes. One script tag embeds it, and it runs with no cookies and no local storage because a page framed inside someone else's site does not reliably get either.
- Do you use AI to write the follow-ups?
- No. Every automation is a rule and a template. The same input produces the same message every time, nothing drifts between sends, and the cost does not grow with your volume.
- Does it handle daylight saving and other timezones?
- Weekly hours are stored as wall-clock times against a named timezone rather than as instants, so slots do not shift twice a year. Money and dates are formatted in each workspace's own currency and timezone.
Next step
See it running against service businesses like yours
A working walkthrough of the pipeline, the booker, the deposit and the reports, on real screens rather than slides.
Also built for
- Insurance agencyIn build
- Warranty and service contractsIn build