A Python application for reservation coordinators to review booking exports, plan arrangements and prepare guest replies. I designed and built it from my experience at JOEY, with human review before commitments are made.
Python for workflow checks, NiceGUI for the interface and SQLite for saved case records.
Logic & validation
Python · Pydantic
Workflow commands, typed records & deterministic rules
Interface
NiceGUI
Case workspace, review controls & service handoff
Persistence
SQLite
Revision checks, atomic writes & audit history
Verification
pytest · Playwright
Regression coverage & recorded browser journeys
00 / Project overview
A useful reply starts with a reliable record.
Independent system / workflow & software 2024–2025 workflow developed and tested at JOEY 2026 software implementation
A guest’s request, an available table and an agreed booking are three different things. The workbench keeps them connected without treating them as interchangeable.
The challenge: The information needed to answer an inquiry was spread across messages, booking records and operational notes. A polished reply could still rely on an incomplete or outdated arrangement.
My contribution: I independently developed and tested the original workflow while coordinating reservations at JOEY, then designed and built the application’s interface, import handling, decision rules and audit controls.
The result: A working local prototype with visible next actions, source-linked records and checks that must be renewed when the facts they depend on change.
Guest messages, contact details and the intended visit.
Application / structure & checks
What the software does
Preserve original wording; suggest source-backed fields; keep unknown values distinct from confirmed answers.
Coordinator / judgment & action
What the person decides
Confirm party size, timing, allergies, access needs and terms that need clarification.
Record carried forward
A case with source evidence, confirmed requirements and unresolved questions.
In Morgan’s case
Morgan requests six guests at 18:00. “No allergies” is confirmed for this visit, rather than inferred from past notes.
Decision boundaryMissing information stays visible. It is not silently converted into “none”.
02 / Build a checked planStage details
Starting information
The case, reviewed reservation exports, table configuration and operating policies.
Application / structure & checks
What the software does
Check coverage and freshness, then assess capacity, overlap, access and allowed table groups.
Coordinator / judgment & action
What the person decides
Check live service flow, obtain guest acceptance and verify the booking in the external system.
Record carried forward
A proposed plan with separate acceptance and verification records; a saved external allocation after verification.
In Morgan’s case
Table B is occupied. Table A seats eight and fits Morgan’s six-person request. The snapshot supports the plan; the coordinator verifies reality.
Decision boundary“Potentially feasible” is planning support. It is not guest acceptance or booking confirmation.
03 / Review the commitmentStage details
Starting information
The current plan, confirmed requirements, source messages and verification evidence.
Application / structure & checks
What the software does
Track the saved response and whether its review still matches the wording and supporting record.
Coordinator / judgment & action
What the person decides
Review the exact text, send it externally and record that it was sent.
Record carried forward
A saved response with a current review and an explicitly recorded sending action.
In Morgan’s case
After the arrangement is accepted and verified, the coordinator reviews Morgan’s final confirmation before copying it to send.
Decision boundaryA saved draft is not a reviewed reply. A reviewed reply is not proof that it was sent.
04 / Prepare the next shiftStage details
Starting information
The verified allocation, requirements, promises, open tasks and case owner.
Application / structure & checks
What the software does
Assemble a date-specific service record and track whether a staff receipt matches its current contents.
Coordinator / judgment & action
What the person decides
Review the service record, acknowledge it by name and handle outstanding work.
Record carried forward
A shared operational reference with explicit tasks and a named review receipt.
In Morgan’s case
Morgan’s saved table and visit requirements are available for the next shift. Later changes make the prior staff receipt outdated.
Decision boundaryHandoff does not erase unfinished work. Changed commitments need a fresh staff review.
↶
Changes return to the relevant checks
Reviews depend on the current record. A new time can reopen the plan; edited wording requires another response review; a changed handoff needs a fresh staff receipt.
Illustrated from the implemented coordinator workflow. Stages can be revisited; sending and external booking changes remain manual.
01 / The application
One inquiry. A complete working record.
Follow a recorded application test from intake to handoff. All four views show the same synthetic case in the coordinator build.
Morgan’s request Six guests · 18:00 · two hours Table B is occupied; table A has eight seats.
01 / Request
Start with the guest’s actual words.
Morgan asks for six guests at 18:00. The coordinator records contact details and confirms allergies, accessibility, minors, billing and occasion for this visit.
The record distinguishes “not asked” from a confirmed “none”.
Recorded application journey. Synthetic guest and venue.
Original inquiry and confirmed visit requirementsApplication screenshot with synthetic data. Enlarge to read the interface.
02 / Plan
Check what can actually be offered.
Table B is occupied. Table A has eight seats and passes the conditional snapshot check. The operator checks live flow, verifies the external booking and records acceptance from a call.
Guest acceptance and external booking verification are separate records.
Recorded application journey. Synthetic guest and venue.
Seating arrangement, snapshot result and independent verification controlsApplication screenshot with synthetic data. Enlarge to read the interface.
03 / Reply
Review the wording against the record.
After acceptance and booking verification, the coordinator saves a final confirmation, reviews it and copies the approved text to send externally.
Saving, reviewing and reporting a sent response are distinct actions.
Recorded application journey. Synthetic guest and venue.
Reviewed final response with the recorded external sending actionApplication screenshot with synthetic data. Enlarge to read the interface.
04 / Handoff
Carry the agreement into service.
The date-specific service record brings the saved allocation, requirements, promises and open tasks together. A named staff member records their review.
Later changes make the staff review receipt outdated.
Recorded application journey. Synthetic guest and venue.
Service handoff with the saved booking and staff review receiptApplication screenshot with synthetic data. Enlarge to read the interface.
What this changes
The coordinator works from one case record instead of reconstructing the arrangement from messages, templates and booking notes.
How a guest statement becomes a confirmed requirement +
Source / original inquiry
“No allergies, no accessibility needs, no minors, one bill and no special occasion.”
Exact excerpt from the synthetic Morgan fixture.
Operator-reviewed field
Requirement
Allergies
Value
None
State
Confirmed for this visit
Evidence
Guest confirmed in the original inquiry
The coordinator confirms the field. Pattern extraction can suggest source-backed values; it does not silently turn historical notes into current requirements.
02 / The operational problem
The hard part was coordinating the answer.
An inquiry could require several decisions before a reply: clarify the party’s needs, check seating and service flow, explain terms, record the booking and track acceptance.
The system began as a workflow I independently developed and tested while coordinating reservations at JOEY. Building on existing response templates, I connected structured information gathering, LLM prompts, booking notes, exception handling and follow-up steps.
During employment, I used LLM chat tools and checked bookings manually; there were no Python scripts or API integrations. I later built the Python application to keep those requests, decisions and commitments in saved records governed by testable rules.
~45 → ~5 min
Less active handling time
My estimate for a typical complex inquiry in the original workflow, from interpretation and checks to the initial reply. Not a controlled study or a benchmark of this application.
Separate tools become one persistent caseProcess reconstruction: the coordinator remains responsible for external actions.
Reconstructed from the documented manual workflow and implemented coordinator. External booking and guest contact remain manual. Download the workflow comparison
03 / The original conversations
Read the exchange. See the decision.
Selected word-for-word excerpts from the reservation inbox, paired with the decisions and handoffs they document.
Original wording, including spelling, is preserved within each excerpt. Names, signatures and unrelated passages are omitted. These are selected passages, not complete emails or screenshots.
The conversation / original wordingHow it fits the workflow / analysis
GuestExcerpt 01
Would I be able to confirm this the day prior, or do you need the final number earlier?
01
Request
Keep the headcount open
The guest wants to confirm later. The earlier exchange establishes a range of 10–15, not a fixed attendance.
CameronExcerpt 02
We can absolutely wait until the day before to confirm your final headcount. However, just to be transparent, we’re unable to hold both seating options until then.
02
Plan + reply
Explain the hold boundary
The reply distinguishes flexibility on headcount from a promise to reserve two layouts. The alternative also depended on 11 or fewer guests and remaining availability.
GuestExcerpt 03
Unless anything arises tomorrow, our final count is 13
03
Update
Carry forward the latest count
The guest supplies 13, with a caveat. That does not establish a move to the alternative layout.
Documented outcome13 reported; alternate seating not established.
Application design implication
Keep the requested change separate from the saved arrangement.
The conversation / original wordingHow it fits the workflow / analysis
GuestExcerpt 01
Do you have a contact I can speak to re-private dinning spaces?
01
Request
Identify the right owner
The private-room enquiry requires specialist confirmation. It is a separate request from the existing Lounge booking.
CameronExcerpt 02
I completely understand your need to confirm availability for our Private Dining Room, and while I’m unable to confirm the PDR myself, I’m going to personally follow up with our private dining team right now to get you an answer as quickly as possible.
02
Reply
State the limit of authority
The guest-facing reply promises a follow-up, not a room. No availability is invented.
Cameron · internal follow-upExcerpt 03
Would you mind touching base with her as soon as you’re able? I’ve kept their Lounge reservation in place for 22 guests just in case, but I think they’re hoping to finalize one way or another soon.
03
Handoff
Protect the fallback
The internal message records the 22-person fallback while requesting specialist action. The archive does not establish the private-room outcome.
Evidence boundary. These emails document the historical coordination process. They do not establish which replies were LLM-assisted or show outputs from the later application. Workflow labels and diagrams are editorial analysis, not recovered AI logs.
Linked bookings, human checkpoints & source notes +
Thread #224 / reconstructed
One event. Two reservation records.
Shared event
25 guestsReservation A15 guestsReservation B
Policy checks + operational handoff
The correspondence documents an additional booking and cross-team confirmation tasks. Final attendance is not established.
Thread #353 / paraphrased only
Capacity alone is not suitability.
Accessibility: verify the actual route and seating.
Allergies: confirm requirements with restaurant staff.
Fixed tables: distinguish nearby from joinable.
Health-related guest correspondence is not reproduced.
Source: original Outlook text exports. Thread numbers refer to archive filename prefixes; line numbers refer to those files. Excerpts are chronological within each case, but intermediate messages are omitted. Full private threads are not published. Read the historical case notes
04 / Data integration
Review booking data before using it.
At the start of a shift, the coordinator uploads a reservation export and checks its column mappings, dates and coverage before applying it. The parser supports CSV and TSV files.
A CSV is a snapshot. It assists planning; it cannot establish current availability.
01
Read
Parse CSV or TSV rows, separators, headers and source values.
02
Interpret
Review mappings, date order, venue, time zone and coverage.
03
Validate
Reject invalid rows or mixed venues; review warnings.
04
Apply
Replace the previous report and compare stable reservation IDs.
Invalid or incomplete report
Correct the data or mapping and validate again. Partially valid rows do not become trusted context.
Missing is not cancelled. Added, changed and absent rows support reconciliation. Omission from an export never automatically cancels a booking.
Freshness is part of validity. Assessment requires complete declared coverage, matching time zones and a report no more than four hours old.
Capacity is only one constraintSynthetic application case: the timeline shows the occupied table and the available alternative. Live availability still requires verification.
Reading the result
What can the snapshot establish?
The same six-person request can produce a different result depending on the evidence and selected table. These are source-derived illustrations of the assessment rules.
Missing coverage, stale data or an unknown overlapping table prevents a reliable comparison.
Coordinator action
Resolve the missing context and reassess. An unknown result does not mean a table is free.
02 / Arrangement conflicts
B×
6 guests · 18:00Selected table is occupiedOverlap detected
Conflict detected
With usable context, the selected arrangement fails an overlap, capacity, accessibility or grouping check.
Coordinator action
Revise the table, time or arrangement, then run the check again.
03 / Snapshot supports plan
A✓
6 guests · 18:008 seats · no known overlapSnapshot check passes
Potentially feasible
The selected arrangement satisfies the configured constraints against the reviewed snapshot.
Coordinator action
Check live availability and service flow. Verify the external booking separately.
Illustrative states, not new application screenshots. “Potentially feasible” is conditional planning support, not a booking confirmation.
Inspect the import pipeline and seating constraints +
Reviewed parsing and explicit applicationSource-derived ingestion flow. Guest identity matches are candidates for operator review, not automatic merges.
05 / System architecture
How the application checks and saves decisions.
NiceGUI calls workflow commands that check the supporting evidence and the record version. SQLite then saves the change and its audit event together.
A plausible response does not prove that a booking exists. The application records the evidence for each decision separately.
Reviewed inputs
Guest messages & calls
Original wording, contact and visit requirements
Reservation exports
Mapped rows, declared coverage and freshness
Restaurant configuration
Tables, allowed groups, occupancy assumptions and policies
An approval applies to particular facts, not to the case forever. Changing the plan, contact details or response text invalidates only the evidence that depends on it.
Explore three kinds of change. This is a source-derived rule illustration, not a live reservation tool.
Change-impact explorer
Everything matches the reviewed record
Guest acceptanceCurrent
Linked to seating, time, duration and terms.
External verificationVerified
Linked to the plan, guest record and policy.
Response reviewReviewed
Linked to the saved wording and source evidence.
The arrangement, external verification and saved response all match their reviewed evidence.
Saved external allocation18:00 · Table A · 6 guests
A request to change the time does not overwrite the previously verified booking. It remains visible until the operator verifies the external update.
Design decisions
Where automation stops and review begins.
Exports support planning, rules check the saved record, and the coordinator verifies live conditions. Each choice adds review work in exchange for a clearer basis for decisions.
Three decisions that shape the application
Decision
Why it fits the problem
Tradeoff
Reviewed exports before direct integration
Make source coverage, mappings and freshness explicit before using booking data.
Snapshots can age. A coordinator still checks live availability and reconciles discrepancies.
Separate assistance from authority
Suggestions help prepare the case; explicit rules and human review determine what can be confirmed.
More review steps, and no autonomous sending or booking. Model suggestions do not remove accountability.
Local persistence with revision checks
Keep a durable case history and reject stale actions across ordinary browser tabs.
The prototype serves a local operator workflow. Shared production use needs authentication, roles and recovery controls.
Handling interruptions
Protect the record between browser tabs.
A coordinator may reopen a case while another tab still shows old information. The workbench checks the record revision before accepting the action.
01
Check the expected revision
The command supplies the version the operator saw. If a newer version is already saved, the command rejects the action before changing the record.
02
Commit the change and audit together
A SQLite transaction saves the updated record, increments its revision and appends the before/after event. A failure rolls back the operation.
03
Keep drafts separate from approvals
Browser-specific buffers recover unfinished wording after reload. Recovered text still needs to be saved and reviewed against the current case.
Inspect the revision guard and evidence-binding mechanism +
A stale action stops before it can overwrite the recordIllustrative revision numbers, derived from coordinator/store.py and the stale-tab and rollback regression tests.
Check that acceptance still matches the plan.
A fingerprint of the arrangement links the acceptance record to the current plan. If the plan changes, the fingerprints no longer match.
Exact logic from coordinator/workflow.py, reformatted for readability.
def accepted(c):
return bool(
c["acceptance"]
and c["acceptance"]["plan_hash"]
== plan_hash(c)
)
07 / Evidence & next steps
Testing changes, conflicts and interruptions.
The release includes automated regression tests and recorded browser journeys using synthetic data. They check specific prototype behaviours, including stale updates, failed writes and renewed reviews.
Application release 3.0 October 2026 Historical workflow estimates are reported separately.
198
Passing automated tests
45 coordinator cases and 153 retained regressions in the release log.
4
Recorded browser journeys
Coordinator, import, demo workflow and interface capture scripts.
3
Captured viewport widths
1440, 820 and 390 px. Chromium checks using synthetic records.
Inspect the failure-path test matrix +
Selected behaviours covered by coordinator regressions
Failure or change
Expected behaviour
Why it matters
Requested time changes
Renew relevant reviews; preserve the saved allocation
A new request does not silently replace a booking
An older tab submits an action
Reject its stale revision before writing
Old information cannot overwrite a newer record
A command fails validation
Keep the record and audit history unchanged
A failed action leaves no partial mutation
An overlapping table is unknown
Return “Cannot assess”
Missing context is not treated as free capacity
No guest answer / a hold expires
Create follow-up or manual-release work
Silence does not become acceptance or cancellation
The handoff record changes
Mark the staff review as outdated
The next shift can identify unreviewed changes
From operational problem to working software
Requirements & product design: translated a coordinator’s daily decisions into a four-stage workspace, explicit records and visible next actions.
Data integration & domain modelling: connected inconsistent exports to a case model while preserving missing information, source evidence and review ownership.
Software delivery & verification: implemented the interface, command layer and persistence, with failure-path regressions and recorded browser journeys.
Before a restaurant pilot
Representative data: validate current, sanitized exports and restaurant-approved layout and policy.
Coordinator testing: compare active handling time, completion quality and usability on equivalent cases.
Production controls: authentication, roles, encryption, retention and tested backup/recovery.
Supporting evidence
Inspect the implementation.
Open the repository for source code and setup instructions, or inspect the documented decisions and release evidence below.
Independent project. The original workflow was developed and tested during my work at JOEY; the later software prototype was not deployed there. Neither JOEY nor OpenTable endorses the project. The application uses synthetic examples and does not send email or modify external bookings. The hero is an illustrative composition; the walkthrough shows actual application screenshots. Application productivity, live-model performance and real-user usability remain unmeasured.