A booking link people outside your company can use, availability that is actually correct, and a confirmed appointment that lands in your calendar with a proper invite. Running on the same people and companies every other app in the workspace uses.
Scheduling is sold as its own product, so it arrives knowing your free time and nothing else. It has never heard of the customer, the deal, the project or the person who owns the relationship, and it cannot be told, because those live somewhere it has no reach into.
So the appointment happens and the record does not move. Somebody retypes it later, or nobody does.
Mornings and afternoons on a weekday, a short Friday, nothing at the weekend, and the days you are closed. Two windows a day is the ordinary case and it is the one most tools make you fake with a second link.
A holiday is not the absence of a rule, it is a rule that says closed. That distinction is why exceptions exist here rather than being expressed as a gap you hope nobody books into.
None of this is visible when it works, which is exactly why it is worth saying. Every one of these is a real defect in something you have used.
Ten minutes either side of a meeting means ten minutes kept clear around the existing one. It does not quietly shorten the half hour the visitor was offered, which is the naive implementation and the annoying one.
Days are walked in the page’s own timezone rather than by dividing the year into 24-hour blocks, so the day the clocks move neither gains nor loses an hour of availability. A time inside the spring gap is pushed out of it, and an ambiguous autumn time takes the first pass through the repeated hour.
A meeting that ends at 10:00 does not block 10:00. Touching is not overlapping, and treating it as such is how a calendar loses an hour a day to arithmetic.
A requested length has to be one the page offers. Asking for one it does not is refused rather than clamped to the nearest, because a silent clamp is a booking neither side agreed to.
Appointments carry how they show, and the booking page reads it. A focus block marked out of office closes the morning. A lunch marked free does not, because you are willing to move it.
Every confirmed booking becomes one of these. The visitor is added as an accepted guest, because they already answered by clicking, and cancelling the booking cancels the appointment without any code in between.
A stranger on the public internet is asking to put something in your calendar. Every step here exists because of that sentence.
The page shows the owner’s hours in the visitor’s own timezone, changeable on the page, because somebody booking from a hotel room is not in their laptop’s zone.
A database lock on that page and that instant, re-checked inside the lock, with a unique constraint behind it. Two people clicking the same slot at the same moment get one booking and one honest refusal.
The link is single-use, hashed at rest and good for a day. This is the anti-abuse measure: it costs a spammer a working mailbox per booking, and it means typing somebody else’s address cannot put a meeting in their calendar.
In the calendar the page targets, or the owner’s default. Every confirmed booking lands somewhere rather than depending on a field somebody remembered to set.
A second mail carrying invite.ics as both a calendar part and an attachment, so Outlook and Gmail draw the accept buttons and every other client can still open it. Stable identifier, so a later change updates the entry instead of adding a second one.
The owner is deliberately not mailed. It is in their calendar, which is where they were going to look.
You see a calendar if you own it or its owner shared it with you. You see an appointment if you can see the calendar it is in, or you are a guest on it. Sharing is read-only by construction, so it cannot quietly become co-authoring.
There is no administrative bypass. Not for the workspace admin, not for platform staff, not for us. We should say what that costs rather than only what it buys: an admin cannot repair a colleague’s broken appointment, and nobody can answer “why is that slot blocked” on somebody else’s behalf.
It is enforced in the one place every read goes through, which is why a count cannot leak what a list would not show. A missing appointment answers not found rather than forbidden, because forbidden is an answer.
Subscribe to the published address of an Outlook, Google or Apple calendar and its appointments arrive as real busy time, so the booking page stops offering the hour of your Monday standup. It is polled every quarter of an hour, expanded in our own process, and no account is connected and nothing leaves the platform.
A calendar of birthdays and public holidays does not make you unbookable for a year, because a feed that marks its entries as free is read as free. And a feed too large to read whole is refused rather than truncated, because a short calendar looks like free time.
This is one way and says so. Writing back into somebody else’s calendar needs a connection, a credential and a different failure model, and that work is on the roadmap rather than half-done here.
Microsoft 365 and Google, in both directions, are in build. See the roadmap →
Said here rather than discovered later. A page that lists only what works is a page you cannot plan against.
Feeds come in. Nothing goes out. A meeting link is a field you paste rather than one we mint, because a Meet link cannot exist without creating the Google event, and that is a connection we have not built yet.
Once it is confirmed, changing it is a conversation. Cancelling and rescheduling from both sides is scoped and next, and until it ships this page will not pretend otherwise.
Busy is computed from that person’s calendar. There is no round-robin, no team page and no collective availability, so a shared inbox for a support rota is not what this is.
Bring the hours you actually work and the calendar you already keep, and we will set up a page you can send to a customer the same afternoon.
About 30 minutes, on a real company platform