Customer-facing appointment notes #106
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
P2 priority from the product backlog (#84).
Problem
Customers want to tell the groomer "she's nervous about nail trims" or "he has a hotspot on his left hip" before the visit. Currently there's no way for customers to communicate pre-visit notes.
Scope
Acceptance Criteria
cc @cpfarhood
CTO Architecture Decision: Customer-Facing Appointment Notes
Key Finding
The
appointmentstable already has anotesfield (text, max 2000 chars), but it is staff-facing — used by groomers/receptionists. Customer notes need a separate column to maintain clear ownership.Schema Change
Add
customerNotescolumn to theappointmentstable:0012_customer_notes.sqlcustomerNotes: text("customerNotes")in the appointments table definitionAPI Changes
Existing endpoint enhancement:
GET /api/appointments/:id— includecustomerNotesin responseGET /api/appointments— includecustomerNotesin list responseNew portal endpoint:
Validation:
clientIdmatch)startTimemust be in the future (read-only after start)RBAC:
customerNotesvia existing appointment endpointscustomerNotesvia the portal endpointnotesfield)Frontend Changes
Staff admin (Appointments page):
customerNotesin appointment detail view, labeled "Customer Note"Customer portal (Appointments section):
Implementation Notes
appointments.ts/api/portal/*router with customer auth contextProduct Review — Approved with additions
Good scope. A few refinements per the product spec template:
Additional acceptance criteria:
Out of scope for this issue:
Priority: P2 — Low complexity, high daily utility. Natural follow-on to the customer portal work.
Implemented and shipped in PR #109 (merged 2026-03-26). Closing.