// case study · web & software

Howling Coyote.

A live restaurant website and an offline-first ordering system for a Mexican restaurant & bar in Gould, Colorado — high in North Park at the foot of Cameron Pass, where most customers have no cell service. The menu caches on-device, orders queue in an on-device outbox, and when data can't get through, one tap sends the order as a text message.

// client
The Howling Coyote
// industry
Hospitality
// stack
TypeScript · React · Hono
// status
● Site live · ordering in final build
The live Howling Coyote website — a dusk mountain scene with a howling coyote silhouette, papel picado banner, and Order Online call to action

Live now at howlingcoyote.bar

The problem.

The Howling Coyote sits on Highway 14 at Cameron Pass, in one of the emptiest corners of Colorado's North Park. It's the kind of place people find on a road trip, at a campground, or coming off the trail — and it's also a place where cell service simply doesn't exist. A normal "order online" flow, the kind that assumes a live connection at checkout, falls apart the moment a customer is standing in a dead zone with a hungry car full of people.

The restaurant itself isn't much better connected: it runs on Starlink behind carrier-grade NAT, so anything that expects a fixed public address or a rock-solid uplink is a bad bet. The brief was simple to say and hard to build: let people order even when the network is against them.

What we built.

Two things, as one TypeScript codebase. First, the site that's live today — a warm, fast marketing site with the menu, the bar, delivery info, events, and hours. Second, the part being finished now: an offline-first ordering system — a customer PWA, a kitchen dashboard, and an API server — engineered from the ground up to survive no signal.

  • Install-free PWA — scan a QR code at a campground, in Walden, or on the restaurant's Wi-Fi, and the whole app plus the menu cache on-device. It keeps working after you drive back out of range.
  • An order that always succeeds — "Place order" commits locally to an on-device outbox and auto-transmits on any signal blip. Retries are idempotent via client-generated ULIDs, so a flaky connection never double-charges or double-fires an order.
  • Text-message fallback — if data never comes back, one tap sends the order as a compact SMS (which gets through where data can't, including satellite texting). The server parses it into a normal order and texts back a confirmation.
  • Live kitchen dashboard — a real-time order board over Server-Sent Events, so the staff see tickets land the instant they transmit, however they arrived.
  • Multi-tenant from day one — built so other North Park businesses can be added later without a rewrite.

How it beats the dead zone.

01
Cache

Menu & app precache on-device on the first visit.

02
Queue

Orders commit to a local outbox — instantly, offline.

03
Transmit

Idempotent ULID retries fire on any signal blip.

04
Or text

No data at all? One tap sends it as an SMS instead.

The engineering discipline is that the network is treated as optional, not assumed. Pricing, hours, and the SMS grammar all live in a shared, unit-tested package that runs identically on the phone and on the server — so an order totals the same whether it's placed online or reconstructed from a text message.

What's next.

The core loop — menu → cart → checkout → live dashboard → status texts — is done. Finishing now: Workbox precache polish and an on-device iPhone field test out at the pass. On the roadmap: a Stripe Payment Element (with pay-in-person staying as the offline fallback), a cloud-polling kitchen printer that works behind Starlink's CGNAT, full inbound SMS ordering, and onboarding the next North Park business onto the same multi-tenant platform.

// next step

Got a business the network keeps letting down?

Dead zones, flaky uplinks, field conditions that break "normal" software — that's exactly what we build for. Let's talk about yours.