388 Commits

Author SHA1 Message Date
Evgenii Burmakin
e86969e25f Merge branch 'dev' into feature/2fa 2026-03-29 21:28:07 +02:00
Eugene Burmakin
714b94c52b Introduce Immich photo enrichment feature 2026-03-29 21:26:46 +02:00
Eugene Burmakin
afc45c0220 Make 2fa config optional 2026-03-29 00:24:50 +01:00
Eugene Burmakin
2568163cc1 Add 2fa 2026-03-28 23:59:39 +01:00
Eugene Burmakin
2ce6e4d6c8 Increase devise security and fix OIDC callback 2026-03-28 23:06:45 +01:00
Eugene Burmakin
fd07e2bed0 Add residency feature with a heatmap showing days spent in each country, and a new "Day per Country" tool in Map V2. 2026-03-27 22:46:17 +01:00
Eugene Burmakin
b323228213 Fix multiple issues 2026-03-26 20:36:02 +01:00
Eugene Burmakin
f8ca4ed325 Fix number of issues 2026-03-23 22:51:58 +01:00
Eugene Burmakin
c9bff8fb6c Introduce update all visits bulk action and restore points user_id index 2026-03-22 13:05:10 +01:00
Eugene Burmakin
c98b3e4a76 Fix multiple issues 2026-03-19 18:55:39 +01:00
Eugene Burmakin
4a50cc3311 Fix layout and show address for points on map 2026-03-19 18:35:09 +01:00
Evgenii Burmakin
79b10421b9 Merge pull request #2391 from Freika/fix/raw-arch-update
Rework raw data archiving system
2026-03-18 23:28:57 +01:00
Eugene Burmakin
82d56ee126 Rework raw data archiving system 2026-03-18 22:46:06 +01:00
Eugene Burmakin
846e34d87b Fix minor stuff 2026-03-18 21:15:32 +01:00
Eugene Burmakin
84ba8abf55 Rework point counting and design system for Dawarich 2026-03-17 23:33:07 +01:00
Eugene Burmakin
ea5f72d330 Fix live family members points showing up on the map 2026-03-14 16:20:14 +01:00
Evgenii Burmakin
57b69d1adc Merge branch 'dev' into feature/family-history 2026-03-14 13:30:40 +01:00
Evgenii Burmakin
8ee5eb8623 Merge pull request #2356 from frankhommers/feat/api-imports-endpoint
feat(api): add file import endpoints (POST/GET /api/v1/imports)
2026-03-14 12:52:55 +01:00
Evgenii Burmakin
5597e263c3 Merge pull request #2363 from diegoal3mx/fix-locationiq-support
Fix LocationIQ support
2026-03-14 12:51:01 +01:00
Eugene Burmakin
49db5e4e82 Implement family location history viewing along with some fixes 2026-03-13 23:19:52 +01:00
Eugene Burmakin
f510c7b5c9 Minor fixes 2026-03-12 21:35:38 +01:00
Eugene Burmakin
3ade65f9c8 Update app version 2026-03-12 21:22:38 +01:00
Eugene Burmakin
9e2ceb3c8c Update user management 2026-03-12 21:08:07 +01:00
diegoal3mx
4b26db70cc Fix LocationIQ Support 2026-03-09 00:41:45 -06:00
Eugene Burmakin
82d74b29f5 Upgrade upgrade url 2026-03-08 20:01:23 +01:00
Eugene Burmakin
255a440e31 Add nice looking google and github buttons to the login page 2026-03-08 12:21:43 +01:00
Frank Hommers
1004813cad feat(api): add file import endpoints (POST/GET /api/v1/imports)
Add API endpoints for importing files (GPX, GeoJSON, KML, OwnTracks, etc.)
using API key authentication. This enables external tools and integrations
to upload files without requiring browser-based session auth, which is
essential for OIDC-configured instances.

Endpoints:
- POST /api/v1/imports   - Upload a file for import (multipart/form-data)
- GET  /api/v1/imports   - List user's imports (paginated)
- GET  /api/v1/imports/:id - Show import status and details

