Justin Smith

The operation talks all day

Adventure Idaho · 2024–present

A booking system records what a guest agreed to. It never hears the guide who DMs about a doctor's appointment Thursday, the driver who satellite texts in that the van has a blown tire and the jack won't lift it, or the message that the wind has picked up and the group is moving slow. Every one of those changes the operation. This is the layer that listens: it reads the signal, structured and unstructured, reconciles it against the live state of the operation, and gets the right person to decide.

Booking software is a system of record. This is the system of action that keeps that record true. Most of what an operation needs to know never arrives as a clean form field. It arrives as a sentence someone types in a channel, and on a whiteboard it stays invisible until the morning it isn't.

Slack is a sensor, not a chat room

Some of it arrives structured on purpose. Time off requests, and ops issues like a vehicle or trailer problem or damaged gear, come in through forms that push clean data straight into the record. The rest arrives as sentences. The crew reports everything that matters, in plain language, all day: a guide picking up an appointment, a group running late, a boat tube torn so that boat can't go out again until it's fixed, a guest count that changed in passing. Claude reads across the channels, understands what each message means for the operation, and updates the operational record, or stages the change and flags it. Then the conflict engine re-checks the schedule against it, and if something now collides it surfaces the decision to a person. A message becomes a known fact the whole team can see, instead of something one person happened to catch.

Here's one, exactly as it came in. A guide texts mid-evening, lowercase, no punctuation: "i'm going to take maias driving stuff tomorrow. so i can do the full day drop off and pick up and then the 3 o'clock half day pickup as well." No time, no location, no trip named. The system reads it against tomorrow's board, works out that it means three specific movements, checks them for conflicts, and stages the swap. A person confirms it that night: you're on Maia's driving, drop-off at 9, the 3 o'clock pickup, and the half day, board's updated. A booking system has no field for "I'll take Maia's driving stuff." That's the difference between a form and a sensor.

Anything that touches money, compliance, or safety waits for a human, and the system reports back exactly what it changed so a person can verify it. That is the line that makes a crew trust it: the sensing and the bookkeeping are automatic; the consequential decision stays human.

The leads and calls nobody answered

The harder gap is the one you can't see at all: the people who tried to book and got silence. A digest runs every morning across the phone line and messages and sorts the last day into what actually needs a human: calls that need a callback, texts that went unanswered, leads that started and stalled. It reads the whole thread, so it can tell the difference between "party of four delayed by a crash, already resolved" and "two first-timers wanted a day trip, asked when someone would be in the office, and got zero replies."

It is deliberately read-only. It surfaces, a person acts, nothing is auto-answered.

A morning digest sorting the last day of calls and messages into items needing a callback, unanswered texts, low-priority sales calls, and already-handled threads, with a summary of inbound volume and distinct contacts.
The morning digest of missed calls and unanswered leads, contact details removed. Read-only by design: it tells a person what needs them and stops there.

This is the half of the business booking software ignores completely. A booking system can tell you about the reservations you got. It has nothing to say about the ones you lost because a text sat unanswered on a Saturday morning. In a business where filling the seats is half the game, that blind spot is expensive.

Field communication that doesn't live on one phone

Our trips run through canyons with no cell service. Satellite texting only sends to one phone. There are no group messages, so it goes to a single contact, usually the owner or a manager. If that person is driving, asleep, or on the water themselves, the message just sits there. A satellite text is the same thing as a Slack message here: a signal from the operation that has to reach the system, not one person's pocket.

Ours relay through the company number into a team channel instead, where every manager and lead guide sees them at once. A guide reporting "water is brown, blowout reported" or asking for a van at a takeout reaches whoever is actually available, and it gets escalated to the right person immediately rather than waiting for one phone to light up. Timing pings run the other way: automated "leave in ten minutes for the pickup, boats land at 1:33" messages, timed off the actual trip.

The team field-comms channel carrying traffic both ways: automated pings telling a driver when to leave for a pickup, each naming the group size in guests plus guides and the expected landing time, and beneath them a satellite text relayed in from a camp asking whether any fires are reported nearby because there is dark smoke on the mountains.
Signal in both directions. Going out, timing pings carry the group size in guests plus guides and when the boats land. Coming in, a satellite text from a camp with no cell service asking about smoke on the ridge, landing where the whole team sees it instead of on one phone. Names and numbers redacted.

The same timing engine also runs a revenue line the company didn't used to have. At set points in a trip it pings a photographer to get downriver and be in position at a specific rapid before the boats come through, so the shots actually get taken instead of missed. Back at the shop those photos flow into PicThrive, which runs an automatic slideshow on the store TV and handles the pricing and the sale. I built the whole loop, from the field timing to the point of sale, and it opened a photo-sales profit center the operation didn't have before. The customer chooses to buy. The system's only job is making sure the moment on the river got captured and the storefront was ready to sell it.

Money, before it walks out the door

This is the same pattern pointed at the money. Booking platforms are starting to bolt on a version of this alert; the difference here is that the balance, the crew, the field messages, and the schedule all sit in one reasoning context, not four separate automations.

Every morning the system reads the booking data and posts the balances still owed on trips launching in the next six days: who owes what, how much they've paid, and a one-click link to charge or follow up. One recent morning it flagged $11,411 outstanding across five reservations, all launching that week.

The data was never missing. The booking system has the deposit and the balance, accurately, the whole time. What was missing is anyone reconciling it against what is about to happen. Left alone, some of it simply never gets charged, and you find out when you happen to look. Reconciled every morning against the trips going out, it gets run before the guests are on the water.

The daily unpaid-balances digest: trips launching in the next six days listed by date and type, each showing an amount still owed and a link to charge or follow up, with a total outstanding at the top and bottom.
The daily unpaid-balances digest. Customer names and the individual amounts are removed here; the total is the number that matters.

Time off, which a whiteboard cannot hold

Time off is the request type that quietly breaks a seasonal operation. A whiteboard shows you today. It can't tell you that four people asked for the same weekend in August, that a request came in three weeks ago and nobody answered it, or that the guide you just assigned to a five-day trip is leaving on day three. Those requests arrive by text, in person, and in passing, and they live in whoever happened to hear them.

Now when a guide submits time off or a schedule change, it lands in the management channel with the dates and the reason, linked straight to the record. It is tracked instead of remembered, it is visible to every manager instead of one, and it sits against the same schedule the assignments come from, so a request that collides with a trip shows up as a conflict rather than a surprise.

A crew time-off request posted automatically into the management channel with the requested dates, the reason, and a link through to the underlying record.
A crew request surfaced automatically, name removed. Tracked against the same schedule the assignments come from.

Why it's a sensor layer, not a feature

None of this is a chatbot and none of it acts on its own on anything that matters. It is a set of senses wired into one nervous system: the booking feed, the forms, the field radios, and the team's own messages all arrive in one place, get reconciled against the live operation, and get checked for what breaks. The booking system stored a record. This keeps the record true as the day changes under it.

The shape of it, sense the signal, reconcile the state, check the constraints, surface the decision, sync the team, is the same in every operationally complex service business, not just this one. That argument is the one I make in booking software solved the transaction and left the operation unbuilt, and this is the working half of it.