GS.Let's talk
← All workWalk to Bethlehem
Live

Walk to Bethlehem

A phone companion that follows a live outdoor nativity walk cue by cue, with AR and light moments in sync with the show.

Walk to BethlehemInteractive demo · sample data

What it is

A phone web app for the live outdoor nativity walk at St. George & St. Abanoub Coptic Orthodox Church in Milton. Visitors scan a QR code, fill in a one-line census, and from then on every phone in their walking group (a "flock") follows the show: dark during scenes, awake with a map and a clue between them, and lit up for moments like Gabriel's glow, the angels, the star hunt and the candles. A narrator called Jay guides you all night, and at the manger he turns out to be "the Word".

Why I built it

One flock at a time walks through five live scenes outdoors at night, so I needed phones that stay dark while the actors are on, wake up between scenes, and add the AR and light moments exactly when the sound desk fires them, even on weak signal. It had to be no install and no account, because people arrive with whatever phone they have. And it had to respect privacy: first name only, and nothing from the camera ever leaves the phone.

5live scenes, one flock at a time
22show cues, from QLab or a GO button
40%of the flock finding the star lights the way
0dependencies, installs or accounts

How it works

One cue moves the whole flock

The show is a list of 22 cues. When a volunteer presses the big GO button (or the space bar), or QLab sends an OSC message over UDP on port 53535, the server pushes the new cue to every phone in that flock with server-sent events, so a whole group of phones changes screen at the same moment.

AR without WebXR

The star and the fire are drawn over the live camera using the phone's motion sensors. North is read from the compass once (20 samples, averaged) and then frozen, so the gyroscope does the moving and compass jitter can't drag the star around. A find counts when you're within 10 degrees for 0.7 seconds.

Pinned to real places with GPS

Volunteers pin the shepherds' fire and the star on site: the admin page averages about 10 seconds of GPS readings. Each phone works out the bearing and distance with the haversine formula, smooths its own position by weighting recent fixes by their accuracy, and only shows an object once you're within range.

Light cues that feel like theatre

Each screen change has its own transition: Gabriel and the angels hit instantly and dim away slowly, dark scenes fade in gently, and the candle flame uses a small spring so it leans when you tilt the phone and flickers more when you move fast.

Built for a dark field with bad signal

The app shell and art are cached on the phone at check-in, so the walk itself needs very little data. It's plain Node and vanilla JavaScript modules with zero dependencies, and the star goal (40% of the flock by default) can trigger a QLab cue for the castle lights.

Built with

Node.js (no dependencies)Vanilla JS modulesServer-sent eventsOSC over UDP (QLab)DeviceOrientation + cameraGeolocationService worker