A cook at a stove in a dark kitchen, one warm pool of light
Product

One site.
Four working parts.

Forms, bookings, a shop and visitor numbers. Not add-ons and not embeds from somewhere else. Four modules with their own settings, their own records and their own widget on the page.

09:12Enquiry stored, and emailed to you
The idea

The site is the front of house.

Most website builders stop at the brochure and sell you the rest twice. Here the counter, the calendar and the till are the same system as the page they sit on.

Hands repairing a linen garment by needle and thread
Forms

A question arrives,
already checked.

Build the fields on the page as part of the design. Every rule you set is checked in the browser while somebody types, and again on the server when it lands.

RulesRequired, a pattern, a minimum. An unparseable pattern fails open rather than rejecting everybody.
FilesUploads are stored against the submission and pruned on a schedule, so an inbox never becomes a disk problem.
SpamA hidden trap catches the simple bots and Turnstile handles the rest. Nobody has to identify a bus.
DeliverySubmissions are always stored. Email on top of that is a switch.
Bookings and tickets

A table, a room,
or an hour with you.

Three modes, because they are not the same problem. A restaurant allocates a table from a party size, a rental counts nights, an appointment needs a named person to be free.

RestaurantTime slots with a party size and a duration, allocated across your tables.
RentalDate ranges with nightly pricing, a minimum stay, and check in and check out times.
AppointmentA duration against a named person, with buffers so the day is not booked back to back.
TicketsAn event has occurrences. Each one sells tiers into the same cart your products use, and the code on the ticket scans at the door.
A barber mid cut, comb and scissors under a warm lamp
An empty talk venue with pale timber seating angled toward a lit stage
Availability

The seat count is fetched
when somebody asks.

Never baked into the cached page, so nothing on a published site ever claims a seat is free when it is not.

A ceramicist trimming a bowl on the wheel by a studio window
Selling online

Three kinds of product,
one cart.

Something you post, something you download, and something that renews. One catalogue, and card details never touch your site.

PhysicalStock, shipping, and an order that becomes a job to pack.
DigitalThe file is delivered from private storage once the payment clears.
SubscriptionActivation and renewal as their own lifecycle, with the transitions that implies.
CheckoutHosted by Mollie or Stripe. What comes back is a webhook the platform reconciles against the order.
Visitor numbers

Numbers without
a cookie banner.

A visitor is recognised for the day by hashing the request against a secret that rotates. Then that ability is simply gone. Nothing is stored on the visitor and nothing is sent to anybody else, so there is nothing to ask consent for.

PagesViews and visitors, per page, over a period you choose.
SourcesReferrers and campaign parameters, parsed.
DevicesBrowser, operating system and screen class.
LocationResolved from the address to a country, then discarded.
RetentionRolled up on a schedule, and pruned.
Stored on the visitor: nothing
One inbox

Three modules.
One place to look.

Enquiries, bookings and orders arrive in the same list, newest first. Every row still opens the real record.

01

Merged per site

Three kinds of record in one feed, filtered and searchable.
02

Read, then archived

Read state is tracked separately, so marking something read does not make it vanish.
03

Straight to the source

A booking row opens the booking. An order row opens the order, with its items and its payment.
Design

A design system,
not a pile of overrides.

Colour, space, type and radius are named tokens. Change the brand and every block that referenced a token follows.

01

Three colours in, a whole scale out

Heading, body, muted, borders, the inverse band and a readable version of your accent, all derived to meet contrast rather than set to a value that happens to pass.
02

Font slots bound to roles

Two weights of one family cost one request, which is how you get a real bold instead of a faked one.
03

Three widths, each one styled

Every element carries its own desktop, tablet and mobile styling. This site was composed at 390px, not collapsed into it.
04

Hover and focus, separately

A control that answers a mouse and ignores a keyboard is half a control.
Forms · Bookings · Tickets · Selling online · Visitor numbers · One inbox · Two languages · Your own domain · No cookie bannerForms · Bookings · Tickets · Selling online · Visitor numbers · One inbox · Two languages · Your own domain · No cookie banner
Start

Put a form on a page and send yourself a test.

It takes about five minutes and it is the fastest way to see the whole chain work.

A florist wrapping tulips in kraft paper on a steel counter