base on Self-hosted alternative to Google Location History (Google Maps Timeline) # π Dawarich: Your Self-Hosted Location History Tracker
[![Discord](https://dcbadge.limes.pink/api/server/pHsBjpt5J8)](https://discord.gg/pHsBjpt5J8) | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/H2H3IDYDD) | [![Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dfreika%26type%3Dpatrons&style=for-the-badge)](https://www.patreon.com/freika)
Donate using crypto: [0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4](https://etherscan.io/address/0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4)
[![CircleCI](https://circleci.com/gh/Freika/dawarich.svg?style=svg)](https://app.circleci.com/pipelines/github/Freika/dawarich)
---
## πΈ Screenshots
![Map](screenshots/map.jpeg)
*Map View*
![Stats](screenshots/stats.jpeg)
*Statistics Overview*
![Import](screenshots/imports.jpeg)
*Imports page*
---
## πΊοΈ About Dawarich
**Dawarich** is a self-hosted web app designed to replace Google Timeline (aka Google Location History). It enables you to:
- Visualize your data on an interactive map.
- Import your location history from Google Maps Timeline and Owntracks.
- Explore statistics like the number of countries and cities visited, total distance traveled, and more!
π **Changelog**: Find the latest updates [here](CHANGELOG.md).
---
## β οΈ Disclaimer
- π οΈ **Under active development**: Expect frequent updates, bugs, and breaking changes.
- β **Do not delete your original data** after importing into Dawarich.
- π¦ **Backup before updates**: Always [backup your data](https://dawarich.app/docs/tutorials/backup-and-restore) before upgrading.
- π **Stay up-to-date**: Make sure you're running the latest version for the best experience.
---
## π§ Supported Location Tracking
You can track your location with the following apps:
- π [Overland](https://dawarich.app/docs/tutorials/track-your-location#overland)
- π°οΈ [OwnTracks](https://dawarich.app/docs/tutorials/track-your-location#owntracks)
- πΊοΈ [GPSLogger](https://dawarich.app/docs/tutorials/track-your-location#gps-logger)
- π‘ [Home Assistant](https://dawarich.app/docs/tutorials/track-your-location#homeassistant)
Simply install one of the supported apps on your device and configure it to send location updates to your Dawarich instance.
---
## π How to Start Dawarich Locally
1. Clone the repository.
2. Run the following command to start the app:
```bash
docker-compose up
```
3. Access the app at `http://localhost:3000`.
βΉοΈ **To stop the app**, press `Ctrl+C`.
---
## π§ How to Install Dawarich
- **[Docker Setup](https://dawarich.app/docs/intro#setup-your-dawarich-instance)**
- **[Synology](https://dawarich.app/docs/tutorials/platforms/synology)**
π **Default Credentials**
- **Username**: `
[email protected]`
- **Password**: `password`
(Feel free to change them in the account settings.)
---
## π Features
### π Location Tracking
- Track your live location using one of the [supported apps](#-supported-location-tracking).
### πΊοΈ Location History Visualization
- View your historical data on a map with customizable layers:
- Heatmap
- Points
- Lines between points
- Fog of War
### π΅ Areas
- Draw areas on the map so Dawarich could suggest your visits there.
### π Visits (Beta)
- Dawarich can suggest places you've visited and allow you to confirm or reject them.
### π Statistics
- Analyze your travel history: number of countries/cities visited, distance traveled, and time spent, broken down by year and month.
### πΈ Integrations
- Provide credentials for Immich or Photoprism (or both!) and Dawarich will automatically import geodata from your photos.
- You'll also be able to visualize your photos on the map!
### π₯ Import Your Data
- Import from various sources:
- Google Maps Timeline
- OwnTracks
- Strava
- Immich
- GPX/GeoJSON files
- Photosβ EXIF data
### π€ Export Your Data
- Export your data to GeoJSON or GPX formats.
---
## π Guides and Tutorials
- [Set up Reverse Proxy](https://dawarich.app/docs/tutorials/reverse-proxy)
- [Import Google Takeout](https://dawarich.app/docs/tutorials/import-existing-data#sources-of-data)
- [Track Location with Overland](https://dawarich.app/docs/tutorials/track-your-location#overland)
- [Track Location with OwnTracks](https://dawarich.app/docs/tutorials/track-your-location#owntracks)
- [Export Your Data](https://dawarich.app/docs/tutorials/export-your-data)
π οΈ More guides available in the [Docs](https://dawarich.app/docs/intro).
---
## π οΈ Environment Variables
Check the documentation on the [website](https://dawarich.app/docs/environment-variables-and-settings) for detailed information about environment variables and settings.
---
## π« Star History
As you could probably guess, I like statistics.
<a href="https://star-history.com/#Freika/dawarich&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=Freika/dawarich&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=Freika/dawarich&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=Freika/dawarich&type=Date" />
</picture>
</a>
", Assign "at most 3 tags" to the expected json: {"id":"11108","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"