v0.9.02026-05-14
- New routing mode: Priority + daily cap. Routes leads to the lowest-priority-number team that still has booking capacity, and falls back to the next team once the daily limit is hit.
- Each team now has a Priority and a Daily booking limit (blank = no cap), editable from the Teams tab.
- Capacity is measured by confirmed bookings (booking_completed events) for the current day — not pageviews or assignments.
v0.8.02026-05-14
- Routing modes: choose between Least assigned (weighted-fair), Round robin, and Weighted random in the router Settings tab. Assignment logic now respects the selected mode.
v0.7.12026-05-14
- Added a Settings tab on each router page so you can rename a router and toggle it active/inactive.
v0.7.02026-05-14
- Added secure sign-in: dashboard, router config, report and changelog pages now require login. Public /embed and /book pages remain open.
- Sign-in supports email/password and Google. Signups are invite-only and password breach (HIBP) checks are enabled.
- Added a profiles table with auto-create on signup and RLS so users can only edit their own profile.
- Added a Sign out button in the dashboard header.
v0.6.22026-05-14
- Embed shows a spinner + 'Loading calendar…' overlay until the GHL iframe finishes loading, so visitors don't see a blank area during the initial load.
v0.6.12026-05-14
- Removed the 'Open in new tab' link below the embedded calendar.
v0.6.02026-05-14
- Embed loads ~3-5s faster: visitor id is now minted on the parent page and passed to the iframe via ?v=, so team assignment runs during SSR and the GHL calendar iframe is in the initial HTML — eliminates a full client round-trip before the calendar starts loading.
- Added preconnect hints to GHL domains (api.leadconnectorhq.com, link.msgsndr.com) so the TLS handshake overlaps with the embed HTML response.
- embed.js cache bumped from 5 minutes to 1 hour (24h on the edge).
v0.5.02026-05-14
- Added Changelog page at /changelog — every future iteration gets a version bump and entry here.
- Fixed 'Rendered more hooks' crash on the router detail page caused by hooks declared after early returns.
v0.4.02026-05-14
- Booking tracking: embed page now listens for GHL postMessage events and fires booking_completed (heuristic match, logs raw payloads to console for refinement).
- Embed iframe no longer shows an inner scrollbar — added GHL form_embed.js resize helper and forwards content height to the parent.
- Embed and booking pages now identify visitors by anonymous visitor id (localStorage) instead of email — same visitor keeps the same calendar.
- Router config: percentage allocation per team for weighted routing.