345
submitted 2 weeks ago* (last edited 2 weeks ago) by danielgraf@discuss.tchncs.de to c/selfhosted@lemmy.world

Hey everyone!

I'm excited to introduce Reitti, a location tracking and analysis application designed to help you gain insights about your movement patterns and significant places—all while keeping your data private on your own server.

Core Capabilities:

  • Visit Tracking: Automatically recognizes and categorizes the places where you spend time, using customizable detection algorithms
  • Trip Analysis: Analyzes your movements between locations to understand how you travel whether by walking, cycling, or driving
  • Interactive Timeline: Visualizes all your past activities on an interactive timeline with map and list views that show visit duration, transport method, and distance traveled

Photo Integration:

  • Connect your self-hosted Immich photo server to seamlessly display photos taken at specific locations right within Reitti's timeline. The interactive photo viewer lets you browse galleries for each place.

Data Import Options:

  • Multiple Formats Supported: Reitti can import existing location data from GPX, GeoJSON, and Google Takeout (JSON) backups
  • (Near) Real-time Updates: Automatically receive location info via mobile apps like OwnTracks, GPSLogger or our REST API

Customization:

  • Multi-geocoding Services: Configurable options to convert coordinates to human-readable addresses using providers like Nominatim
  • User Profiles: Customize individual display names, password management, and API token security under your own control

Self-hosting:

  • Reitti is designed to be deployed on your own infrastructure using Docker containers. We provide configuration templates to set up linked services like PostgreSQL, RabbitMQ and Redis that keep all your location data private.

Reitti is still early in development but has already developed extensive capabilities. I'd love to hear your feedback and answer any questions to tailor Reitti to meet the community's needs.

Hope this sparks some interest!

Daniel

top 50 comments
sorted by: hot top controversial new old
[-] Zagorath@aussie.zone 25 points 2 weeks ago

Fuck yeah this is awesome! The detail of Immich integration is just the icing on top of an awesome cake!

How demanding is it on server resources? Am I likely to be able to run it on an old Raspberry Pi that's also running a couple of other relatively light tasks? How much storage does it end up using over time? I'm probably going to try and get it running either on my Pi or my Synology NAS, though the latter has had issues with Docker containers in the past depending on the container's dependencies...

[-] danielgraf@discuss.tchncs.de 11 points 2 weeks ago

I have no clue if a raspberry will handle it. There a a couple of services involved to make it fast, but they are then another burden like RabbitMQ. Which make ingesting data instantaneous but you need extra processing power to handle the queues. It all comes with a tradeoff.

For size, there is mainly the PostGIS DB. I just checked and my db is around 800 MB for roughtly 8 1/2 Years of data.

Photon (the reverse geocode enabled in the compose file) is another beast. For Germany it takes 14 GB of storage while running, if you let PARALLELL updates enabled you can double that every time the index is updated. But you can remove that from the compose file and rely on external Geocoders. It is described in https://github.com/dedicatedcode/reitti?tab=readme-ov-file#reverse-geocoding-options

[-] Zagorath@aussie.zone 1 points 2 weeks ago

Oh interesting. I've just read through that link, and I was assuming that something similar to the "external only" option would have been the only way it worked. More specifically, I thought it'd just store a list of historical points and display those on an OSM overlay. But it seems like even "external only" is much more involved than that.

