
The first feature most road trip planners ship is search. The second is a map. Calendar sync, if it lands at all, lands later โ buried behind an export button, or behind a paid tier, or as an afterthought that produces one event for the entire trip and calls it done.
Fernweh built calendar sync first.
Not because it's the most exciting feature on the surface. Search is more exciting. The map is more exciting. Routing around low bridges in a 3.2 m camper is more exciting. Calendar sync looks, on the spec sheet, like a tickbox.
It isn't.
The trip isn't the thing
A trip lives in two places. It lives inside the planner โ the map, the stops, the per-leg drive times. That's the place you go to think about the trip.
But the trip also lives in the calendar โ yours, your partner's, your colleagues'. That's the place the rest of your life finds out the trip is happening. Without the calendar, the trip is a private idea. With it, the trip is a thing the people around you can see and plan around.
A planner that doesn't put the trip on the calendar is asking you to be the integration. You build the trip in app A. You re-enter the dates and the rough plan into app B. If anything changes โ the ferry is on a different day, you slip an overnight, you add a stop โ you do that work again, by hand, every time. The planner is helpful inside its own window and useless outside it.
The trip isn't the thing in the planner. The trip is the thing in the calendar.
What sync usually gets wrong
When tools do attempt calendar sync, they tend to fail in one of three ways.
One event for the whole trip. A single "Iceland Road Trip โ Aug 12โ22" block. This is the laziest model. It tells your partner you're away. It tells you nothing else. The Friday you fly home looks the same on the calendar as the Tuesday you cross the Highlands.
An ICS export. A file you download and double-click. It imports a snapshot. The moment you move a stop, the snapshot is wrong, and the calendar is stale until you re-export and re-import. The trip and the calendar drift apart. Most users export once, forget the workflow, and silently abandon it.
An events feed. A read-only subscription URL. Better than ICS, but still one-way and usually batched. The events show up in a separate calendar your partner has to subscribe to manually, your colleagues never see, and the changes propagate on a delay that nobody can predict.
All three treat the calendar as a destination โ a place the trip data goes to die. None of them treat the calendar as part of the trip.
What Fernweh does instead
A Fernweh trip writes one event per drive leg, not one event per trip.
A leg is the drive between two stops. A four-day trip with eight stops is seven legs and therefore seven events. Each event uses the same title shape โ "Drive: [Origin] โ [Destination]" โ so a calendar week with Fernweh events in it looks like a list of named drives, not a vague block of "vacation".
Each event starts when Fernweh expects you to leave and ends when Fernweh expects you to arrive. Not "all day". Not "approximate". The exact computed times for that leg.
The event location is the destination stop's address. So if you tap the event on your watch on the drive itself, the next stop is what you get directions to, not the original starting point.
The event notes carry the leg's distance and travel time. A glance answers the questions you ask before any drive: how long is this one, how far is it.
And โ this is the part most syncs get wrong โ when the trip changes, the calendar changes with it. Reorder a stop and the affected events shift. Rename a stop and every event that touched it updates its title. Remove a stop and the legs that touched it disappear from the calendar. Add a new stop and the new legs appear.
It's a live link, not an export. The calendar is part of the trip.
The per-leg model fits the per-event model
The reason this works is that Apple Calendar already thinks in events with start times, end times, titles, and locations. A trip thinks in legs with departure times, arrival times, named endpoints, and routes. The mapping is one-to-one.
Most planners model a trip as a collection โ a wrapper around stops, with a start date and an end date and a name. That wrapper has no obvious counterpart on the calendar. The calendar wants events; the wrapper isn't an event.
When you instead model a trip as a thing made of legs, and each leg already carries the four attributes a calendar event needs, sync becomes the smallest possible feature. You're not translating between two data models. You're reading the same model from a different angle.
That's why Fernweh shipped it first. Once the per-leg model existed โ and it had to exist anyway, because per-leg ETAs only make sense if a leg is a first-class thing โ the calendar work was small. Skipping it would have been the strange choice.
What it feels like on a Sunday afternoon
Here is what calendar sync feels like, in practice.
You build a three-day loop in Fernweh on a Sunday afternoon. Munich โ Salzburg โ Hallstatt โ Munich. Five legs. You connect your calendar, the events appear.
Monday morning your partner opens their phone. They see "Drive: Munich โ Salzburg" at 09:00 on the 14th. They see "Drive: Salzburg โ Hallstatt" at 14:30 on the 15th. They see the drive home on the 16th. They don't ask you what time you're leaving. They don't ask what you're doing on Thursday morning. They saw it.
Your colleague who handles the on-call rotation sees a block of focused-driving time across the same days and reaches for someone else without sending a question.
Tuesday you decide to flip Salzburg and Hallstatt โ Hallstatt first, then Salzburg. You move one stop in the trip view. The two events for the 14th and 15th swap their titles, swap their order, swap their destinations.
You don't tell anyone. They notice when they need to.
The version of this feature that wasn't worth building
There's a version of calendar sync we considered and rejected.
One event per trip. Title: "Road trip: Munich โ Salzburg โ Hallstatt โ Munich". Description: a markdown dump of the itinerary.
It would have been faster to build. It would have looked the same on the spec sheet โ "calendar sync: yes". And it would have failed in exactly the way ICS exports fail: the moment the trip changed, the calendar would have lied about the trip until somebody noticed and re-synced.
The feature that's worth building is the one that survives the second edit. The first edit is easy. The second edit is where most sync features get quietly turned off and never used again.
Why this matters more than it looks
A trip planner that never leaves its own window is a private notebook with a map. A trip planner that lives on your calendar is part of how you organise the next month of your life.
Calendar sync isn't a marketing feature. You don't notice it the way you notice a new map style. You notice it the third time you change a stop and the people around you simply know about the change without being told.
That's the bet. That a planner is most useful when it disappears into the rest of your life, instead of asking the rest of your life to keep up with the planner.
So we built it first.
Fernweh is the road trip planner for iOS that thinks about your trip the way you do โ places first, times derived from places, the whole thing live on the calendar you already use. Get it on the App Store.