Appointment & Schedule Management #1

Closed
opened 2026-03-17 12:07:43 +00:00 by ghost · 3 comments
ghost commented 2026-03-17 12:07:43 +00:00 (Migrated from github.com)

Overview

Implement the core appointment and schedule management system — the backbone of any grooming business.

Requirements

  • Multi-groomer calendar with drag-and-drop scheduling
  • Real-time availability preventing double-bookings
  • Recurring appointment support
  • Walk-in queue management
  • Configurable time slots per service type and groomer
  • Offline schedule access

Context

Identified as MVP Priority #1 in market research. Every competitor (MoeGo, DaySmart Pet, Gingr, etc.) centers on scheduling — it's the most critical feature for grooming businesses.

Scope

  • Phase 1 (MVP): Core calendar, booking CRUD, recurring appointments, double-booking prevention
  • Phase 2: Route optimization for mobile groomers, drag-and-drop UI enhancements
## Overview Implement the core appointment and schedule management system — the backbone of any grooming business. ## Requirements - Multi-groomer calendar with drag-and-drop scheduling - Real-time availability preventing double-bookings - Recurring appointment support - Walk-in queue management - Configurable time slots per service type and groomer - Offline schedule access ## Context Identified as **MVP Priority #1** in market research. Every competitor (MoeGo, DaySmart Pet, Gingr, etc.) centers on scheduling — it's the most critical feature for grooming businesses. ## Scope - **Phase 1 (MVP):** Core calendar, booking CRUD, recurring appointments, double-booking prevention - **Phase 2:** Route optimization for mobile groomers, drag-and-drop UI enhancements
ghost commented 2026-03-17 16:04:46 +00:00 (Migrated from github.com)

Architecture Decision: Tech Stack

After reviewing requirements (PWA-first, K8s/CNPG/Authentik/OIDC, self-hostable), I'm choosing:

Backend: TypeScript + Hono

  • Why: Fast, lightweight HTTP framework (TypeScript-native), runs on Node.js, excellent for microservice-scale APIs
  • Connects easily to PostgreSQL via Drizzle ORM
  • OIDC integration via openid-client

Frontend: React + Vite + vite-plugin-pwa

  • Why: React is widely known → easier contributions, Vite gives fast builds, vite-plugin-pwa handles service worker/manifest for installable PWA with offline support
  • TypeScript throughout

Database ORM: Drizzle ORM

  • Why: TypeScript-first, generates type-safe queries from schema, supports migrations, lightweight (no heavy runtime overhead)

Project Structure: pnpm monorepo

groombook/
├── apps/
│   ├── api/          # Hono backend (Node.js)
│   └── web/          # React + Vite PWA
├── packages/
│   ├── db/           # Drizzle schema + migrations
│   └── types/        # Shared TypeScript types
├── .github/
│   └── workflows/    # GitHub Actions CI
├── docker-compose.yml
├── pnpm-workspace.yaml
└── package.json

Initial DB Schema (Core Entities)

  • clients — name, contact info, address, notes
  • pets — name, species, breed, weight, owner (client FK), grooming notes
  • services — name, description, base_price, duration_minutes
  • appointments — client FK, pet FK, service FK, groomer, start_time, end_time, status, notes
  • staff — name, role, email (links to OIDC user)

All decisions align with board-approved tech stack. Scaffolding in progress on feature branch.

## Architecture Decision: Tech Stack After reviewing requirements (PWA-first, K8s/CNPG/Authentik/OIDC, self-hostable), I'm choosing: ### Backend: TypeScript + Hono - **Why**: Fast, lightweight HTTP framework (TypeScript-native), runs on Node.js, excellent for microservice-scale APIs - Connects easily to PostgreSQL via Drizzle ORM - OIDC integration via `openid-client` ### Frontend: React + Vite + vite-plugin-pwa - **Why**: React is widely known → easier contributions, Vite gives fast builds, vite-plugin-pwa handles service worker/manifest for installable PWA with offline support - TypeScript throughout ### Database ORM: Drizzle ORM - **Why**: TypeScript-first, generates type-safe queries from schema, supports migrations, lightweight (no heavy runtime overhead) ### Project Structure: pnpm monorepo ``` groombook/ ├── apps/ │ ├── api/ # Hono backend (Node.js) │ └── web/ # React + Vite PWA ├── packages/ │ ├── db/ # Drizzle schema + migrations │ └── types/ # Shared TypeScript types ├── .github/ │ └── workflows/ # GitHub Actions CI ├── docker-compose.yml ├── pnpm-workspace.yaml └── package.json ``` ### Initial DB Schema (Core Entities) - `clients` — name, contact info, address, notes - `pets` — name, species, breed, weight, owner (client FK), grooming notes - `services` — name, description, base_price, duration_minutes - `appointments` — client FK, pet FK, service FK, groomer, start_time, end_time, status, notes - `staff` — name, role, email (links to OIDC user) All decisions align with board-approved tech stack. Scaffolding in progress on feature branch.
ghost commented 2026-03-17 17:46:53 +00:00 (Migrated from github.com)

Phase 1 implementation is in PR #15 (feat/appointment-scheduling). Delivers: weekly calendar view, booking form with client/pet/service/groomer selection, conflict detection for double-booking, status transitions (scheduled → confirmed → in_progress → completed), and appointment deletion.

Phase 1 implementation is in PR #15 (feat/appointment-scheduling). Delivers: weekly calendar view, booking form with client/pet/service/groomer selection, conflict detection for double-booking, status transitions (scheduled → confirmed → in_progress → completed), and appointment deletion.
ghost commented 2026-03-17 18:46:11 +00:00 (Migrated from github.com)

Closed by PR #15 (merged). Phase 1 appointment scheduling UI with weekly calendar, booking form, conflict detection, and status transitions is live on main.

Closed by PR #15 (merged). Phase 1 appointment scheduling UI with weekly calendar, booking form, conflict detection, and status transitions is live on main.
This repo is archived. You cannot comment on issues.
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: groombook/app#1