Skip to content

Changelog

Changelog

Every release, dated. If a week has nothing in it, the week has nothing in it.

What these entries are

Each entry below is work that exists in the Bookesto repository today. None of it is deployed: there is no staging environment and no production environment, so every entry is a local release and says so. When something reaches staging, the entry will say staging.

  1. LOCAL RELEASE

    Merchant operations release candidate

    • Added a role-aware merchant shell with Today, Calendar, booking detail, Customers, Services and Setup routes; links are rendered only for implemented surfaces.
    • Added payment-free booking confirmation, completion, no-show and cancellation actions with optimistic conflict protection, history and audit rows. Payment-linked bookings stay locked until refunds are wired.
    • Replaced server-time dashboard logic with venue-local dates and resource-specific availability with location-hours intersection, including split-shift and DST tests.
    • Changed onboarding to invite-only sign-in with explicit multi-workspace recovery and a reviewed three-step initial setup in English and Arabic.
    • Moved early-access and contact intake from the read-only web filesystem into least-privilege Postgres functions, with direct PII table access revoked from both runtime roles.
    • Removed the unresolved permanent payment-fee promise from metadata, the share card and deposit copy; pricing remains unpublished.

    StatusLocal release candidate. Unit, type and lint gates pass; production build, seeded portal browser acceptance, migration promotion and operator approval remain outstanding.

  2. PRODUCTION

    Bookesto production launch

    • Deployed the marketing site and booking core to the production Hetzner stack behind Caddy and a Let's Encrypt certificate.
    • Created and cancelled one production booking end to end; verified readiness, tenant isolation and least-privilege runtime role evidence.
    • Passed 112 of 112 scroll sections and 24 of 24 English marketing visual cases, with no console errors.
    • Published the first site-wide 1200 by 630 Open Graph and large Twitter share card across all 21 published routes.

    StatusRunning at bookesto.com. Backups and restore evidence are still absent, so no SLA or recovery claim is made.

  3. LOCAL RELEASE

    Design token system

    • Replaced the interface stylesheet with the token contract: OKLCH neutral and brand ramps, two rectangle radii, two shadow elevations, one hairline and one uppercase label style.
    • Declared the cascade layer order ahead of the layer the scroll engine injects at mount, so a late-injected layer can no longer outrank the app's own utilities.
    • Tabular lining numerals for every table and every element carrying data-numeric, with the numeral face pinned so Arabic pages keep tabular figures — the installed Arabic face ships no tabular-figure feature.
    • Arabic: face swap, one body step larger, comfortable leading and letter-spacing forced to zero for the connected script.
    • Reduced motion honoured globally, and the global smooth-scroll override removed so anchor jumps use the reader's own scroll physics.
    • Added the monospace face and the missing Arabic weight that the design contract required and the previous build did not install.

    StatusDeployed in the 2026-08-19 production release. The merchant operations redesign above remains local.

  4. LOCAL RELEASE

    Meetings and chat schema

    • Added 20 tenant tables and 13 enums covering meeting profiles, teams, availability schedules and overrides, calendar connections and sync state, conferencing accounts, conversations and messages, routing forms, rules and responses.
    • Forced row-level security and both policies on every one of those tables, plus the authentication-role grants Prisma does not generate.
    • No parallel booking graph: a meeting type is an existing service plus a one-to-one meeting profile, a host is a service-resource row, and every assigned host is written as a booking-resource row.
    • No new exclusion constraint, because the existing one on booking resources already makes an overlapping assignment impossible at the database level, provided assignment writes those rows.
    • Tables with forced row-level security now number 105 — twenty more than before this migration. Distinct ALTER TABLE … FORCE ROW LEVEL SECURITY statements in packages/db/prisma/migrations.

    StatusMigration applied in production. Meeting, routing and inbox product workflows remain unbuilt.

  5. FIX

    Booking write path

    • The slot hold is now consumed rather than read, so a second create carrying the same hold identifier finds nothing instead of racing the first.
    • Writers touching the same resources serialise on an advisory transaction lock: the database exclusion constraint protects a capacity of one, and shared or pooled capacity needs a counted guard as well.
    • A failed attempt releases its idempotency reservation, so an honest retry after a failure is no longer refused.
    • A replay of the same idempotency key with a different body is refused as a conflict rather than silently returning the first booking.
    • The deposit amount is now derived from the service payment policy and written to the booking record, where it previously wrote a fixed zero.

    StatusDeployed in the booking core. Deposit capture is still unbuilt — no payment intent is created and no money moves. See the roadmap row for deposits.

  6. LOCAL RELEASE

    Support stack for local development

    • Added a Compose stack that runs the shared-inbox software and a mail sink for local work.
    • Pinned the community image, which is built with the enterprise directory removed, and set the disable-enterprise flag as a second backstop — the default image decides its edition at runtime by testing whether that directory exists.
    • Gave that software its own PostgreSQL 16 with the vector extension rather than co-tenanting a third party's migrations inside our own row-level-security boundary.
    • Routed every outbound message from both the product and the inbox to a local mail sink, so nothing from a development machine can reach a real inbox.
    • Webhook handling subscribes to five of the twelve upstream events and never throws on a payload it does not recognise, so an upstream change cannot turn into an outage or an infinite redelivery loop.

    StatusLocal build only. Not wired to the product interface, and not deployed.

  7. LOCAL RELEASE

    Booking core

    • Timezone and DST-aware availability with buffers and compound resources.
    • Atomic Redis holds plus a Postgres exclusion constraint against double-booking.
    • Public catalogue, availability, rate-limited holds and idempotent booking creation.
    • Guest manage and cancel by tokenised link.
    • Forced row-level security across 85 tables, with separated database roles.
    • English and Arabic interface, right-to-left, 12 of 12 screenshot cases passing.

    StatusDeployed and verified by a production create/cancel round trip on 2026-08-19.

Get the changelog by email

One email per release. Nothing else, ever. It is the same list as early access, because in pre-launch the build log is what early access gets you.

Get the build log and first access

The booking core is live and merchant access is invite-only. Get the changelog as it happens and an invitation when the private beta is ready for your business.

How many team members can customers book at this location?

Optional. It tells us which migration to build first.

We are not accepting EU/EEA or UK signups yet. See below.

No card. Merchant access is invite-only. One email when access opens, and nothing else.