Events

Bookings and deposits for an event venue

An event venue with three rooms takes enquiries, holds a date for seven days, and confirms the booking when a deposit is paid. The calendar shows holds and confirmations differently, and a held date is released automatically when the seven days pass.

Automatically generated draft

Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.

Section 01 · What has to work

The system must successfully take an enquiry for a specific room and date, create a temporary hold, and either confirm it upon payment or automatically release the date after seven days.

Section 03 · Screens

Every screen, and what it is for.

  • ›Public Calendar — A customer sees room availability and makes an enquiry; loading date availability must be instant.
  • ›Admin Calendar — Staff view all holds and confirmed bookings across all rooms; switching between room views must be instant.
  • ›Booking Details — Staff review an enquiry or booking to manage it; loading customer information must be instant.
  • ›Deposit Payment — A customer pays the deposit via a secure link; the payment form must load instantly.

Anything not on this list is not in version one. That is what keeps a fixed price fixed.

Section 04 · The data model

What it stores, and who can read a row.

Room

id uuid, name text

Access · All users, including anonymous, can read all rows.

Booking

id uuid, room_id uuid, status enum('enquiry', 'held', 'confirmed', 'expired', 'cancelled'), event_date date, customer_name text, customer_email text, hold_expires_at timestamptz, deposit_amount numeric(10,2), payment_id uuid, secure_link_token text

Access · Staff can read all rows; anyone can read via a valid token.

User

id uuid, email text, hashed_password text

Access · A user can read their own row.

Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.

Section 05 · States

enquiry → held → confirmed | expired

Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.

Section 06 · Where this breaks

What bites products like this one.

Two customers could book the same room and date simultaneously, before the system can lock the resource.

Use a database-level exclusion constraint on the booking table to prevent overlapping date ranges for the same room.

The background job that releases expired holds might fail, leaving rooms blocked indefinitely.

Implement monitoring and alerting for the job scheduler, plus a manual override button for staff to release any stuck hold.

The 7-day hold expires at the wrong time due to timezone ambiguity between the customer, venue, and server.

Store all timestamps as timestamptz (UTC) and define the venue's local timezone as a non-negotiable system setting.

Section 08 · Deliberately left out

What version one does not do.

  • ×Automated hold creation — Staff manually approve an enquiry to create a hold, instead of the system doing it automatically. — Allows for human review of initial enquiries, de-risking early operations. Automate when booking volume makes this a bottleneck.
  • ×Customer accounts — Customers manage bookings via secure, single-use links sent to their email instead of a login portal. — Vastly reduces build time and security scope. Add customer accounts when managing multiple or repeat bookings becomes a core need.

This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.

Still open

What we would ask before quoting.

  • Does an enquiry for an available date automatically create a hold, or must a staff member approve it first?
  • Is a booking for a full calendar day, or for a specific start and end time on that day?
  • How is the deposit amount calculated? Is it a fixed fee, a percentage, or does it vary per booking?

Your product, not this one

Get this written for what you are actually building.

Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.

Next step

Find out if your idea fits in 10 working days.

Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.

NDA available on request