Now live: Australia 🇦🇺 and New Zealand 🇳🇿 support Try it out

Code and Coordinates

engineering at Geocodio

We Built Our Own Travel App, and It Came with a Podcast

How Claude Code turned our family trip around Laracon AU into a private offline app, with a custom podcast for our drives.
claude-travel-agent-hero-pohutu-geyser-te-puia.jpg
By Mathias Hansen

Shortly after seven one morning in Rotorua, I asked Claude to plan our day around a geyser that erupts at 10:15 am. About fifteen minutes later, the plan was on everyone's phone, with a button to navigate to each stop.

That is what our own trip app, with Claude behind it, ended up looking like for us.

The trip started as a work trip. I'm giving a talk at Laracon AU in Brisbane on November 6, and Michele (my wife, and Geocodio's other co-founder) and I are working the Geocodio booth. If you're going, come by in one of the breaks and say hi.

But Brisbane is a long way from Denmark, so we made a family trip of it: New Zealand first, then the conference, then the reef in Cairns and a few days in Sydney. Our teenager came along too.

I started the planning in the Claude desktop app, then asked Claude for a handover file and moved the whole thing into Claude Code, which is where most of my work happens these days (we've written about that before). I figured a trip with this many moving parts was a good excuse to see how far that could go, and it went pretty far.

The app

All three of us needed one place to look. I was tired of hunting through my email for confirmation numbers, and Michele and our teenager shouldn't have to. It had to work offline, on planes and out on the reef, and it had to be private. So we built one.

Claude interviewed me first, with a lot of questions, most of them multiple choice: what the first screen should show when you open it in the middle of the day, how we would change plans from the road, and whether the app should nudge us or stay quiet until opened.

I am a very visual thinker, so I spent a good chunk of time iterating on mockups, before starting on the actual implementation.

From the interview and the mockups, Claude wrote a design spec and an implementation plan, then worked through the plan task by task. It built the app in about two days, and it was live on our phones before we flew. It is a PWA generated from the planner, the set of files the whole trip lives in, and hosted on Laravel Cloud. When plans change on the road, I tell Claude what changed, it pushes to main, and Laravel Cloud deploys it.

Why a web app

A PWA (progressive web app) is a website you add to your home screen. It opens full screen with its own icon, and it works offline, so on the phone it behaves like an app. I chose it over a native app for three reasons:

  • Updates go out in seconds. Claude pushes a change, and every phone has it the next time the app opens, with no App Store review or app updates in between.

  • It made iterating fast. The app kept changing right up to the day we flew, and it still changes on the road.

  • I was still waiting for our Apple Developer Program enrollment to go through, so a native app wasn't an option yet.

The Today page has the day's plan, the weather with a line about what to wear ("Jeans and a fleece. Not shorts weather."), the jet lag windows, and the local time next to Copenhagen and New York so we know whether we can call home. A long drive gets a drive card: the stops in order with a photo and a time for each, the total distance, when we'd be at the hotel, one button to open the whole route in Google Maps, and "Listen on the way".

The Today page: local time next to Copenhagen and New York, the weather and what to wear.
The Today page: local time next to Copenhagen and New York, the weather and what to wear.
A drive card: distance, arrival time, the route in Google Maps, and the episode for the drive.
A drive card: distance, arrival time, the route in Google Maps, and the episode for the drive.

The rest of the app is the things we kept asking each other about. Nearby has coffee, lunch and dinner picks for wherever we're staying, each with a walk time. Bookings has every confirmation and the tickets as PDFs, so they open out on the reef with no signal. On flight days the Today page shows live flight status. There is an offline street map with the day's places pinned, a calendar file of every timed item that we import into the family calendar, and a view for our teenager that hides the booking admin.

The drive times and distances come from Geocodio. A build step geocodes each place from its street address (a few places, like beaches, keep hand-set coordinates) and asks the distance API for the drive time and distance of each leg. Since Geocodio now covers Australia and New Zealand, a Rotorua hotel or a farm outside Matamata is a normal lookup. If you want Claude to call Geocodio itself while it plans, there is a Geocodio CLI with a Claude Code skill. Colleen wrote up that setup in Planning My Spring Break Trip with Claude Code + the Geocodio CLI, so I won't repeat it.

The drive from our Rotorua hotel to Hobbiton is 57.7 km as the crow flies and 74.3 km by road, about 70 minutes. Plan around the first number and you miss the tour check-in.

Addresses on the ground

There's also a work reason I'm glad we came now. Geocodio has just added Australia and New Zealand, and being here teaches you things about how addresses work that a dataset doesn't spell out. Rotorua's district straddles two regions, the Bay of Plenty and Waikato. The Hobbiton farm is described as being outside Matamata, but its address says Hinuera. And Brisbane and Sydney sit an hour apart for half the year, because Queensland skips daylight saving and New South Wales doesn't.

Some of the best lessons came from asking. Locals and taxi drivers will tell you what a place is called, which town it really belongs to, and how they would give directions to it. That's the gap between how addresses work in theory and on a map, and how people use them every day.

The podcast

We had a rental car and a few long drives ahead of us in New Zealand, and I wanted something to listen to that was about where we were going. Three of those drives got an episode: the slow way to Rotorua, Wai-O-Tapu, and Hobbiton. Each one tells the background stories of the places we're heading to, and points out things to look for on the way, so the drive is part of the trip.

The first episodes came out aimed too young, so I asked, "Does this keep in mind that [she's] a teenager?" Claude's answer: "Only partly. The facts suit a teenager, but in several places the tone is pitched at a younger child."

Then it interviewed me with multiple-choice questions about who is in the car and what each of them likes. It also asked what to cover and what to skip. That interview became Kiri and Jono, two Kiwi hosts who joke with each other, written for a teenager who likes behind-the-scenes film secrets and gross facts, with a running thread of word origins for Michele, who loves knowing where a place name comes from.

The episodes are written for our trip. The Hobbiton episode opens with the hosts asking how yesterday's geyser and luge went, and near the end they mention the two hours of driving to Auckland that come after the tour. The "bet you can't spot it" challenges are things on the road we're on, checked against the real route, so when the hosts say to look for a tunnel of native trees on the Mamaku Plateau, it is on the road ahead. Each segment has a Kiwi word of the segment, with its origin. There are no spoilers for the books our teenager hasn't read: The Hobbit is fair game, and when the ring comes up the hosts say "We'll come back to the ring."

Here is the first minute of the episode we listened to on the drive to Hobbiton.

The first minute of the episode for our drive to Hobbiton: the theme, the hosts checking in on yesterday's geyser and luge, and the first Kiwi word of the segment.

Making an episode is a pipeline. Claude writes the script from the plan for that day's drive: the route and what is on it, what we did the day before, and what is booked at the other end. ElevenLabs voices it as a dialogue between the two hosts. A transcript check compares what was spoken against the script and catches dropped lines, both voices are leveled to the same loudness, and a short theme and a jingle for each Kiwi word go on top. The finished MP3 ships inside the app, so it plays offline from the drive card. The podcast pipeline in the starter kit has the details.

Finding things that fit us

There is no shortage of things to do in New Zealand and Australia. The hard part is finding the ones that work for us: a teenager, two parents coming off long flights, and a conference in the middle.

My first prompt laid that out, along with an itinerary Michele had put together and a few recommendations from Marty from Laracon AU. In New Zealand we wanted a rental car, plenty of nature, and maybe a visit to Hobbiton, since we had read The Hobbit with our teenager.

Claude came back with 61 ideas, each with the story behind it. What I was missing was what we would be doing there, so I asked:

I also just want to know what each thing is. So when you say go visit the champagne pools. What does that actually mean? What is it and why is it important to see?

Me, to Claude

Claude added a plain "What it actually is" line to every idea. The Champagne Pool became a boardwalk around a fizzing hot lake with a bright orange rim ("nothing here is a swim, it's a spectacle"). That made it easy for all three of us to read through the list and vote on what to do.

It also caught mistakes before I made them. When I went to book Te Pō, an evening of Māori culture and a geyser in the dark at Te Puia, I nearly paid to see kiwis twice. Claude spotted that the "Te Pō combo" included the same kiwi house as the hatchery we had already planned, and picked the right ticket from a screenshot of the booking page.

For jet lag, I built our sleep and light plan in Timeshifter, which I can highly recommend, and the app shows it next to each day's plans. The first days after landing are deliberately light.

Everything to book, and everything to check

The flights alone were a puzzle: seven flights on five airlines, across a handful of time zones, with every time in local time. It's easy to get a date wrong. Flying from Denmark to New Zealand, we left on one day and landed close to midnight on the next. The hop from Auckland to Brisbane takes about three and a half hours, but on the clock you land 35 minutes after you leave. And Cairns to Sydney is three hours in the air but lands four hours later on the clock.

Claude kept every flight in the planner in local time, with the time change written next to it ("gain 3 h"), so nobody had to do the math at the gate.

Booking the flights and hotels is the obvious part. The rest is where I would have slipped up on my own, so Claude built a list of everything else and kept it current as the plan changed. Some of the items:

  • The NZeTA and the visitor levy, paid together, which can take up to 72 hours.

  • The NZ Traveller Declaration, which has to be submitted within 24 hours of the flight into Auckland. The plan put it in the Singapore transit.

  • Australia's eVisitor 651, which is free. The list says, in capitals, that this is the one and NOT the paid ETA app.

  • An International Driving Permit, because New Zealand rental desks are inconsistent about Danish licenses.

  • Travel insurance that covers everything.

Every booking followed the same loop. I book, I say "check my email", and Claude reads the confirmation. Then it updates the planner, the bookings list, the app and the calendar we share. That is how it caught that the Waiheke ferry tickets have to be collected an hour before sailing, and moved our departure that morning to 7:15 am.

Re-planning on the road

The slow way to Rotorua

We had landed in Auckland close to midnight, so nobody was up for a hike the next day. But we were up early, so I asked Claude for the most scenic route from Auckland to Rotorua, with a screenshot of two Google Maps options. The first answer had a couple of real walks on it.

Option 2 sounds fun, but we are not really up for hiking. Just a slow, scenic drive.

Me, to Claude

It rebuilt the day so every stop was ten minutes or less on foot. The swing bridge in the Karangahake Gorge is two minutes from the parking lot. Owharoa Falls is a one-minute walk. In Waihi, a gold town with a working open pit, the stops are the Cornish pumphouse and a lookout over the pit. I had a work podcast to record at the hotel at 4:00 pm, so it timed everything backwards from that with half an hour of slack.

Owharoa Falls, a one-minute walk from the car (ducklings included).
Owharoa Falls, a one-minute walk from the car (ducklings included).

The Lady Knox day

The best find in New Zealand came out of the podcast. The evening before Wai-O-Tapu, Claude wrote the episode for the drive, and at the end of its report it added a note: the episode mentions that the Lady Knox Geyser is set off with soap every day at 10:15 am, and that show was not in our plan.

Shortly after seven the next morning:

Planning to leave from the hotel by 9am at the latest and then we want to see the Lady Knox Geyser eruption. I also want to plan out lunch today. The Woolworths lunch yesterday was a bit sad.

Me, to Claude

Claude came back with a timed plan for the whole day, from leaving the hotel to the luge in the afternoon. I told it I had already bought the tickets and to check my email. It read the ticket page, found that you can drive straight to the geyser, and noticed that there are no toilets at Lady Knox, so the first row of the day became "toilets first". Then I asked for the schedule in the app with buttons I could tap to navigate. It added a Wai-O-Tapu page with timed stops, a Navigate button for each, and a trail map it drew itself from OpenStreetMap data, because the park publishes no usable one. It told me up front that its numbers would not match the numbered signs in the park. The page was on everyone's phone about fifteen minutes later, and the plan had us out the door at nine.

The page Claude added that morning: timed stops with Navigate buttons.
The page Claude added that morning: timed stops with Navigate buttons.
Wai-O-Tapu: steam out of a crater.
Wai-O-Tapu: steam out of a crater.

Where Claude got it wrong

Two minutes before that, when I asked about the weather, Claude's answer included "Your plan already skips the 10:15 geyser show, so nothing holds you to the morning." We very much wanted to see it. One sentence from me and it re-planned the day, but it had been ready to let the plan stand.

The planner also had the Kiwi Hatchery at 10:30 am. When I opened the booking page there were two slots, 9:15 and 11:15 am, and Claude caught the gap: "Your plan had 10:30, but that slot is not offered." It recommended 11:15 am, with a case for 9:15 if jet lag had everyone awake anyway.

Neither one cost us anything. But Claude will fill a gap in what it knows with something plausible, and it sounds as sure of that as it does of things it has checked. So far I check every booking against the source, and I say what I want early rather than assuming it is already in the plan.

Do this yourself

If you want to try this for your own trip, this is what mattered most for us.

  1. One set of plan files. The app, the calendar and the travel book are generated from them, so a plan change is one edit and a push.

  2. Write down the family: who is coming, what each person likes, how much energy you'll have, and any rules Claude should plan against. Once it's written down, you stop repeating yourself.

  3. Ask for the book-and-check list as well as the itinerary. The visa, the declaration, the driving permit and the insurance were the items I would have missed.

  4. Give Claude real tools: the Geocodio CLI for places and drive times, and your own booking emails for the facts of each booking.

  5. Let it interview you first. Both the app and the podcast got better once Claude asked questions before building.

To make that easier to try, we put the basic pieces in a starter kit you can clone: geocodio/trip-planner-starter-kit. It has a family profile and a trip file to fill in, starter prompts for Claude Code (from the first interview to the book-and-check list and re-planning on the road), a script that gets drive times from Geocodio, a small build that turns your trip into an offline web app, and the podcast pipeline. The README walks through how to make it your own.

This has been a fun project, and we're not done with it. There is a reef day and a bridge climb still ahead, and I'm sure a few more mornings where the plan gets rebuilt before breakfast.

Get new posts in your inbox

We write about what we're working on, thinking about, and getting so excited playing around with that we accidentally stay up a bit too late.

Thanks for subscribing!

A delightfully boring cookie banner

1 optional cookie from us
2 embeds blocked by default
0 ad tracking / data brokers

Geocodio would like to set one first-party cookie to remember how you found this site. Accepting also unblocks embedded videos and calendars, which set their own cookies.

Read the privacy policy