Booking

Let clients book you from your own website, and get a drafted quote before you even reply.

Arrival windows and capacity

You publish arrival windows, not exact appointment times, and you decide how many jobs fit in each.

Set which days you take work, what windows you offer, and each window's capacity. A window is a morning or an afternoon block; capacity is how many jobs fit inside it. Edit the starting pattern on the Availability page, under Booking in settings, before you share your page.

Trades promise a morning, not two o'clock sharp. Exact slots were rejected deliberately: one job that runs long would cascade into every promise after it. A window absorbs that.

What closes a window
Confirmed jobs, pending holds, blocks you added, and busy events from your connected Google Calendar all consume capacity. A customer only ever sees windows genuinely still open.

Blocks and time off

Block a day or a single window and it stops being bookable immediately.

Blocks are the manual override: the truck is in the shop Tuesday, you are away Friday afternoon. Block a whole day, or one window to keep the rest open, and note the reason so future you knows why.

Your calendar shows

  • Jobs
  • Pending holds
  • Blocks
  • Calendar busy time
  • Controls to block and unblock

Your public page shows

  • Open windows only

Both read the same underlying availability, so they can never contradict each other.

Google Calendar sync

Optional, and it runs both ways: your jobs appear there, your commitments close windows here.

Two directions
Confirmed jobs and pending holds are pushed to Google Calendar, holds marked tentative so you can tell them apart. In return, busy events already on your calendar block the matching TaskRel windows, so nobody books over an existing commitment.

The authorization is deliberately narrow, calendar events and nothing else, and is a separate grant from the Google Sheets sync, so connecting one never widens the other. If a hold is declined or expires, the tentative event is removed too.

Booking works without it. Without sync, TaskRel still tracks windows, jobs, holds and blocks; what you lose is protection against double-booking over commitments that live only in Google Calendar.

Your booking page

A public page carrying your branding, built phone-first, where a customer requests a window.

  1. ContactName and phone. Email optional; it gets them a written confirmation.
  2. ServiceFrom the services you offer.
  3. DetailsOne quick question, optional photos and a note.
  4. WindowA day and arrival window from your real availability.

Copy the page's link from Availability in settings. It works anywhere a link works: a button on your site, a social profile, your Google Business listing, or a text message. Your customer needs no account and no password.

Contact details come first on purpose. A visitor who wanders off halfway used to leave you nothing; captured up front, an abandoned booking still reaches you as a lead you can call. Email stays optional because requiring it is the single biggest reason people abandon a booking form.

No price ever appears on the public page. The quote is the price, and it reaches your customer only after you have reviewed and approved it, so nothing commits you to a number before you have seen the job.

Embedding it in your website

Copy one snippet from settings, paste it into your site, and the same booking page runs inside it.

It is designed on the assumption you can paste exactly one thing, which is all most website builders comfortably allow. Your customer never leaves your website to book. Being sent off to an unfamiliar brand mid-enquiry is a common reason people stop.

The embed is the same page and the same codepath, not a second one. When it detects it is embedded it drops its outer chrome so it reads as part of your site. Nothing behaves differently, so nothing can drift.

Intake questions

One quick question per service, written for the trade. An essay is never required.

Each service carries one multiple choice question, in plain language, chosen because it is the single answer that most changes the quote. Your customer taps an option rather than facing an empty box, then adds optional photos and an optional note.

A photo tells you more about a job than a paragraph, and asks nothing of a customer who would struggle to describe the problem in writing.

Holds and expiry

A request soft-holds the window for 48 hours, blocking other customers without committing you.

  1. RequestThe window is held; others see it unavailable.
  2. ApproveThe hold becomes a confirmed booking.
  3. Or declineThe window frees immediately.
  4. Or 48hThe hold expires and frees the window on its own.

Approving and declining

Every request waits for you. Nothing reaches your customer until you have approved it.

A new request emails you and appears in your in-app queue with a badge, showing the intake answers, the photos and the window asked for, reviewable from a phone between jobs. Declining frees the window straight away, and you can include a short message, which is often worth doing even when the answer is no.

Matching to your clients
New customers are matched against your client list by email and phone as the request arrives. An exact match links the booking to that client; anything less creates a fresh record rather than guessing. TaskRel never merges or edits an existing client on its own.

The approval gate is absolute: no draft, no price and no confirmation reaches your customer without you approving it. There is no automatic path around it.

From request to quote

A quote is drafted from the intake before you open the request, so approving is a review rather than a task.

By the time a request reaches your queue, the intake answers have already run through the same drafting pipeline the Quote Builder uses, in the same style for that service. If drafting was not possible, nothing is lost: you quote from the intake answers the ordinary way.

  1. Open the request and read the intake answers and photos.
  2. Edit the drafted quote until the numbers are yours.
  3. Approve. The hold becomes a confirmed booking and the quote goes out.

From there it continues exactly as a quote you wrote yourself: your customer approves, it converts to an invoice, and the work lands on your calendar as a job with its card. Booking adds nothing after approval; it feeds the front of the same line.

The draft is internal until you approve it. It exists only on your side, and no customer path can reach it. As everywhere else, the draft proposes and the server recalculates: AI never owns what a quote adds up to.