Web app · 2026
Estuary Line booking
Tickets, timetables and live departures for a river ferry that carries 9,000 people a day. Booking went from a phone call to forty seconds on a phone.
- Client
- Estuary Line
- Role
- Design and build, solo
- Year
- 2026
- Stack
- Astro
- TypeScript
- PostgreSQL
- Stripe
- Cloudflare Workers

The brief
Estuary Line runs four boats across the river every twenty minutes. Season tickets were sold at a window, single tickets on board in cash, and the timetable was a PDF that went out of date every time the tide did. They wanted people to buy a ticket on their phone on the pier, and to see the next boat without opening a PDF.
What made it hard
- Live in eleven weeks, before the summer timetable
- The pier has weak mobile signal, so pages must work on a slow 3G connection
- Staff check tickets with a scanner that only reads QR codes printed on paper or shown at full brightness
- Two languages from day one
Results
- Tickets bought online
- Before: 0%After: 61%
- Time to buy a ticket
- Before: Phone callAfter: 40 s
- Largest paint on 3G
- After: 1.2 s
- Calls to the office about times
- Before: 140 a weekAfter: 30 a week
How it was built
The first week went to the pier, not the editor. I spent two mornings watching people queue at the ticket window and timed how long the signal took to load a page: about nine seconds for a typical ferry company’s home page. That number became the budget. The departure board and the ticket screen had to be useful in under two.
A board that is right
The old timetable was a PDF because the times change with the tide. I wrote a small service that takes the operator’s sailing plan and the boats’ live positions and produces the next six departures for each pier. The board on the site is plain HTML from the edge, refreshed with a few lines of script, so it shows something useful before any JavaScript arrives.
Buying a ticket in forty seconds
Checkout is three steps: the crossing, the ticket, the payment. Apple Pay and Google Pay come first because on a pier nobody wants to type a card number. The ticket is a QR code on a screen that raises its own brightness, because the scanners on board are old and fussy, and it is also emailed as a PDF for people who’d rather print it.
What I’d do differently
I underestimated how many people buy tickets for someone else. A “send to a friend” link came in week ten and should have been in the first sketch.
Screens

The ticket screen turns the brightness up for the scanner. 
Departures update from the boats' positions every 30 seconds.
Mara rebuilt our booking in eleven weeks and the phone stopped ringing with people who couldn't buy a ticket. That was the whole point.
Credits
- Photography
- Estuary Line's own crew
- Ticket scanners
- The operator's existing hardware