What happens with self-hosted Photon if you specify a country, but then also visit another country? (I assume in hybrid mode it's as simple as "use Photon in your country, use Nominatim otherwise?)

But yeah, definitely sounds like a Pi is probably not gonna cut it. I'll have to see if my Synology can do it, or if the weird OS restrictions Synology imposes prevent it.

[-] danielgraf@discuss.tchncs.de 2 points 2 weeks ago

If you use Photon and only have your main country available, it will fallback to the configured external Geo-coding-services since Photon will not return a result then. So the order of execution is:

  • first try Photon
  • if it does not return anything, try to call one or all of the available Geo coding services.
[-] acchariya@lemmy.world 3 points 2 weeks ago

Looks to be a java application with a number of services running alongside- I don't think it's going to be lightweight to run on resource constrained devices, but sweet project anyway! (Side note, no clue how you engineers find the time to hack on things like this, I feel like I've got so little time to myself I cannot imagine dedicating it to a project like this)

[-] scarilog@lemmy.world 14 points 2 weeks ago

My only concern is battery usage. Google has the advantage of OS integration, which skims location data for timeline history even when another app accesses location, which uses essentially no battery (since you would've been using location for that other app anyway).

But it's awesome that a tool like this exists anyways, great work.

[-] danielgraf@discuss.tchncs.de 6 points 2 weeks ago

Thank you :)

I understand your concerns, this is something every additional app would have to deal with.

For me it is ok to have GPSLogger running all the time, I think for what it is doing it is quite easy on the battery but I do not use my phone actively that much and I am happy if it survives a day which it does.

[-] Sibbo@sopuli.xyz 8 points 2 weeks ago

This looks amazing, and I will try it out once it has reasonable NixOS support.

I especially like the immich integration.

Does it increase battery consumption of the phone a lot?

[-] danielgraf@discuss.tchncs.de 10 points 2 weeks ago

Reitti on its own does not run on your phone. It relies on external apps to track your GPS location like GPSLogger or Owntracks. They will increase the battery consumption but I think it is bearable. I personally have setup GPSLogger to fetch every 30 seconds a GPS location and then sends it every hour to reitti. With that i do not see that more power usage. Currently starting to test how the power drain is with a 15 seconds interval.

[-] beerclue@lemmy.world 3 points 2 weeks ago

May I ask what you mean by NixOS support? There's a docker compose you could use in their repo...

[-] Sibbo@sopuli.xyz 2 points 2 weeks ago* (last edited 2 weeks ago)

But then I'd have to combine that with existing services myself. NixOS ensures that there is only one postgres running for example, such that not every service starts its own postgres instance.

For immich, for example the following is enough for a most basic configuration:

services.immich.enable = true;
services.immich.port = 2283;
[-] beerclue@lemmy.world 1 points 2 weeks ago

I see what you mean, interesting. Didn't really look at NixOS as a server os. I personally prefer using multiple compose files (in the process of migrating to k8s). I share resources too, like in your example, I just point to the existing DB instance, not create a new one for each new service.

[-] smiletolerantly@awful.systems 3 points 2 weeks ago

Better open a package request (or pull request :D) then 😄

[-] ada@piefed.blahaj.zone 6 points 1 week ago

I managed to break our instance. I imported several years worth of google takeout location data, and now the "stay-detection-queue" is stalled.

[-] danielgraf@discuss.tchncs.de 5 points 1 week ago

Congratulations 😆

To help with that I would need some information:

  • does it show anything in the logs?
  • what do you mean by several years or how big was the Records.json?

Thank you for testing 🙂

[-] ada@piefed.blahaj.zone 3 points 1 week ago

It's a 1gig json file that has about 10 years of data. I get multiple repeats of the rabbit timeout in the logs. The Job Status section tells me that it's got just under 9 hours of processing remaining for just over 16,000 in the stay-detection-queue. The numbers change slightly, so something is happening, but it's been going for over 12 hours now, and the time remaining is slowly going up, not down.

***
[ntContainer#2-1] c.d.r.s.p.VisitDetectionService          : Detected 61806 stay points for user ada
reitti-1  | 2025-07-04T03:06:17.848Z  WARN 1
***
[ntContainer#2-1] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it
reitti-1  |
reitti-1  | com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - delivery acknowledgement on channel 9 timed out. Timeout value used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more, class-id=0, method-id=0)
reitti-1  |     at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.checkShutdown(BlockingQueueConsumer.java:493) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.nextMessage(BlockingQueueConsumer.java:554) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1046) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1021) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1423) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1324) ~[spring-rabbit-3.2.5.jar!/:3.2.5]
reitti-1  |     at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
reitti-1  | Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - delivery acknowledgement on channel 9 timed out. Timeout value used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more, class-id=0, method-id=0)
reitti-1  |     at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:528) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:349) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:193) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:125) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:761) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.AMQConnection.access$400(AMQConnection.java:48) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:688) ~[amqp-client-5.25.0.jar!/:5.25.0]
reitti-1  |     ... 1 common frames omitted
load more comments (12 replies)
[-] MrQuallzin@lemmy.world 6 points 2 weeks ago