The create action accepts a multipart file upload, creates an Active
Storage blob, and saves an Import record. The existing after_commit
callback automatically enqueues Import::ProcessJob for background
processing. Source type is auto-detected by Imports::SourceDetector.
2026-03-07 17:25:27 +01:00
Eugene Burmakin
7fff82b269 Add plan enpoint and reduce ambiguity around "data window" language in the UI 2026-03-05 20:27:32 +01:00
Evgenii Burmakin
1839d300b2 Merge pull request #2329 from Freika/feature/lite-archival-jobs
5: feat: add Lite archival warning jobs
2026-03-02 23:29:20 +01:00
Eugene Burmakin
de5d0d542d Fix data retention gating for Lite users 2026-03-02 23:10:02 +01:00
Eugene Burmakin
ea16ab541f Fix minor issues 2026-03-02 22:34:40 +01:00
Eugene Burmakin
3f898610e0 Minor fixes 2026-03-02 22:34:17 +01:00
Eugene Burmakin
1ba869ccb0 Remove self_hoster plan 2026-03-02 22:34:17 +01:00
Eugene Burmakin
5ba15530e5 feat: add API gating for Lite plan — write 403, read scoping, rate limiting
- Add `require_write_api!` guard to PointsController for create, update,
  destroy, and bulk_destroy actions. Lite users receive 403 with clear
  JSON error and upgrade URL.
- Add `scoped_points` helper to ApiController that filters Lite users to
  a 12-month timestamp window. Pro and self-hoster users see all data.
- Add rack-attack gem with Redis backend for per-plan rate limiting:
  Lite 200 req/hr, Pro 1,000 req/hr, self-hosters exempt.
- Add X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  headers on all API responses for rate-limited plans.
- Custom 429 response with Retry-After header and upgrade URL.
- Full test coverage: 14 new specs (points write gating, read scoping,
  rate limit headers, throttle behavior).
2026-03-02 22:33:32 +01:00
Eugene Burmakin
0a1214ad34 feat: add Lite archival warning jobs
Daily Sidekiq job checks all Lite users for data approaching archival:
- 11 months: in-app warning notification
- 11.5 months: email via UsersMailer#archival_approaching
- 12 months: in-app banner about archived data

