claudepersonal_client:kym-booking-system4761 tok
<!-- GSD:project-start source:PROJECT.md --> ## Project **The Happy Cat — Booking System** A booking, quote, and calendar-sync system for **The Happy Cat**, a UK cat-sitting sole trader (Kym). Customers self-serve a booking request via a public form; the operator triages requests in an admin dashboard; accepted bookings auto-sync to her iCloud calendar via CalDAV and trigger a customer confirmation email with bank details and a calendar download. Built on Next.js 15 + Cloudflare Workers (OpenNext) + D1 + Drizzle + iron-session + Resend + tsdav. **Core Value:** The customer can submit a booking that lands in Kym's inbox and her iCloud calendar within seconds of her tapping "Accept" — without her having to manage state, retype dates, or maintain a separate spreadsheet. Everything else (CRM, settings, retention, audit) is in service of that primary loop. ### Constraints - **Runtime**: Cloudflare Workers (OpenNext-adapted Next.js 15) — no Node-only APIs at runtime, PBKDF2 capped at 100k iterations. - **Storage**: single Cloudflare D1 (SQLite). Drizzle migrations only. - **Email**: Resend, single sender domain. No webhook/bounce handling. - **Calendar**: Apple iCloud via tsdav (CalDAV, Basic auth with app-specific password). - **Stack lock-in**: pnpm 10, Node 22 LTS. No server actions; every mutation is a REST POST under `src/app/api/`. - **Auth model**: iron-session cookie + PBKDF2 + per-IP rate-limit + email-code 2FA. **No TOTP/ authenticator-app 2FA** — explicitly declined by Kym during the walkthrough call. - **Deploy boundary (until M3)**: All M2 work deploys to …
/home/zach/development/personal_clients/kym-booking-system/CLAUDE.md