Public booking page + iframe embed #17
Notifications
Due Date
No due date set.
Blocks
Depends on
#25 Decommission Easy!Appointments + n8n booking-sync
BPPP/smb-online
#16 Availability engine + booking API (create/cancel/reschedule)
BPPP/smb-online
Reference: BPPP/smb-online#17
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#14
What to build
The actual public-facing booking page a customer sees, embedded via iframe into a client's landing
page — the first ticket where booking is demoable in a browser rather than only verifiable via
tests.
/book/<slug>page: htmx / light JS slot grid, listing the client's active services, thenavailable slots (from ticket 2's engine) for the chosen service, then a form to submit
name/contact and complete the booking.
ticket 4's concern, but the on-page confirmation itself is this ticket's).
the embedding landing page can auto-fit the iframe (no inner scrollbar) — mirroring
deploy/booking/booking_layout.js's approach. Brand color theming via a CSS variable or queryparam, mirroring
deploy/booking/frontend.css's--bs-primarypattern.booking form (hidden field that must stay empty — filled-in submissions are silently rejected).
concurrency case surfaced in the UI).
Acceptance criteria
/book/<slug>for a seeded test client, pick a service, pick anavailable slot, submit their details, and see a confirmation screen.
itself without an inner scrollbar.
obvious "bot detected" tell to a scripted client).
shows a clear "that slot was just taken, please pick another" message, not a raw error.
Blocked by
Shipped in commit
b895663("Public booking page + iframe embed (#17)"). Closing — this was already implemented, just never closed in the tracker.