2026. TypeScript, Hono, PostgreSQL, Boulevard Admin GraphQL API, Zod, React, Tailwind, Railway, Vitest

Salon Schedule BTB Manager

Calendar automation for a multi-location salon franchise that places and clears buffer blocks across staff schedules in real time through the Boulevard API. Built with TypeScript, Hono, Postgres, and React, with webhook-driven re-planning, owner-facing rules, and a shadow mode that previews every change before it goes live.

Screenshot of Salon Schedule BTB Manager

Problem

Hello Sugar is a franchise of waxing and sugaring salons that run their schedules on Boulevard. To keep each esthetician's day compact and bookable, the company uses "block-til-busy" (BTB) buffer blocks: short holds at the start or end of a shift that keep stray appointments from fragmenting the calendar, and that get released as the day fills up. Placing and clearing those blocks by hand across dozens of locations and hundreds of staff was slow and inconsistent, and the first automation attempt had made it worse. It had no login, a daily job that silently did nothing, no concept of timezones, no per-location rules, and a habit of adding and removing the same block over and over. Franchise owners could not safely turn it on for their own salons, and corporate could not see what it was doing.

What I built

I rebuilt the system from the ground up as a TypeScript service on Railway: a Hono API, a Postgres-backed job queue, a timezone-aware Boulevard GraphQL client, and a React dashboard where owners sign in with Google and manage only their own locations. Boulevard webhooks trigger a re-plan of the affected day within a minute of any appointment or timeblock change, a nightly job keeps a rolling planning window, and owners configure rules as plain sentences: tier sizes, minimum gaps, schedule locks that freeze a shift's edges a set number of hours before it starts, protected hours and days off, and a cleaning-block allowance. Safety was the core design constraint. Every calendar write passes through one gated module that checks the global mode, the location's opt-in, pause state, and block ownership, so the system can only ever remove blocks it created. A shadow mode runs the full planner and logs what it would do without touching Boulevard, which is how every location is validated before going live. The dashboard explains each decision in plain language, a Results page compares bookings and sales to the weeks before automation, and a small partner API lets an AI booking flow release a block when a client wants that slot.

Outcome

The rebuild went from design to shadow deployment in about a week and to its first live location ten days later. A month after launch it is running live at 23 locations, with zero failed Boulevard writes since the move to OAuth, handling roughly 2,000 calendar re-plans a day while using under half a percent of the API's rate allowance. Owners now opt their own salons in from the dashboard, see why each block was placed or removed, and get a weekly view of how their bookings have moved since automation started. The system is instrumented end to end, with health checks that post to Slack, an audit trail of every planned and executed action, and a test suite that guards the write path so no future change can bypass the gates.