This is really awesome! I was just about to start looking for something like this, so great timing. Going to get this up on my Unraid server tomorrow and play around with it

[-] BlueEther@no.lastname.nz 6 points 2 weeks ago* (last edited 2 weeks ago)

This looks good, I'm currently using dawarich and owntracks to track our families 5 week road trip around the south island of New Zealand (https://no.lastname.nz/post/1468113). If I can find a spare moment in our travels and a good internet connection I'll try and spin up an image and test it out.

One thing that I would love is to be able to have multiple people displayed on a single map (my wife [kids when they have their own phones with data], brother, mother and a few close friends - we already use google maps for this)

[-] danielgraf@discuss.tchncs.de 5 points 2 weeks ago* (last edited 2 weeks ago)

That sounds like an awesome idea, actually the data is stored for every user separately depending on the used api token or when you login and do a data import. I will create a feature request for it.

But bear in mind, reitti is not meant to be a real-time tracking app. At the moment, data is processed every 10 minutes.

[-] BlueEther@no.lastname.nz 1 points 2 weeks ago

Real time is nice, but not a must have at least for my use case.

[-] otter@lemmy.ca 5 points 2 weeks ago

Cool!

I love the UI for this one, it's unique compared to the others

[-] danielgraf@discuss.tchncs.de 3 points 2 weeks ago* (last edited 2 weeks ago)

Thanks otter, I tried to have a historical look. Like going to the past and revive some memories. Hope it worked out. I am actually pretty happy with it.

[-] Zwuzelmaus@feddit.org 4 points 2 weeks ago

I still have a phone containing Google, and cannot change this situation (maybe with my next phone). Usually, I switch off location services very often and I avoid such tracking apps because all my data goes to Google then.

Would it be advisable to use this at all before I get rid of Google?

[-] danielgraf@discuss.tchncs.de 4 points 2 weeks ago

Hello @Zwuzelmaus@feddit.org, i usually use GPSLogger for Android to track my location during the day and this periodically sends the data to reitti whenever i am back at home. I have no idea if you switch off location services what happens on the GPSLogger side of the chain. If it still be able to access GPS I see no problem, if not than this sadly will break the usecase for reitti.

It relies on a consistent GPS tracking data to be able to do its thing

[-] Zwuzelmaus@feddit.org 2 points 2 weeks ago

if you switch off location services

...then no app gets a location anymore.

[-] Atropos@lemmy.world 4 points 2 weeks ago

This is really neat, I'm going to spin it up tomorrow!

[-] danielgraf@discuss.tchncs.de 3 points 2 weeks ago

Let me know how it worked out. I am deploying it to my server via docker without an problems, but maybe they are some quirks i missed. :D

[-] Atropos@lemmy.world 2 points 2 weeks ago

Of course, happy to do so. I'll report back with my experience when I have it working!

[-] pfr@lemmy.sdf.org 4 points 1 week ago

Hell yes! I turned off location data for immich but now I can use this!

[-] danielgraf@discuss.tchncs.de 2 points 1 week ago

It is actually awesome if you have some old photos with the geodata attached and scim through Reitti and suddenly one of them shows up :)

[-] pemptago@lemmy.ml 4 points 2 weeks ago

This looks awesome! I'd just been collect my GPS data thinking one day I'd analyze/visualize it on my own-- not expecting anyone else to make a such a comprehensive program. The UI looks really slick. I'm looking forward to testing it out. Hopefully this weekend. Thank you for this!

[-] danielgraf@discuss.tchncs.de 3 points 2 weeks ago

Let me know how it works out for you. If you have the gpx files, you can simply import them inside the settings menu.

[-] Zagorath@aussie.zone 3 points 2 weeks ago