Each threshold is tracked in user settings to prevent duplicate
warnings. Scheduled daily at 03:00 via sidekiq-cron on the
existing :archival queue.
2026-03-01 22:57:56 +01:00
Evgenii Burmakin
b135ee7cd4 Merge branch 'dev' into feature/async-user-deletion 2026-02-26 00:02:02 +01:00
Eugene Burmakin
246499b476 Fix rubocop and biome linting issues 2026-02-24 21:59:40 +01:00
Eugene Burmakin
8bb4ab099c Rework user data import-export and replace some js with turbo/stimulus 2026-02-22 10:40:43 +01:00
Eugene Burmakin
4df4255623 Introduce a proper timeline 2026-02-17 21:57:11 +01:00
Evgenii Burmakin
5788bafe2a Feature/insights api (#2255)
* 1.1.0 (#2226)

* fix: move foreman to global gems to fix startup crash (#1971)

* Update exporting code to stream points data to file in batches to red… (#1980)

* Update exporting code to stream points data to file in batches to reduce memory usage

* Update changelog

* Update changelog

* Feature/maplibre frontend (#1953)

* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet

* Implement phase 1

* Phases 1-3 + part of 4

* Fix e2e tests

* Phase 6

* Implement fog of war

* Phase 7

* Next step: fix specs, phase 7 done

* Use our own map tiles

* Extract v2 map logic to separate manager classes

* Update settings panel on v2 map

* Update v2 e2e tests structure

* Reimplement location search in maps v2

* Update speed routes

* Implement visits and places creation in v2

* Fix last failing test

* Implement visits merging

* Fix a routes e2e test and simplify the routes layer styling.

* Extract js to modules from maps_v2_controller.js

* Implement area creation

* Fix spec problem

* Fix some e2e tests

* Implement live mode in v2 map

* Update icons and panel

* Extract some styles

* Remove unused file

* Start adding dark theme to popups on MapLibre maps

* Make popups respect dark theme

* Move v2 maps to maplibre namespace

* Update v2 references to maplibre

* Put place, area and visit info into side panel

* Update API to use safe settings config method

* Fix specs

* Fix method name to config in SafeSettings and update usages accordingly

* Add missing public files

* Add handling for real time points

* Fix remembering enabled/disabled layers of the v2 map

* Fix lots of e2e tests

* Add settings to select map version

* Use maps/v2 as main path for MapLibre maps

* Update routing

* Update live mode

* Update maplibre controller

* Update changelog

* Remove some console.log statements

* Pull only necessary data for map v2 points

* Feature/raw data archive (#2009)

* 0.36.2 (#2007)

* fix: move foreman to global gems to fix startup crash (#1971)

* Update exporting code to stream points data to file in batches to red… (#1980)

* Update exporting code to stream points data to file in batches to reduce memory usage

* Update changelog

* Update changelog

* Feature/maplibre frontend (#1953)

* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet

* Implement phase 1

* Phases 1-3 + part of 4

* Fix e2e tests

* Phase 6

* Implement fog of war

* Phase 7

* Next step: fix specs, phase 7 done

* Use our own map tiles

* Extract v2 map logic to separate manager classes

* Update settings panel on v2 map

* Update v2 e2e tests structure

* Reimplement location search in maps v2

* Update speed routes

* Implement visits and places creation in v2

* Fix last failing test

* Implement visits merging

* Fix a routes e2e test and simplify the routes layer styling.

* Extract js to modules from maps_v2_controller.js

* Implement area creation

* Fix spec problem

* Fix some e2e tests

* Implement live mode in v2 map

* Update icons and panel

* Extract some styles

* Remove unused file

* Start adding dark theme to popups on MapLibre maps

* Make popups respect dark theme

* Move v2 maps to maplibre namespace

* Update v2 references to maplibre

* Put place, area and visit info into side panel

* Update API to use safe settings config method

* Fix specs

* Fix method name to config in SafeSettings and update usages accordingly

* Add missing public files

* Add handling for real time points

* Fix remembering enabled/disabled layers of the v2 map

* Fix lots of e2e tests

* Add settings to select map version

* Use maps/v2 as main path for MapLibre maps

* Update routing

* Update live mode

* Update maplibre controller

* Update changelog

* Remove some console.log statements

---------

Co-authored-by: Robin Tuszik <mail@robin.gg>

* Remove esbuild scripts from package.json

* Remove sideEffects field from package.json

* Raw data archivation

* Add tests

* Fix tests

* Fix tests

* Update ExceptionReporter

* Add schedule to run raw data archival job monthly

* Change file structure for raw data archival feature

* Update changelog and version for raw data archival feature

---------

Co-authored-by: Robin Tuszik <mail@robin.gg>

* Set raw_data to an empty hash instead of nil when archiving

* Fix storage configuration and file extraction

* Consider MIN_MINUTES_SPENT_IN_CITY during stats calculation (#2018)

* Consider MIN_MINUTES_SPENT_IN_CITY during stats calculation

* Remove raw data from visited cities api endpoint

* Use user timezone to show dates on maps (#2020)

* Fix/pre epoch time (#2019)

* Use user timezone to show dates on maps

* Limit timestamps to valid range to prevent database errors when users enter pre-epoch dates.

* Limit timestamps to valid range to prevent database errors when users enter pre-epoch dates.

* Fix tests failing due to new index on stats table

* Fix failing specs

* Update redis client configuration to support unix socket connection

* Update changelog

* Fix kml kmz import issues (#2023)

* Fix kml kmz import issues

* Refactor KML importer to improve readability and maintainability

* Implement moving points in map v2 and fix route rendering logic to ma… (#2027)

* Implement moving points in map v2 and fix route rendering logic to match map v1.

* Fix route spec

* fix(maplibre): update date format to ISO 8601 (#2029)

* Add verification step to raw data archival process (#2028)

* Add verification step to raw data archival process

* Add actual verification of raw data archives after creation, and only clear raw_data for verified archives.

* Fix failing specs

* Eliminate zip-bomb risk

* Fix potential memory leak in js

* Return .keep files

* Use Toast instead of alert for notifications

* Add help section to navbar dropdown

* Update changelog

* Remove raw_data_archival_job

* Ensure file is being closed properly after reading in Archivable concern

* Add composite index to stats table if not exists

* Update changelog

* Update entrypoint to always sync static assets (not only new ones)

* Add family layer to MapLibre maps (#2055)

* Add family layer to MapLibre maps

* Update migration

* Don't show family toggle if feature is disabled

* Update changelog

* Return changelog

* Update changelog

* Update tailwind file

* Bump sentry-rails from 6.0.0 to 6.1.0 (#1945)

Bumps [sentry-rails](https://github.com/getsentry/sentry-ruby) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/getsentry/sentry-ruby/releases)
- [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-ruby/compare/6.0.0...6.1.0)

---
updated-dependencies:
- dependency-name: sentry-rails
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump turbo-rails from 2.0.17 to 2.0.20 (#1944)

Bumps [turbo-rails](https://github.com/hotwired/turbo-rails) from 2.0.17 to 2.0.20.
- [Release notes](https://github.com/hotwired/turbo-rails/releases)
- [Commits](https://github.com/hotwired/turbo-rails/compare/v2.0.17...v2.0.20)

---
updated-dependencies:
- dependency-name: turbo-rails
  dependency-version: 2.0.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Bump webmock from 3.25.1 to 3.26.1 (#1943)

Bumps [webmock](https://github.com/bblimke/webmock) from 3.25.1 to 3.26.1.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.25.1...v3.26.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-version: 3.26.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Bump brakeman from 7.1.0 to 7.1.1 (#1942)

Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 7.1.0 to 7.1.1.
- [Release notes](https://github.com/presidentbeef/brakeman/releases)
- [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md)
- [Commits](https://github.com/presidentbeef/brakeman/compare/v7.1.0...v7.1.1)

---
updated-dependencies:
- dependency-name: brakeman
  dependency-version: 7.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump redis from 5.4.0 to 5.4.1 (#1941)

Bumps [redis](https://github.com/redis/redis-rb) from 5.4.0 to 5.4.1.
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 5.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Put import deletion into background job (#2045)

* Put import deletion into background job

* Update changelog

* fix null type error and update heatmap styling (#2037)

* fix: use constant weight for maplibre heatmap layer

* fix null type, update heatmap styling

* improve heatmap styling

* fix typo

* Fix stats calculation to recursively reduce H3 resolution when too ma… (#2065)

* Fix stats calculation to recursively reduce H3 resolution when too many hexagons are generated

* Update CHANGELOG.md

* Validate trip start and end dates (#2066)

* Validate trip start and end dates

* Update changelog

* Update migration to clean up duplicate stats before adding unique index

* Fix fog of war radius setting being ignored and applying settings causing errors (#2068)

* Update changelog

* Add Rack::Deflater middleware to config/application.rb to enable gzip compression for responses.

* Add composite index to points on user_id and timestamp

* Deduplicte points based on timestamp brought to unix time

* Fix/stats cache invalidation (#2072)

* Fix family layer toggle in Map v2 settings for non-selfhosted env

* Invalidate cache

* Remove comments

* Remove comment

* Add new indicies to improve performance and remove unused ones to opt… (#2078)

* Add new indicies to improve performance and remove unused ones to optimize database.

* Remove comments

* Update map search suggestions panel styling

* Add yearly digest (#2073)

* Add yearly digest

* Rename YearlyDigests to Users::Digests

* Minor changes

* Update yearly digest layout and styles

* Add flags and chart to email

* Update colors

* Fix layout of stats in yearly digest view

* Remove cron job for yearly digest scheduling

* Update CHANGELOG.md

* Update digest email setting handling

* Allow sharing digest for 1 week or 1 month

* Change Digests Distance to Bigint

* Fix settings page

* Update changelog

* Add RailsPulse (#2079)

* Add RailsPulse

* Add RailsPulse monitoring tool with basic HTTP authentication

* Bring points_count to integer

* Update migration and version

* Update rubocop issues

* Fix migrations and data verification to remove safety_assured blocks and handle missing points gracefully.

* Update version

* Update calculation of time spent in a country for year-end digest email (#2110)

* Update calculation of time spent in a country for year-end digest email

* Add a filter to exclude raw data points when calculating yearly digests.

* Bump trix from 2.1.15 to 2.1.16 in the npm_and_yarn group across 1 directory (#2098)

* 0.37.1 (#2092)

* fix: move foreman to global gems to fix startup crash (#1971)

* Update exporting code to stream points data to file in batches to red… (#1980)

* Update exporting code to stream points data to file in batches to reduce memory usage

* Update changelog

* Update changelog

* Feature/maplibre frontend (#1953)

* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet

* Implement phase 1

* Phases 1-3 + part of 4

* Fix e2e tests

* Phase 6

* Implement fog of war

* Phase 7

* Next step: fix specs, phase 7 done

* Use our own map tiles

* Extract v2 map logic to separate manager classes

* Update settings panel on v2 map

* Update v2 e2e tests structure

* Reimplement location search in maps v2

* Update speed routes

* Implement visits and places creation in v2

* Fix last failing test

* Implement visits merging

* Fix a routes e2e test and simplify the routes layer styling.

* Extract js to modules from maps_v2_controller.js

* Implement area creation

* Fix spec problem

* Fix some e2e tests

* Implement live mode in v2 map

* Update icons and panel

* Extract some styles

* Remove unused file

* Start adding dark theme to popups on MapLibre maps

* Make popups respect dark theme

* Move v2 maps to maplibre namespace

* Update v2 references to maplibre

* Put place, area and visit info into side panel

* Update API to use safe settings config method

* Fix specs

* Fix method name to config in SafeSettings and update usages accordingly

* Add missing public files

* Add handling for real time points

* Fix remembering enabled/disabled layers of the v2 map

* Fix lots of e2e tests

* Add settings to select map version

* Use maps/v2 as main path for MapLibre maps

* Update routing

* Update live mode

* Update maplibre controller

* Update changelog

* Remove some console.log statements

* Pull only necessary data for map v2 points

* Feature/raw data archive (#2009)

* 0.36.2 (#2007)

* fix: move foreman to global gems to fix startup crash (#1971)

* Update exporting code to stream points data to file in batches to red… (#1980)

* Update exporting code to stream points data to file in batches to reduce memory usage

* Update changelog

* Update changelog

* Feature/maplibre frontend (#1953)

* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet

* Implement phase 1

* Phases 1-3 + part of 4

* Fix e2e tests

* Phase 6

* Implement fog of war

* Phase 7

* Next step: fix specs, phase 7 done

* Use our own map tiles

* Extract v2 map logic to separate manager classes

* Update settings panel on v2 map

* Update v2 e2e tests structure

* Reimplement location search in maps v2

* Update speed routes

* Implement visits and places creation in v2

* Fix last failing test

* Implement visits merging

* Fix a routes e2e test and simplify the routes layer styling.

* Extract js to modules from maps_v2_controller.js

* Implement area creation

* Fix spec problem

* Fix some e2e tests

* Implement live mode in v2 map

* Update icons and panel

* Extract some styles

* Remove unused file

* Start adding dark theme to popups on MapLibre maps

* Make popups respect dark theme

* Move v2 maps to maplibre namespace

* Update v2 references to maplibre

* Put place, area and visit info into side panel

* Update API to use safe settings config method

* Fix specs

* Fix method name to config in SafeSettings and update usages accordingly

* Add missing public files

* Add handling for real time points

* Fix remembering enabled/disabled layers of the v2 map

* Fix lots of e2e tests

* Add settings to select map version

* Use maps/v2 as main path for MapLibre maps

* Update routing

* Update live mode

* Update maplibre controller

* Update changelog

* Remove some console.log statements

---------

Co-authored-by: Robin Tuszik <mail@robin.gg>

* Remove esbuild scripts from package.json

* Remove sideEffects field from package.json

* Raw data archivation

* Add tests

* Fix tests

* Fix tests

* Update ExceptionReporter

* Add schedule to run raw data archival job monthly

* Change file structure for raw data archival feature

* Update changelog and version for raw data archival feature

---------

Co-authored-by: Robin Tuszik <mail@robin.gg>

* Set raw_data to an empty hash instead of nil when archiving

* Fix storage configuration and file extraction

* Consider MIN_MINUTES_SPENT_IN_CITY during stats calculation (#2018)

* Consider MIN_MINUTES_SPENT_IN_CITY during stats calculation

* Remove raw data from visited cities api endpoint

* Use user timezone to show dates on maps (#2020)

* Fix/pre epoch time (#2019)

* Use user timezone to show dates on maps

* Limit timestamps to valid range to prevent database errors when users enter pre-epoch dates.

* Limit timestamps to valid range to prevent database errors when users enter pre-epoch dates.

* Fix tests failing due to new index on stats table

* Fix failing specs

* Update redis client configuration to support unix socket connection

* Update changelog

* Fix kml kmz import issues (#2023)

* Fix kml kmz import issues

* Refactor KML importer to improve readability and maintainability

* Implement moving points in map v2 and fix route rendering logic to ma… (#2027)

* Implement moving points in map v2 and fix route rendering logic to match map v1.

* Fix route spec

* fix(maplibre): update date format to ISO 8601 (#2029)

* Add verification step to raw data archival process (#2028)

* Add verification step to raw data archival process

* Add actual verification of raw data archives after creation, and only clear raw_data for verified archives.

* Fix failing specs

* Eliminate zip-bomb risk

* Fix potential memory leak in js

* Return .keep files

* Use Toast instead of alert for notifications

* Add help section to navbar dropdown

* Update changelog

* Remove raw_data_archival_job

* Ensure file is being closed properly after reading in Archivable concern

* Add composite index to stats table if not exists

* Update changelog

* Update entrypoint to always sync static assets (not only new ones)

* Add family layer to MapLibre maps (#2055)

* Add family layer to MapLibre maps

* Update migration

* Don't show family toggle if feature is disabled

* Update changelog

* Return changelog

* Update changelog

* Update tailwind file

* Bump sentry-rails from 6.0.0 to 6.1.0 (#1945)

Bumps [sentry-rails](https://github.com/getsentry/sentry-ruby) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/getsentry/sentry-ruby/releases)
- [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-ruby/compare/6.0.0...6.1.0)

---
updated-dependencies:
- dependency-name: sentry-rails
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump turbo-rails from 2.0.17 to 2.0.20 (#1944)

Bumps [turbo-rails](https://github.com/hotwired/turbo-rails) from 2.0.17 to 2.0.20.
- [Release notes](https://github.com/hotwired/turbo-rails/releases)
- [Commits](https://github.com/hotwired/turbo-rails/compare/v2.0.17...v2.0.20)

---
updated-dependencies:
- dependency-name: turbo-rails
  dependency-version: 2.0.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Bump webmock from 3.25.1 to 3.26.1 (#1943)

Bumps [webmock](https://github.com/bblimke/webmock) from 3.25.1 to 3.26.1.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.25.1...v3.26.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-version: 3.26.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Bump brakeman from 7.1.0 to 7.1.1 (#1942)

Bumps [brakeman](https://github.com/presidentbeef/brakeman) from 7.1.0 to 7.1.1.
- [Release notes](https://github.com/presidentbeef/brakeman/releases)
- [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md)
- [Commits](https://github.com/presidentbeef/brakeman/compare/v7.1.0...v7.1.1)

---
updated-dependencies:
- dependency-name: brakeman
  dependency-version: 7.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump redis from 5.4.0 to 5.4.1 (#1941)

Bumps [redis](https://github.com/redis/redis-rb) from 5.4.0 to 5.4.1.
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 5.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Put import deletion into background job (#2045)

* Put import deletion into background job

* Update changelog

* fix null type error and update heatmap styling (#2037)

* fix: use constant weight for maplibre heatmap layer

* fix null type, update heatmap styling

* improve heatmap styling

* fix typo

* Fix stats calculation to recursively reduce H3 resolution when too ma… (#2065)

* Fix stats calculation to recursively reduce H3 resolution when too many hexagons are generated

* Update CHANGELOG.md

* Validate trip start and end dates (#2066)

* Validate trip start and end dates

* Update changelog

* Update migration to clean up duplicate stats before adding unique index

* Fix fog of war radius setting being ignored and applying settings causing errors (#2068)

* Update changelog

* Add Rack::Deflater middleware to config/application.rb to enable gzip compression for responses.

* Add composite index to points on user_id and timestamp

* Deduplicte points based on timestamp brought to unix time

* Fix/stats cache invalidation (#2072)

* Fix family layer toggle in Map v2 settings for non-selfhosted env

* Invalidate cache

* Remove comments

* Remove comment

* Add new indicies to improve performance and remove unused ones to opt… (#2078)

* Add new indicies to improve performance and remove unused ones to optimize database.

* Remove comments

* Update map search suggestions panel styling

* Add yearly digest (#2073)

* Add yearly digest

* Rename YearlyDigests to Users::Digests

* Minor changes

* Update yearly digest layout and styles

* Add flags and chart to email

* Update colors

* Fix layout of stats in yearly digest view

* Remove cron job for yearly digest scheduling

* Update CHANGELOG.md

* Update digest email setting handling

* Allow sharing digest for 1 week or 1 month

* Change Digests Distance to Bigint

* Fix settings page

* Update changelog

* Add RailsPulse (#2079)

* Add RailsPulse

* Add RailsPulse monitoring tool with basic HTTP authentication

* Bring points_count to integer

* Update migration and version

* Update rubocop issues

* Fix migrations and data verification to remove safety_assured blocks and handle missing points gracefully.

* Update version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robin Tuszik <mail@robin.gg>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump trix in the npm_and_yarn group across 1 directory

Bumps the npm_and_yarn group with 1 update in the / directory: [trix](https://github.com/basecamp/trix).

Updates `trix` from 2.1.15 to 2.1.16
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.1.15...v2.1.16)

---
updated-dependencies:
- dependency-name: trix
  dependency-version: 2.1.16
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>
Co-authored-by: Robin Tuszik <mail@robin.gg>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Map v2 will no longer block the UI when Immich/Photoprism integration has a bad URL or is unreachable (#2113)

* Bump rubocop-rails from 2.33.4 to 2.34.2 (#2080)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.33.4 to 2.34.2.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.33.4...v2.34.2)

---
updated-dependencies:
- dependency-name: rubocop-rails
  dependency-version: 2.34.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump chartkick from 5.2.0 to 5.2.1 (#2081)

Bumps [chartkick](https://github.com/ankane/chartkick) from 5.2.0 to 5.2.1.
- [Changelog](https://github.com/ankane/chartkick/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ankane/chartkick/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: chartkick
  dependency-version: 5.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubyzip from 3.2.0 to 3.2.2 (#2082)

Bumps [rubyzip](https://github.com/rubyzip/rubyzip) from 3.2.0 to 3.2.2.
- [Release notes](https://github.com/rubyzip/rubyzip/releases)
- [Changelog](https://github.com/rubyzip/rubyzip/blob/main/Changelog.md)
- [Commits](https://github.com/rubyzip/rubyzip/compare/v3.2.0...v3.2.2)

---
updated-dependencies:
- dependency-name: rubyzip
  dependency-version: 3.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump sentry-ruby from 6.0.0 to 6.2.0 (#2083)

Bumps [sentry-ruby](https://github.com/getsentry/sentry-ruby) from 6.0.0 to 6.2.0.
- [Release notes](https://github.com/getsentry/sentry-ruby/releases)
- [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-ruby/compare/6.0.0...6.2.0)

---
updated-dependencies:
- dependency-name: sentry-ruby
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Bump sidekiq from 8.0.8 to 8.1.0 (#2084)

Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 8.0.8 to 8.1.0.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v8.0.8...v8.1.0)

---
updated-dependencies:
- dependency-name: sidekiq
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evgenii Burmakin <Freika@users.noreply.github.com>

* Update digest calculation to use actual time spent in countries based… (#2115)

* Update digest calculation to use actual time spent in countries based on consecutive points, avoiding double-counting days when crossing borders.

* Move methods to private

* Update Gemfile and Gemfile.lock to pin connection_pool and sidekiq versions

* Rework country tracked days calculation

* Adjust calculate_duration_in_minutes to only count continuous presence within cities, excluding long gaps.

* Move helpers for digest city progress to a helper method

* Implement globe projection option for Map v2 using MapLibre GL JS.

* Update time spent calculation for country minutes in user digests

* Stats are now calculated with more accuracy by storing total minutes spent per country.

* Add globe_projection setting to safe settings

* Remove console.logs from most of map v2

* Implement some performance improvements and caching for various featu… (#2133)

* Implement some performance improvements and caching for various features.

* Fix failing tests

* Implement routes behaviour in map v2 to match map v1

* Fix route highlighting

* Add fallbacks when retrieving full route features to handle cases where source data access methods vary.

* Fix some e2e tests

* Add immediate verification and count validation to raw data archiving (#2138)

* Add immediate verification and count validation to raw data archiving

* Remove verifying job

* Add archive metrics reporting

* Disable RailsPulse in Self-hosted Environments

* Remove user_id and points_count parameters from Metrics::Archives::Operation and related calls.

* Move points creation logic from background jobs to service objects (#2145)

* Move points creation logic from background jobs to service objects

* Remove unused point creation jobs

* Update changelog

* Add tracks to map v2 (#2142)

* Add tracks to map v2

* Remove console log

* Update tracks generation behavior to ignore distance threshold for frontend parity

* Extract logic to services from TracksController#index and add tests

* Move query logic for track listing into a service object.

* Minor changes

* Fix minor issues

* Support properties->date field for timestamp in GeoJSON imports (#2159)

* Support properties->date field for timestamp in GeoJSON imports

* Fix GeoJSON date parsing

* Address number of photos related issues (#2152)

* Address number of photos related issues

* Fix minor stuff

* Update integrations page layout

* Add tests for live mode (#2164)

* Add release notification workflow

* Update notification workflow for releases

* Address a number of github issues (#2178)

* Address a number of github issues

* Update changelog

* Fix redundant WebSocket subscriptions and ensure live mode functions correctly on maps.

* Add content type to Immich and Photoprism API requests

* Fix failing specs

* Update release_notifications.yml to remove workflow_dispatch event and fix changelog parsing

* Add DNS caching with 5-minute TTL

* Update changelog

* Feature/insights page (#2179)

* Update stuff

* Extract insights controller logic to services

* Fix failing specs

* Refactorings

* Add indicies with if_not_exists to migrations

* Recalculate tracks transportation modes upon settings change

* Block transportation modes settings form while a recalculation is in progress.

* Add top visited locations

* Bit of a refactoring

* Update navbar

* Add activity heatmap feature and update insights header

* Add activity streak to insights page and changelog

* Add caching for insights page

* Preheat cache for insights

* Move digest cache preheating to a service

* Use user defined transportation thresholds in transportation mode detection and classification.

* Fix failing specs

* Generate tracks faster (#2198)

* Generate tracks faster

* Remove supporter verification code

* Recalculate track segments after merging tracks.

* Add couple specs

* Add general settings tab (#2200)

* Add general settings tab

* Update changelog

* Supporter verification (#2199)

* Update

* Implement supporter verification feature

* Cache supporter verification results to improve performance

* Remove initializer

* Update verify service

* Add supporter badge

* Move verification form

* Move settings update logic to a service object and adjust routes and views accordingly.

* Disable caching for supporter verification

* Reintroduce caching for supporter verification results

* Fix some issues

* Update changelog

* Update readme

* Fix couple of bugs

* allow disabling starttls (#2203)

* Reduce RAM usage of AreaVisitsCalculationSchedulingJob via query optimizations (#2209)

* Reduce RAM usage of AreaVisitsCalculationSchedulingJob via query optimizations

* review comments

* revert Dockerfile

* one more comment

* Chore/navbar (#2202)

* Update

* Implement supporter verification feature

* Cache supporter verification results to improve performance

* Remove initializer

* Update verify service

* Update navbar

* Run bindle install

* Update changelog

* fix non-existent route (#2216)

* Update version and changelog

* Fix SSL warning and remember family/places layers

* add rubocop (#2204)

* add draft rubocop

* run on changed

* Fix Immich photo requests returning 400 errors by correcting request body serialization.

* Cluster photos on Map v2

* Change points info on the Map V2 to show time in 24h format with seconds

* Resolve multiple issues

* Make tracks on Map V2 respect date filters

* add biomejs for linting/formatting (#2193)

* Rework exports to use streaming serializers for better performance (#2225)

* Rework exports to use streaming serializers for better performance

* Minor changes

* Fix failing specs

* Ditch MIN_MINUTES_SPENT_IN_CITY env var and use user settings instead

* Remove MIN_MINUTES_SPENT_IN_CITY from configuration files and documentation

* Address rubocop issues

* Fix e2e tests

* Speed up /api/v1/stats

* Introduce timeline tool to Map V2 (#2235)

* Introduce timeline tool to Map V2

* Change track default color and make animation on selected track smoother

* Fix issues and add tests

* Fix e2e tests for timeline feature

* Fix biome issues

* Fix biome issues

* Update Claude instruction

* Update changelog

* Change the look of timeline

* Use simple marker for replay

* Fix duplicate tracks and add unique index and fix layers enabling

* Couple of fixes

* Fixes and specs

* Fix rubocop

* Fix some e2e specs

* Fix linters

* Fix rubocop and biome issues in maplibre controllers and tests

* Update e2e specs

* Add some fixes for e2e specs

* Fix speed blinking on replay

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robin Tuszik <mail@robin.gg>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Teju Nareddy <tejunareddy@gmail.com>

* Implement insights and digests APIs for mobile app

* Fix rubocop and other issues

* Fix failing spec

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robin Tuszik <mail@robin.gg>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Teju Nareddy <tejunareddy@gmail.com>
2026-02-12 22:23:27 +01:00
Evgenii Burmakin
5fd73c1068 Speed up frontend performance by optimizing asset loading and reducin… (#2251)
* Speed up frontend performance by optimizing asset loading and reducing unnecessary JavaScript execution.

* Add WebGL support check and error message for unsupported browsers

* Fix rubocop offences

* Update changelog
2026-02-10 20:51:01 +01:00
Evgenii Burmakin
e0a04d9af0 Introduce timeline tool to Map V2 (#2235)
* Introduce timeline tool to Map V2

* Change track default color and make animation on selected track smoother

* Fix issues and add tests

* Fix e2e tests for timeline feature

* Fix biome issues

* Fix biome issues

* Update Claude instruction

* Update changelog

* Change the look of timeline

* Use simple marker for replay

* Fix duplicate tracks and add unique index and fix layers enabling

* Couple of fixes

* Fixes and specs

* Fix rubocop

* Fix some e2e specs
2026-02-07 00:57:48 +01:00
Eugene Burmakin
4eb130fbf1 Ditch MIN_MINUTES_SPENT_IN_CITY env var and use user settings instead 2026-02-01 20:11:23 +01:00
Evgenii Burmakin
f477fc9eab Rework exports to use streaming serializers for better performance (#2225)
* Rework exports to use streaming serializers for better performance

* Minor changes

* Fix failing specs
2026-02-01 19:59:26 +01:00
Eugene Burmakin
f5e2924127 Fix SSL warning and remember family/places layers 2026-02-01 15:51:25 +01:00
Robin Tuszik
aed1970abe allow disabling starttls (#2203) 2026-02-01 00:02:04 +01:00
Eugene Burmakin
09804286d8 Fix couple of bugs 2026-01-31 22:36:26 +01:00
Evgenii Burmakin
01429be24a Supporter verification (#2199)
* Update

* Implement supporter verification feature

* Cache supporter verification results to improve performance

* Remove initializer

* Update verify service

* Add supporter badge

* Move verification form

* Move settings update logic to a service object and adjust routes and views accordingly.

* Disable caching for supporter verification

* Reintroduce caching for supporter verification results
2026-01-31 16:09:21 +01:00
Evgenii Burmakin
8073c87375 Add general settings tab (#2200)
* Add general settings tab

* Update changelog
2026-01-28 21:25:09 +01:00
Evgenii Burmakin
21eda2b068 Generate tracks faster (#2198)
* Generate tracks faster

* Remove supporter verification code

* Recalculate track segments after merging tracks.

* Add couple specs
2026-01-28 19:54:13 +01:00