Operations & software / 2024–2026

Reservation Workbench.
From inquiry to reply.

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 · NiceGUI · SQLite / Independent software prototype

My role
Workflow design & sole software development
Workflow
Intake, planning, replies & service
Checks
Evidence-linked rules & review gates
Validation
Regression tests & browser journeys
Status
Independent local prototype

Tools & technologies

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.

Actual application captures · one synthetic case · select a stage in the walkthrough below to inspect it.

Workflow / one case, four stages

From inquiry to a service-ready record.

The application organizes the evidence. The coordinator makes and verifies the commitments.

Select a stage to inspect its inputs, checks and decisions.

  1. 01Understand the requestTurn a guest’s words into a traceable case.ProducesConfirmed requirementsInspect stage
  2. 02Build a checked planMatch the request to constraints and evidence.ProducesAgreed & verified arrangementInspect stage
  3. 03Review the commitmentMake the wording match the current agreement.ProducesReviewed responseInspect stage
  4. 04Prepare the next shiftCarry the agreement into service.ProducesService-ready recordInspect stage
01 / Understand the requestStage details
Starting information

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.

Explore change impact

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.

Thread #004 / Changing headcount / conditional seating

A preference is not a second booking.

Original correspondence
2024–2025
  1. 10–15Initial range
  2. 1 holdNot two layouts
  3. 13Updated count
The conversation / original wordingHow it fits the workflow / analysis
  1. GuestExcerpt 01
    Would I be able to confirm this the day prior, or do you need the final number earlier?
    Thread #004 · line 64 · verbatim excerpt
    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.

  2. 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.
    Thread #004 · line 43 · verbatim excerpt
    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.

  3. GuestExcerpt 03
    Unless anything arises tomorrow, our final count is 13
    Thread #004 · line 29 · verbatim excerpt
    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.

Inspect the relevant controls

Thread #113 / Specialist handoff / fallback reservation

One booking protected. One request still open.

Original correspondence
2024–2025
  1. 22Lounge booking
  2. Follow-upSpecialist team
  3. PendingPrivate dining
The conversation / original wordingHow it fits the workflow / analysis
  1. GuestExcerpt 01
    Do you have a contact I can speak to re-private dinning spaces?
    Thread #113 · line 97 · verbatim excerpt
    01

    Request

    Identify the right owner

    The private-room enquiry requires specialist confirmation. It is a separate request from the existing Lounge booking.

  2. 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.
    Thread #113 · line 46 · verbatim excerpt
    02

    Reply

    State the limit of authority

    The guest-facing reply promises a follow-up, not a room. No availability is invented.

  3. 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.
    Thread #113 · line 25 · verbatim excerpt
    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.

Documented outcomeFallback retained; private-room decision unresolved.
Application design implication

Track the booking and the open escalation independently.

Inspect the relevant controls

Thread #340 / Guest correction / later time change

A correction changes the working record.

Original correspondence
2024–2025
  1. 11 → 10Party correction
  2. 4:45Requested start
  3. 7:15Communicated end
The conversation / original wordingHow it fits the workflow / analysis
  1. GuestExcerpt 01
    Actually we are 10 persons not 11
    Thread #340 · line 61 · verbatim excerpt
    01

    Request update

    Use the corrected fact

    A short follow-up supersedes the earlier party size. The whole conversation matters, not only the first form submission.

  2. CameronExcerpt 02
    Otherwise, it looks like we have everything we need from you so I've gone ahead and confirmed your reservation.
    Thread #340 · line 41 · verbatim excerpt
    02

    Reply

    Communicate the recorded decision

    The historical reply states that the reservation was confirmed. It is not an independent booking-system receipt.

  3. Guest · later messageExcerpt 03
    Would it be possible to move our reservation to 4:45?
    Thread #340 · line 28 · verbatim excerpt
    03

    Plan update

    Treat a new time as a request

    A later time change requires a fresh decision; it is not already an agreed amendment.

  4. Reservation coordinator · later replyExcerpt 04
    I have changed your reservation starting to 4:45pm. You will have this table reserved until 7:15pm.
    Thread #340 · line 15 · verbatim excerpt
    04

    Reply + service

    Make both boundaries explicit

    Another coordinator communicates the new start and end. The record needs to carry that agreement into service.

Documented outcomeThe later reply communicates a 4:45–7:15 arrangement.
Application design implication

Re-check changes and preserve the latest communicated commitment.

Inspect the relevant controls

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.

  1. 01

    Read

    Parse CSV or TSV rows, separators, headers and source values.

  2. 02

    Interpret

    Review mappings, date order, venue, time zone and coverage.

  3. 03

    Validate

    Reject invalid rows or mixed venues; review warnings.

  4. 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.

01 / Evidence incomplete

Cannot assess

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

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

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

Local application

NiceGUI

Request · Plan · Communicate

Workflow commands

Deterministic checks

Snapshot conflicts · evidence fingerprints
Completion gates · revision checks

Atomic update + audit event

SQLite

Cases, revisions & history

Coordinator authority

Check the reality.
Record the decision.

  • Check live availability and service flow
  • Agree the arrangement with the guest
  • Save and verify the external booking
  • Review, send and record the reply

No automatic email sending or booking-system writes.

Original workflow

LLM-assisted preparation

Chat tools helped interpret requests and prepare replies during employment.

Current coordinator

Offline extraction & rules

Source-backed pattern suggestions support intake. Models do not determine booking validity.

Separate demo

Optional live-model adapter

Anthropic structured output, validation and bounded retries. Live-model evaluation has not been run.

Download the architecture diagram · Read the implementation notes

06 / Reliability by design

A changed request
needs the right re-checks.

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
DecisionWhy it fits the problemTradeoff
Reviewed exports before direct integrationMake 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 authoritySuggestions 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 checksKeep 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.

  1. 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.

  2. 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.

  3. 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 changeExpected behaviourWhy it matters
Requested time changesRenew relevant reviews; preserve the saved allocationA new request does not silently replace a booking
An older tab submits an actionReject its stale revision before writingOld information cannot overwrite a newer record
A command fails validationKeep the record and audit history unchangedA failed action leaves no partial mutation
An overlapping table is unknownReturn “Cannot assess”Missing context is not treated as free capacity
No guest answer / a hold expiresCreate follow-up or manual-release workSilence does not become acceptance or cancellation
The handoff record changesMark the staff review as outdatedThe 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.

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.

Discuss this work View résumé