Tech News
← Back to articles

Recreationally overengineering my location history

read original related products more articles

2025-08-19 overengineering, software

It’s been a while since I published my last #overengineering blog post. That’s not because I didn’t overengineer things, I was busier starting projects as opposed to finishing projects. Today, we shall fix this lack of content.

I like data. That’s about as surprising as the sun rising in the morning. A big part of that is visualizing various aspects of my life. I consider myself lucky enough to be able to travel quite a bit, so I always liked having a visual history of all the places I’ve been - and I’m sure lots of people can relate to that. I used to be quite happy with the Google Maps Location Timeline, but I stopped that a while ago for obvious privacy reasons. So I decided to build my own, and that’s what I’ll be talking about here. Okay, let’s go1.

The project

The main thing I wanted out of this is a map that’s showing places I have been in some visually pleasing way. This is what I ended up with:

In addition to that, I have a way to share my live location. I don’t use this very often, but occasionally I need to share my real-time location with people, for example when I’m on my way to pick someone up. The live location sharing works with only a link, so I can just drop that into a chat and make it easy to access.

To bootstrap the data, I imported my previous data from Google Maps. I have some significant gaps in there for unknown reasons, but it’s still a lot of travel history. I don’t need an exact account of where I’ve been every second, I just want to have markers whenever I’m in a new part of the world, so the location updates can be quite infrequent. Since I’m an iOS user, I created a small application that sends “significant location” updates, which allows me to collect location data with virtually no impact on battery life, but I’ll talk more about that later.

The backend

For quite some time now, I’ve been developing web projects that need backend logic in Rust. I’m not saying that you should do it, but I’m mainly not saying that because I don’t particularly like it when half of the internet is yelling at me. But for me, it’s the perfect choice. Because I’m lazy. And now, some of you are confused. I’m lazy, and yet I write my backends in Rust? Isn’t Rust much slower in getting something done?

Well yes, no, maybe. It’s true that if you’re a beginner, you probably won’t enjoy the process too much. But if you’re a slightly more intermediate Rust developer, it’s not too bad. To speed things up for me, I built a set of “project templates” that contain all the stuff I want to have. My biggest template, which I lovingly call webservice-chonk , is a really fun mixture of my favorite components: axum as the base, sqlx for database access, minijinja for server-side templating, clap to parse CLI arguments or environment variables. It even includes a frontend asset builder based on Vite2, static file serving for those assets, ready-to-use health-check routes. It even includes a simple OpenID Connect integration, because I do most of the authentication in my personal applications using Authelia. The chonky template is a solid 1k LOC, and while that sounds like a lot, it’s not all that much for a production-grade application. If I start a new project, I can just clone the entire project and immediately start writing “business logic”. I highly recommend anyone who spends a lot of time in projects like this to build their own templates like this3.

... continue reading