5ed3d2bc5f
First-party booking system on top of Stalwart calendars (no third-party scheduling dependency). Hosts expose public booking pages; visitors pick a slot computed from the host's live Stalwart free/busy, and confirming writes the event to the host's calendar and sends a dezky-branded confirmation with an .ics. platform-api (services/platform-api/src/scheduling): - Schemas: Host, StalwartCredential (AES-256-GCM at rest), AvailabilitySchedule, EventType, Booking, SlotLock (unique (hostId,startUtc) + TTL). - StalwartCalendarModule: JMAP gateway (free/busy via Principal/getAvailability, event create/delete, scheduleAgent=client) + on-behalf app-password provisioning. CredentialCipher for at-rest encryption. - DST-correct slot engine (Luxon) with unit tests; two-layer double-booking guard (atomic SlotLock + live free/busy re-check). - Booking confirm/cancel/reschedule, branded email + .ics via JMAP submission, self-service manage tokens. /api/v1 public + tenant-gated admin routes, per-IP rate limiting. apps/booking: standalone public, whitelabel booking app (booking.dezky.eu) — path-based tenant resolution, per-tenant brand colour, booking + manage flows. apps/portal: admin scheduling page (hosts, event types, availability, bookings with edit/delete + admin cancel/reschedule) and proxy routes. infra: booking dev service in docker-compose; scheduling env vars.
28 lines
738 B
JSON
28 lines
738 B
JSON
{
|
|
"name": "@dezky/booking",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"description": "dezky Scheduling — public booking app (booking.dezky.eu). Unauthenticated, whitelabel per tenant.",
|
|
"scripts": {
|
|
"dev": "TMPDIR=/tmp nuxt dev --host 0.0.0.0 --port 3000",
|
|
"build": "nuxt build",
|
|
"start": "node .output/server/index.mjs",
|
|
"generate": "nuxt generate",
|
|
"preview": "nuxt preview",
|
|
"typecheck": "nuxt typecheck"
|
|
},
|
|
"dependencies": {
|
|
"luxon": "^3.5.0",
|
|
"nuxt": "^4.4.7",
|
|
"vue": "^3.5.0",
|
|
"vue-router": "^4.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/luxon": "^3.4.2",
|
|
"@types/node": "^20.0.0",
|
|
"typescript": "^5.6.0",
|
|
"vue-tsc": "^3.2.6"
|
|
},
|
|
"packageManager": "pnpm@9.12.0"
|
|
}
|