Hey everyone, I’m Daniel.

It’s been 103 days since I last posted about Reitti, and what a journey it’s been! What started as a personal project on June 5, 2025, has grown immensely. In that time, Reitti has seen exactly 52 releases, culminating last week in the biggest and most ambitious update yet: Reitti 4.0! Today, I want to recap everything that’s happened since my last post.

The past few months have been dedicated to transforming how I interact with my movement data, and the community’s support has been incredible:

  • 1,979 Stars on GitHub.
  • 467 Commits to main with 419 PRs merged.
  • 374 Issues closed.
  • 25 Contributors on GitHub.
  • 13 Languages supported.

What is Reitti?

“Reitti” is Finnish for “route” or “path.” It’s a personal location tracking and analysis application. It is fully local and private, and no data ever leaves your server. You own the database, and you own the memories.

Reitti 4.0: A New Map Experience

This release focuses on taking your map experience to the next level. I’ve completely rebuilt the map from the ground up, switching to a foundation powered by MapLibre GL JS and deck.gl. This enables a new level of visualization for your movements, even with millions of data points from years of tracking, it remains blazingly fast and responsive!

  • Rewind & Replay Your Journeys: You can now watch your past movements unfold. This allows you to see how you moved through a specific day or trip.
  • New Map Layers: I’ve added new map layers that enhance your data visualization:
    • Terrain Layer: See the elevation changes along your paths. This adds a new dimension to your movement data.
    • Globe Projection: Zoom out and view your entire journey across a 3D globe.
    • Satellite View: Get a real-world perspective with high-resolution satellite imagery.
    • 3D Buildings: In supported areas, watch your paths weave through 3D building models.
  • The Aggregate View: This feature helps understand your routine. The new aggregate view condenses all your movement data into a 24-hour window, allowing you to visualize your typical movements. Ever wondered where you usually are at 8 PM, or what your most common morning commute looks like?
  • Fast Performance for Years of Data: Displaying multiple years of movement data used to be a challenge. Not anymore! Reitti 4.0 has been heavily optimized to handle vast amounts of historical data without breaking a sweat, ensuring a smooth and responsive experience even for the most avid trackers. The timeline will also see improvements in an upcoming release, as simply displaying all trips and visits for a given time range doesn’t always yield meaningful information.
  • Flexible Path Visualizations: Now you can choose between:
    • Raw Paths: See every single point as recorded.
    • Default Paths: My improved, cleaned-up path rendering.
    • Edge Bundling: A new option that reduces visual clutter by bundling nearby paths together, making trends and frequent routes easier to spot.

Other New Functionality

Expanded Language Support

Thanks to the incredible dedication of the community translators, Reitti has expanded its global reach and now officially supports more languages, including:

  • ¡Hola! Spanish!
  • こんにちは (Konnichiwa)! Japanese! (special thanks to @GunseiKPaseri!)
  • Привіт (Pryvit)! Ukrainian!
  • Merhaba! Turkish!

These additions are a huge step towards making Reitti accessible to even more users worldwide.

Place Editing with Geocoding

When editing a place, you can now directly request geocoding suggestions and select the most accurate result from various available providers. This makes managing your locations much more intuitive and precise.

Faster & More Robust Visit and Trip Detection

I’ve completely overhauled the algorithms for detecting visits and trips. The new system is not only significantly faster but also much more robust, leading to more accurate and reliable insights into your time spent and journeys taken.

New Dedicated Open-Source Services!

As part of this update, I’m introducing two new, free-to-use services that power Reitti 4.0 and are available for everyone:

  • My Own Reverse Geocoder (Paikka): I’ve developed my very own reverse geocoder, free for everyone to use at https://geo.dedicatedcode.com/. You can find its source on GitHub (Paikka). This provides fast, reliable reverse geocoding directly from my infrastructure.
  • My Own Tile Server: To complement the new map experience, I’ve also launched my own tile server at https://tiles.dedicatedcode.com/, based on the fantastic OpenFreeMap data. This ensures consistent, high-performance map tiles for all Reitti users.

BREAKING CHANGES – Please Read Carefully

While Reitti 4.0 added new features, there are a couple of crucial changes you need to be aware of for a smooth upgrade:

  • rabbitmq has been fully removed. This simplifies the stack and reduces dependencies.
  • photon has been removed from the default docker-compose file. While it’s still supported if you wish to use it, it’s no longer a default component thanks to my new open-source geocoding service!

