Ready Labs
How later pieces plug in
V1 keeps the booking loop local. These are the intended seams, not live connections.
After OAuth for the business calendar, map `PendingSlot.windowStart` / `windowEnd` to an event with status `tentative` and extended property `afterhoursBookingId`.
Confirm in the inbox should PATCH the event to `confirmed`. Decline should cancel it. Use a Google service account or Calendar API user tokens stored per location — not in this repo.
Call the Cal.com booking API with the captured attendee and a slot from their availability endpoint. Store `calBookingId` next to `slotId`. Incoming Cal.com webhooks can flip inbox status if a customer later reschedules on Cal.
Buy a number, set Voice URL to `https://afterhoursbooker.com/api/twilio/voice` and Messaging URL to `/api/twilio/sms`. Verify `X-Twilio-Signature` with `TWILIO_AUTH_TOKEN` before calling `ingestTwilioEvent`. Gather speech or keypad input, then return the existing TwiML helper.
Create a monthly test Price for $29 in the Stripe dashboard and paste the `price_` id into `STRIPE_STARTER_PRICE_ID`. Use test keys only.