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.

Request a demoAvailable now

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

    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

    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

    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

    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

    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

    The agreement is built from the accepted proposal and signed online. No printing, no attachments, no chasing.

  • Reminders and review asks

    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

    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

    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

    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

    One private page per customer for files, invoices and status, carrying your brand rather than ours.

  • Follow-ups that run without you

    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

    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

    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

    Nightly rollups attribute leads and revenue back to the source that produced them, first touch and last. Switched on per workspace.

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

    A short survey after the work, feeding the review ask so the ask goes to everyone and the rating decides where it points.

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.

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.

Request a demo