It is absolutely essential that you update your docker-compose file during the upgrade process. Please visit https://www.dedicatedcode.com/projects/reitti/4.0/upgrade/ for the necessary steps to get your Reitti instance running seamlessly on 4.0.

Full v4.0.0 Release Notes: https://github.com/dedicatedcode/reitti/releases/tag/v4.0.0

Thank You

This project thrives because of its community. Thank you to everyone who contributed this year. To the new contributors like u/Jonsen94, u/GunseiKPaseri, u/sieren, u/wjansenw, u/subha0319, and u/per_terra your code, ideas, and dedication are invaluable. Special thanks go to the translators who ensure Reitti is accessible worldwide, and to everyone who posts issues, suggests features, and supports the project indirectly.

What’s Next?

Thanks to the incredible support from my Ko-fi supporters, I’ve recently acquired a dedicated GPS logger! This means I’m now setting my sights on bringing multi-device support to Reitti. Imagine this: you use your phone for day-to-day tracking, while simultaneously logging a run or ride with another device, leaving your phone at home. My goal is to seamlessly bring these timelines back together into one cohesive view. Along with this, I’ll be introducing more powerful editing capabilities, such as defining “no-visit” areas and the ability to remove individual GPS points.

For the Memories feature I explored local AI for natural-language travel diaries, it’s still very much on my mind. However, I haven’t yet managed to get decent results with a small, local LLM that supports multiple languages. Time will tell if this ever happens, as I only want to introduce massive new requirements when they can deliver a truly tremendous impact for all of you. If anyone has a tip, please drop me a message.

Development Transparency

I use AI as a development tool to accelerate certain aspects of the coding process, but all code is carefully reviewed, tested, and intentionally designed. AI helps with boilerplate generation and problem-solving, but the architecture, logic, and quality standards remain entirely human-driven.

I appreciate your feedback and support! Here are a few ways to connect:

  • Support My Work: If you find this project useful, you can support my efforts by buying me a coffee on Ko-fi.
  • Report Issues: Encountered a bug? Open an issue on GitHub Issues.
  • Discuss on Lemmy: Join the conversation or reach out on Lemmy.
  • Connect on Reddit: Find me here u/daniel_graf
  • Join us on IRC: Chat with us live in my IRC channel #reitti on libera.chat.
  • Github: https://github.com/dedicatedcode/reitti

I’ll be in the comments to answer your questions.

  • danielgraf@discuss.tchncs.deOP
    link
    fedilink
    English
    arrow-up
    1
    ·
    8 days ago

    So here are the commands to delete the data directly from the database. It would be best to stop reitti before that.

    You need to replace :start_time and :end_time with the actual timestamps in the form of ‘2025-05-31T03:19:13.000Z’

    -- Here we first delete the data
    DELETE FROM raw_location_points WHERE user_id = 1 AND timestamp >  :start_time AND timestamp < :end_time;
    DELETE FROM processed_visits WHERE user_id = 1 AND start_time < :end_time AND end_time > :start_time;
    DELETE FROM trips WHERE user_id = 1 AND start_time < :end_time AND end_time > :start_time;
    
    -- now we mark the last point before and the first point after the deleted range as unprocessed
    UPDATE raw_location_points SET processed = FALSE WHERE id IN (SELECT id FROM public.raw_location_points WHERE user_id = 1 AND timestamp < :start_time ORDER BY timestamp DESC LIMIT 1);
    UPDATE raw_location_points SET processed = FALSE WHERE id IN (SELECT id FROM public.raw_location_points WHERE user_id = 1 AND timestamp > :end_time ORDER BY timestamp LIMIT 1);
    

    The next time, data comes in these newly marked points will be processed with the incoming data and should fix up everything.

    Let me know if you need further help.

    In the upcoming release, you would be able to delete them by hand in the UI. But I am working on the final stretches until I can declare the first beta release.

    • KToomey@feddit.uk
      link
      fedilink
      English
      arrow-up
      1
      ·
      7 days ago

      With my tech skills, I’m likely to turn my server into some sort of ill-tempered frog if I try that, so I’ll hang on until the functionality reaches the normal release version of the UI. It’s only one day that looks a bit ugly for now - the rest is perfect. Thanks again for taking the time and for all the help though, very much appreciated.

      • danielgraf@discuss.tchncs.deOP
        link
        fedilink
        English
        arrow-up
        2
        ·
        7 days ago

        Yes, then it is propably better to wait instead of deleting the data in that way.

        When everything goes right we have one or two weeks till the first beta version. Stay tuned 😉