I built a private travel journal for iPhone

konstantinosfr1 pts0 comments

How I built a private travel journal for iPhone - Konstantinos Fragkoulis

I have always enjoyed traveling. After visiting more than twelve countries, most of them several times, I started noticing a problem: I remembered the important moments, but the shape of each trip was slowly becoming less clear.

I wanted to know exactly when I was in a city. I wanted to remember which parts of it I had explored, which photos belonged to that visit, and how one stop connected to the next. More than anything, I wanted one place that could hold this history without asking me to record every trip manually.

I tried a few different solutions. Some travel apps let me mark countries and cities manually. They produced a nice map, but they did not really show anything more than a list of places I have visited. Apple Photos came closer because it already had my pictures, their dates, and often their locations. Its trip grouping, however, was a bit hit or miss. I sometimes found trips that were missing, split, or joined together in ways that did not match what happened.

For a while, one of the most accurate records of my travels came from Revolut (yes, the neobank). It would track payments made in other countries and estimate when I had traveled. I liked the presentation, but a banking app is not the right place, nor the right tool to keep a record of your life. What if you pay cash? What if you use a card from another bank? What if they remove the feature at some point? You really don’t need many reasons to realize that this is a bad idea.

Each option had some piece of what I wanted. None of them had the whole thing.

This led me to build Travel Log , a private travel journal for iPhone. It receives occasional location updates in the background, figures out the places where I stayed, groups those stays into trips, and builds a map of the places I have explored. It can also go through the metadata of my photos to infer places that I have visited and reconstruct trips from before the app was even installed.

Travel Log running with fictional sample data.

The app is currently in beta for iOS 26 or newer. It works best on Apple Intelligence enabled devices (iPhone 15 Pro or newer), but it can work on any iOS 26 supported device. If you would like to test it yourself, you can join the TestFlight beta. It requires “Always” location access for its main features. Photo access, calendar access, notifications, and iCloud sync are optional. In fact, the app does not require an internet connection and almost all of the features were designed to work primarily offline.

Starting with an imperfect signal

The simplest version of a location journal would record GPS coordinates all day. That would give us very accurate location data, but it comes with two major problems: it drains your battery and iOS requires the app to show a blue location arrow in the Dynamic Island.

Travel Log uses a different part of Core Location called Significant Location Change (SLC). Instead of keeping the app alive and asking for a constant stream of location updates, it registers with iOS and lets the operating system decide when the phone has moved far enough to send an update (Apple says >500 meters, >5 min from the last update, but that’s a minimum. Updates could come less often).

This system enables the most important feature of the app: you truly set it and forget it. There is no start button, no manual recording of trips, no requirement to keep the app open, no visible indicator, no nothing. You install the app, finish the setup, force close it, and go on with your day. In my own testing, the app keeps receiving SLC updates even after a device reboot, without any interaction from the user.

iOS is still in control of background activity and there is no guarantee that this will keep working forever. You can ultimately choose to disable background app refresh, or iOS may decide to stop delivering updates if the app is not used at all.

With that in mind, we end up with an app that gets sparse location updates rather than a detailed route. It may know that I was near my home, later near the airport, and later in another city. It will not necessarily know every road I took between them. That limitation shaped almost every decision that followed.

When iOS sends a location update, the app first checks whether it is usable. Old readings are ignored. Readings with extremely poor accuracy are also ignored. A reading that appears to come from high altitude can be discarded when the altitude itself looks trustworthy. This helps with photos and location updates recorded during flights, although it’s not perfect.

The remaining location is saved as a ping. A ping is simply one observation: a time, a pair of coordinates, an accuracy value, and a few details about where it came from. The app also places it inside one of the hexagon shaped areas used by Uber’s H3 hexagonal grid. Those hexagons later become the exploration map.

Turning pings...

location travel from updates places journal

Related Articles