Over the past couple of years I've been building Crestr, a free, open-source hiking route planner, entirely on my own. This is a short write-up of what that has looked like in practice and a few things I'd do the same (or differently) next time.

Why Crestr exists

I wanted a tool that made it easy to plan multi-day walks without relying on closed platforms. Most of the existing options either locked features behind subscriptions or didn't give enough control over the routing and data. So I started building the version I wished existed.

I also wanted to learn a lot and what better than to do something complex, break a few things, then fix them.

The stack

The current stack is deliberately straightforward:

  • Backend: Python + FastAPI for the API and routing logic
  • Database: PostgreSQL (currently using SQLModel for the DX)
  • Frontend: Vanilla JavaScript and OpenLayers for the map UI
  • Infra: A Hetzner VPS running Docker + Caddy for reverse proxy and TLS

No heavy framework on the front end. That choice has kept the surface area small and made it easier to understand every part of the request path.

However, as the project grows I think I might have a few friends work with me on a refactor to a frontend framework.

What worked

Shipping something people can actually use, even if it's still in beta, has been the most useful feedback loop. Having a handful of beta testers, almost 50 GitHub stars, and early supporters helping with hosting costs makes the work feel less abstract.

Owning the full stack also forced me to learn the boring but necessary pieces: DNS, TLS certificates, backups, basic monitoring, and keeping a single VPS healthy. Those skills transfer.

What I'd change

I spent too long polishing the map UI before the core routing was solid. Next time I'd lock the critical path (route generation, saving, sharing) first and treat everything else as optional until that felt reliable.

I'd also document decisions earlier. A lot of the "why" lives only in my head or in scattered commit messages. This blog is partly an attempt to fix that.

What's next

Crestr continues to evolve while I start a Foundation Year at the University of Manchester (on the way to a Computer Science degree). The plan is to keep the project public and keep writing about the interesting (and the messy) parts.

If you want to follow along, the code is on GitHub and I'll post more technical notes here as things progress.