I love that it supports multiple formats for important location as well as multiple geocoders. But that makes me wonder, would it be feasible to support multiple image libraries? There's a bunch of different FOSS photo libraries out there. I think Nextcloud is the main other one I've heard about 'in the wild', as it were. Or is there too much bespoke Immich code in there for that to be a simple plug-and-play option?

[-] danielgraf@discuss.tchncs.de 3 points 2 weeks ago

no, that would not be a problem as soon as the other image library has an api reitti could query. It just happens that I am settled with immich and had no other needs at the moment.

If you need a specific one, drop a feature request and I will have a look.

[-] Zagorath@aussie.zone 1 points 2 weeks ago

I don't actually have any personally. I'm still with Google Photos for now and hadn't decided what to switch to, with Immich, Nextcloud, and the non-open Synology Photos being the top of my list. Legitimately, what a tool like this supports could be a factor I use to help decide.

How complicated is the code interfacing with Immich? Is it a piece someone not familiar with your overall code base could relatively easily pick up and make a pull request for?

[-] danielgraf@discuss.tchncs.de 1 points 2 weeks ago

I do not think it is that complicated. The front-end sends a request to the back-end with the current selected day. This triggers a search in Immich returning all photos taken on that specific day. This is returned to the front-end and this than does the heavy lifting like filtering them to the current map bounds, displaying them on the map at a specific location. We proxy all request from the front-end through our server because of CORS issues and I did tried to avoid having to configure Immich besides creating a token for the API.

One would need to either create a specific IntegrationService like ImmichIntegrationService and then figure out a way how the user can configure that. The easiest would be that we just then call all available ones even if I do not see the use case of having multiple Photo-Servers. But it would make the code in Reitti cleaner and would not hurt if we do not configure 20 simultaneous servers :D

[-] warmaster@lemmy.world 3 points 2 weeks ago

This looks amazing, congratulations and thank you for making it FOSS. I was wondering if you are considering integrating with Home Assistant.

load more comments (5 replies)
[-] Kernal64@sh.itjust.works 2 points 2 weeks ago

This looks really cool! I just have one question. Is it possible to just install this like normal software on a Linux machine or does it require Docker?

[-] danielgraf@discuss.tchncs.de 1 points 2 weeks ago

Thank you.

At the moment i do not have any plans of providing a way of running it without docker. Mainly because of time to support that.

Since it is a Spring-Boot-Application it would be possible to create a jar file which you can execute or deploy as a service with systemd. But then you have to make sure all prerequisites are also running. That is the one thing I like about docker and especially docker compose.

But short answer: Yes, it is possible but you are on your own at the moment. I would help and maybe we can add a section to the readme how to do it.

[-] emrsmsrli@lemmy.world 2 points 2 weeks ago

What's the difference from Dawarich, if I may ask? Beside from a better name :)

load more comments (3 replies)
[-] someacnt@sh.itjust.works 2 points 1 week ago

I am slightly bothered by how the logo is quite off-center, is it intentional?

[-] danielgraf@discuss.tchncs.de 5 points 1 week ago

It was not intentional but after bothering not about it because i had other things on my mind i got used to it and now like it the way it is.

But for everyone who is bothered by that. If Reitti reaches 1k stars on Github I will add a switch to use a centered one 😊

[-] nieceandtows@programming.dev 2 points 2 weeks ago

I've been putting off setting up an immich server. Would this do well if hosted on the same machine?

[-] corsicanguppy@lemmy.ca 1 points 2 weeks ago

Docker-dependent? It looks fantastic, but I have no containers in my home-lab -- and it's based on my time managing OS security for an OS. I'm stuck living vicariously through the rest of you, so report back often.

[-] SomeDudeFromSpace@lemmy.ml 1 points 2 weeks ago

Great project! Any recommendations for an iOS app for this? I've been using OwnTracks, but it works very unreliably. As far as I understand, it's an OS problem since Apple allows for very limited background processing for the sake of saving battery, so there's not much any logging apps can do, but I was just curious if someone found a way around it.

load more comments (1 replies)
load more comments
view more: next ›
this post was submitted on 03 Jul 2025
345 points (99.7% liked)

Selfhosted

49547 readers
273 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS