Dual vertical story

One booking core. Clinics + Hotels.

Northwind already ships everything a hotelier needs: guest onboarding, room assignment logic, booking confirmations, cancellations, SMS reminders, payment-ready workflows, and a shared admin console.

`patients` ➝ `guests` collection`doctors` ➝ `rooms` collection`appointments` ➝ `bookings` collection`medicalNotes` ➝ `specialRequests`

Feature comparison

Every care workflow has a direct hospitality counterpart using the same code paths.

FeatureClinicsHotels
User onboardingPatientForm.tsx with ID verification + consentGuestForm reusing exact validation + file upload hooks
Resource selectionDoctors array drives Select component & schedule gatingHotelRoomTypes array plugs into the same Select + availability logic
Scheduling logicAppointmentForm + Appwrite `appointments` collectionHotelBookingForm + `bookings` collection with identical status schema
Notes & requestsMedical notes stored per appointmentSpecial requests stored per booking; same textarea + audit trail
NotificationsAppwrite Messaging SMS remindersSame messaging action for confirmations, reminders, cancellations
Admin workflowsAdmin modal updates status + triggers SMSAdmin tab reuses same modal concept for rooms (roadmap)

Shared building blocks

Tailwind UI, Zod validation, notifications, and Appwrite collections are intentionally vertical-agnostic.

Date & availability engine

One React DatePicker + Appwrite query handles appointment slots and hotel check-in/check-out windows.

Reusable form system

Hook-form + Zod stack drives both patient intake and guest registration with zero branching.

Notification mesh

Appwrite Messaging + Twilio connector broadcasts confirmations, reminders, and cancellations for any industry.

Admin workflow controls

The same modal + status badge components approve, schedule, or cancel clinic visits and hotel stays.

New Appwrite collections

  • • `hotels` — metadata per property
  • • `rooms` — replaces doctor availability
  • • `guests` — mirrors patient records
  • • `bookings` — same status enum as appointments

All reuse the same CRUD patterns as patients/appointments.

Ready to demo?

Jump into the live hotel journey or the dual admin console.