Anticode Open builder

The booking calendar: current days, real dates and one booking per slot

Tick the booking calendar when you build and your page gets a booking form: a service, a choice of the coming days, a time, and the visitor's name, phone and email. The days refresh every time the page is served, dates in the past or more than 120 days ahead are refused, and once a slot is taken nobody else can book it.

Updated · By the Anticode team

The two problems a simple booking form has

A booking form on a static page usually fails in one of two ways. Either the dates were written when the page was built, so a month later it's offering last month's Tuesdays, or nothing stops two visitors picking the same 10:30 and both getting a cheerful thank-you. Fixing either normally means a booking plugin and its scripts. Anticode's booking calendar solves both on the server, so the page itself still ships with no JavaScript at all.

What visitors see

  • Service. A drop-down of the services or items listed on your page, so the booking says what it's for.
  • Day. The next six days, starting tomorrow and skipping Mondays, shown as short labels like "Wed 21".
  • Time. Six fixed times: 09:00, 10:30, 12:00, 14:30, 16:00 and 17:30.
  • Name, phone and email, all required, with the phone checked for a sensible format.
  • A Request this time button and a line saying the details are only used for this booking.

Days and times are large tap targets with a visible focus ring, so the form works by keyboard and on a phone. The section can be moved like any other in the visual editor, and its heading and button text can be changed in place.

Why the days are always current

The page is static HTML, but when a published site is served, Anticode rewrites the day choices on the way out to the coming days. That works on sites published long ago as well as new ones. Days are counted in UTC and a served page is cached for up to a minute, so around midnight the switch to the next day can lag slightly.

How double bookings are stopped

When the form is sent, the server first checks the date is real (no 31 February), no earlier than yesterday in UTC so no visitor's time zone is turned away, and no more than 120 days ahead. Then it checks whether that service, day and time is already booked. If it is, the visitor sees "That time was just taken" and is asked to go back and pick another. The save itself is conditional on the slot being free, so even two visitors pressing the button at the same moment can't both succeed. This is what makes it a booking calendar that prevents double booking rather than a contact form with dates on it.

Accepted bookings are sealed and stored like other form submissions, appear in your dashboard, and can be emailed to you or sent to Slack, Sheets or another connector.

What it doesn't do

Booking features Anticode doesn't have today
Not includedWhat to do instead
Deposits or payment at bookingAdd a payment link to a dedicated button, or take payment on arrival
Calendar sync (Google, Outlook, iCal)Send bookings to Google Sheets or Slack and copy them into your calendar
Staff rotas or choosing a personPut the person in the service name, such as "Cut with Sam"
Your real opening hours and capacityThe days and times are a standard set; review each request and confirm or decline it yourself
Confirmation emails to customersReply from your own email, or use the Next.js export, which sends confirmations through Resend

Because every submission is a request, it's worth checking the page's wording matches that. The generated booking page can include an FAQ about changing a booking from a confirmation email; if you don't send one, edit or remove that answer. For a guide that covers other approaches too, see adding a booking calendar to a website, and for appointment-heavy businesses the booking site use case.

Questions people ask

Can two people book the same time?

No. A slot is one service on one day at one time. Once it's booked, later requests for it are refused, even if they arrive at the same instant.

Can customers book more than six days ahead?

The form offers the next six days, refreshed every time the page is served. The server would accept a date up to 120 days ahead, and refuses anything later or in the past.

Does the calendar need JavaScript?

No. It's a plain HTML form. The day list is refreshed on the server each time the page is served.

Can I take a deposit when someone books?

Not through the booking form. Anticode doesn't take deposits; you can link a separate pay button to a checkout link from your own provider.