Small field-service teams run bookings through phone calls, messages, personal calendars and spreadsheets — customers can't see real availability, staff have no single view of their work, owners spend the day reconciling status. This is a finished MVP that replaces all of it with one organization-scoped system: customers book, staff advance assigned work, owners run the schedule, catalog, people, reporting and audit trail. Korean and English.
Full source, docs & architecture ↗



The reason this is worth showing — the engineering, not the CRUD.
Showing an open slot isn't enough — another request can arrive first. Availability is computed from staff-service assignments, recurring hours, time off and existing bookings; a partial PostgreSQL GiST exclusion constraint is the final atomic authority. The app gives useful errors, the database makes the race impossible (409 on conflict, adjacent bookings stay valid).
Every query is scoped after authentication and membership resolution. Separate response schemas guarantee an internal note never reaches a customer response; owner-only dashboard, export and assignment operations are enforced by the API, not by hiding a route.
The dashboard aggregates real booking data over a bounded period; the calendar reuses the same filtered booking responses as a month grid or mobile agenda. List, calendar and reporting stay consistent because there's no parallel scheduling model.
The E2E flows create and mutate data, so each run spins up its own Compose project with temporary ports and a disposable PostgreSQL volume, seeds it, runs, and tears down on every exit path.
Built by the team, MIT-licensed. A hosted demo you can click through is coming; for now the full source, docs and architecture decisions are on GitHub. see the menu →
This is the scale of web MVP we build — academies, salons, clinics, studios, anywhere bookings happen. New to freelancing, so the rate is below market and your build gets portfolio-piece attention.
Request a quote