{"id":33918394,"url":"https://github.com/tess1o/geopulse","last_synced_at":"2026-04-01T19:55:34.778Z","repository":{"id":302303338,"uuid":"1011908106","full_name":"tess1o/geopulse","owner":"tess1o","description":"A self-hosted, privacy-first location timeline platform: an open-source alternative to Google Timeline with automatic trip detection, Immich integration, and rich analytics.","archived":false,"fork":false,"pushed_at":"2026-03-23T11:18:37.000Z","size":43778,"stargazers_count":694,"open_issues_count":8,"forks_count":28,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-24T07:06:19.680Z","etag":null,"topics":["gps-tracker","gps-tracking","java","owntracks","postgis","postgis-database","postgres","privacy","quarkus","quarkus-native","self-hosted","timeline","vue3"],"latest_commit_sha":null,"homepage":"https://tess1o.github.io/geopulse/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tess1o.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-01T14:10:47.000Z","updated_at":"2026-03-24T04:29:21.000Z","dependencies_parsed_at":"2025-08-19T11:04:38.709Z","dependency_job_id":"3cdcb968-b1c5-4542-8e9c-2fad6bddb03a","html_url":"https://github.com/tess1o/geopulse","commit_stats":null,"previous_names":["tess1o/geopulse"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/tess1o/geopulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tess1o%2Fgeopulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tess1o%2Fgeopulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tess1o%2Fgeopulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tess1o%2Fgeopulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tess1o","download_url":"https://codeload.github.com/tess1o/geopulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tess1o%2Fgeopulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gps-tracker","gps-tracking","java","owntracks","postgis","postgis-database","postgres","privacy","quarkus","quarkus-native","self-hosted","timeline","vue3"],"created_at":"2025-12-12T08:20:32.283Z","updated_at":"2026-04-01T19:55:34.770Z","avatar_url":"https://github.com/tess1o.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# GeoPulse\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"frontend/public/geopulse-logo.svg\" alt=\"GeoPulse Logo\" width=\"180\"/\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eThe open-source, privacy-first Google Timeline alternative.\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-BSL_1.1-red\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://tess1o.github.io/geopulse/docs/getting-started/deployment/docker-compose\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-Ready-blue.svg\" alt=\"Docker\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Self--Hosted-Yes-green.svg\" alt=\"Self-Hosted\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Privacy-First-green.svg\" alt=\"Privacy First\"\u003e\n\u003c/p\u003e\n\nGeoPulse transforms raw GPS data from OwnTracks, Overland, Dawarich, GPSLogger, Home Assistant, and other sources into a\nsearchable timeline of stays, trips, and movement patterns. It runs fully on your own infrastructure and integrates with\n**Immich** so your photos appear directly on your map history.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/Timeline.jpg\" alt=\"GeoPulse Timeline\" width=\"800\" style=\"border-radius: 8px;\"/\u003e\n  \u003cp\u003e\u003cem\u003eComprehensive timeline visualization with automatic trip classification.\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## Quick installation\n\n```bash\n# Create directory and download config\nmkdir geopulse \u0026\u0026 cd geopulse\ncurl -L -o .env https://raw.githubusercontent.com/tess1o/GeoPulse/main/.env.example\ncurl -L -o docker-compose.yml https://raw.githubusercontent.com/tess1o/GeoPulse/main/docker-compose.yml\n\n# Start\ndocker compose up -d\n```\n\n**Access:** [http://localhost:5555](http://localhost:5555)  \n*Note: For production, review your `.env` for security-related settings first.*\n\nNeed MQTT, custom domains, or hardening? See\nthe [Docker Deployment Guide](https://tess1o.github.io/geopulse/docs/getting-started/deployment/docker-compose).\n\n---\n\n## Why GeoPulse\n\n- **Privacy-first and self-hosted:** Your location data remains on your own infrastructure.\n- **Open ecosystem:** Works with popular GPS apps (OwnTracks, Overland) and tools like Immich/Home Assistant.\n- **Full data ownership:** Import historical data and export your data in standard formats anytime.\n- **Lightweight runtime:** Typically under 100MB RAM and under 1% CPU in regular usage.\n\n---\n\n## Features\n\n**Timeline \u0026 Analysis**\n\n- **Smart Detection:** Automatically converts GPS points into stays, trips, and data gaps.\n- **Custom Logic:** Fully configurable detection sensitivity and travel mode classification.\n- **Deep Insights:** Analytics for distance, visit frequency, and movement patterns over time.\n- **Immich Integration:** Photos from your library appear directly on your map timeline.\n\n**Sources \u0026 Syncing**\n\n- **Real-time Tracking:** Supports OwnTracks (HTTP/MQTT), Overland, GPSLogger, Home Assistant, Traccar, or Colota.\n- **Universal Import:** Bulk import from Google Timeline, GPX, GeoJSON, OwnTracks exports, and CSV.\n\n**Sharing \u0026 Privacy**\n\n- **Friends System:** Per-user visibility controls for live location and history.\n- **Guest Access:** Shareable links with optional password protection and instant revocation.\n- **Multi-user Ready:** Built-in invitations, roles, and admin audit logs.\n- **Enterprise Auth:** OIDC/SSO support alongside standard username/password login.\n\n**Platform \u0026 Performance**\n\n- **Lightweight:** Typically under 100MB RAM and 1% CPU usage.\n- **Self-Sovereign:** No telemetry, no analytics beacons, and no third-party tracking.\n- **Data Freedom:** Full data export and per-account deletion support.\n- **Optional AI:** Bring your own OpenAI-compatible key for AI-assisted insights.\n\n---\n\n## 📸 Feature Tour\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand gallery\u003c/summary\u003e\n\n### Dashboard\n![Dashboard overview with key activity metrics](images/dashboard.png)\n*High-level overview of your activity.*\n\n### Journey Insights\n![Journey insights with milestones and badges](images/journey_insights_full.jpg)\n*Global travel statistics, milestones, and badges.*\n\n### Monthly Trends\n![Monthly movement stats and heatmap](images/month_stats.jpg)\n*Monthly summaries and movement heatmap.*\n\n### Location Analytics\n![Location analytics map view](images/location_analytics_map.jpeg)\n*Map-first analytics similar to Timeline views.*\n\n### Country/City Stats\n![Country and city travel statistics](images/location_analytics_countries.png)\n*Track travels by country and city.*\n\n### GPS Data Management\n![Raw GPS data management interface](images/gps_data.png)\n*Inspect and manage raw location points.*\n\n### AI Assistant\n![AI chat assistant for location data questions](images/AI_Chat.png)\n*Natural-language queries for your data.*\n\n\u003c/details\u003e\n\n\n## Deployment Options\n\n### Docker Compose\n\nFastest path for local and single-server use. See\nthe [Full Docker Guide](https://tess1o.github.io/geopulse/docs/getting-started/deployment/docker-compose).\n\n### Kubernetes / Helm\n\nBest for managed clusters and advanced production. See\nthe [Helm Guide](https://tess1o.github.io/geopulse/docs/getting-started/deployment/helm-deployment).\n\n```shell\nhelm repo add geopulse https://tess1o.github.io/geopulse/charts\nhelm repo update\nhelm install my-geopulse geopulse/geopulse\n```\n\n**Post-deployment steps:**\n\n1. Set `GEOPULSE_ADMIN_EMAIL` to define the first admin.\n2. Create an account with that email and finish setup in the Admin Panel.\n3. See [Initial Setup Guide](https://tess1o.github.io/geopulse/docs/system-administration/initial-setup) for more.\n\n---\n\n## 📖 Docs \u0026 Next Steps\n\n* **New users:** [Quick Start Guide](https://tess1o.github.io/geopulse/docs/getting-started/quick-start)\n* **GPS setup:** [GPS Sources Overview](https://tess1o.github.io/geopulse/docs/user-guide/gps-sources/overview)\n* **Deployment:** [Docker](https://tess1o.github.io/geopulse/docs/getting-started/deployment/docker-compose) | [Kubernetes](https://tess1o.github.io/geopulse/docs/getting-started/deployment/kubernetes-helm) | [Env Variables](https://tess1o.github.io/geopulse/docs/getting-started/deployment/environment-variables)\n* **Administration:** [Admin Panel](https://tess1o.github.io/geopulse/docs/system-administration/configuration/admin-panel) | [OIDC/SSO](https://tess1o.github.io/geopulse/docs/system-administration/configuration/oidc-sso)\n* **Maintenance:** [Backup \u0026 Restore](https://tess1o.github.io/geopulse/docs/system-administration/maintenance/backup-restore) | [Updating](https://tess1o.github.io/geopulse/docs/system-administration/maintenance/updating)\n* **Full documentation:** [Documentation Portal](https://tess1o.github.io/geopulse/)\n\n---\n\n## 📜 License \u0026 Commercial Use\n\nGeoPulse is licensed under the **Business Source License 1.1 (BSL 1.1)**.\n\n- Free for personal, educational, and non-commercial use.\n- Commercial use requires a separate commercial license.\n\nSee [LICENSE](./LICENSE) for full terms.  \nFor commercial licensing: `kerriden1@gmail.com`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftess1o%2Fgeopulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftess1o%2Fgeopulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftess1o%2Fgeopulse/lists"}