← Back
Winnie & Co Dog Grooming
Technical skills demonstrated in this project
Booking & scheduling
- Booking wizard: service → dog size → day → free slot → dog/contact details, as a multi-step flow.
- Slots respect the owner's working hours, the biweekly Saturday rule, one-off blockouts, and existing bookings.
- Double-booking prevented by a partial unique index on live bookings' slot_start plus a server-side overlap re-check.
Owner approval & admin
- Bookings land `pending`; the owner approves or declines them from `/admin`, and approved bookings trigger a confirmation email.
- Availability admin for weekly hours, the biweekly Saturday anchor, and one-off day/time blocks.
- Cookie-session auth (`ADMIN_SECRET`) protecting all `/admin` routes and API endpoints.
Invoicing
- Each approved booking auto-generates a draft invoice from service price, add-ons, and travel.
- Line-by-line editing in `/admin/invoices/[id]`, with statuses draft → sent → paid.
- Customers get an emailed link to a printable invoice page; payment happens offline via the owner's bank details.
Data & persistence
- Drizzle schema covering services (per-size prices + durations), addons, working_hours, blockouts, bookings, invoices, invoice_items, and settings.
- Seeded services, add-ons, and working hours; the biweekly-Saturday anchor and bank details are editable in `/admin`.
- Money and timezone helpers keep pricing and AEST slot calculations correct.
AstroTypeScriptTailwind CSSDrizzle ORMPostgreSQLResendDockerVercel