Commit Graph

61 Commits

Author SHA1 Message Date
Pål Håland
197cd8d04e feat: implement server-side map clustering (#991)
* feat: meilisearch bounding box intersection and map filtering

* feat: tiered clustering and polyline filtering based on bounding box diagonal

Addressing review comments with optimized performance and data accuracy:
- Implemented a two-tiered search strategy (Summary vs. Detailed) to provide 100% accurate cluster counts while minimizing metadata traffic.
- Added a client-side ID-based cache to eliminate redundant network requests for trails already in memory.
- Introduced tiered 'detail shedding' that dynamically hides small trail lines when zooming out to maintain smooth panning performance.
- Fixed Svelte 5 reactivity issues to ensure clusters reappear instantly when trail detail is shed.
- Consolidated zoom thresholds into centralized constants for system-wide consistency.
- Updated Meilisearch configuration to support efficient ID-based filtering.

* feat: implement server-side map clustering using Meilisearch and Supercluster

- Implemented SvelteKit server-side clustering route at `/api/v1/search/trails/cluster` using the `supercluster` library.
- Integrated backend search results with the new clustering endpoint to improve performance for large trail datasets.
- Fixed Svelte 5 reactivity in `MapWithElevationMaplibre.svelte` by making `mapLoaded` reactive and fixing destructuring of `` map data.
- Removed obsolete client-side zoom constraints (`minzoom`/`maxzoom`) from `TrailLayer`, `PreviewLayer`, and `ClusterLayer` to allow dynamic visibility controlled by backend attributes.
- Fixed a bug where unauthenticated users generated invalid Meilisearch filters.
- Optimized map page performance by caching bounding box and filter values in the route loader.
- Updated `ClusterLayer` font to `Noto Sans Regular` to match available tileserver resources.

* feat: implement dynamic polyline visibility based on result density

- Replaced static zoom-based diagonal thresholds with a dynamic "Top N" approach for polyline visibility.
- Updated `/api/v1/search/trails/cluster` to mark only the top `MAP_MAX_POLYLINES` (default 100) trails by bounding box diagonal as "large".
- Modified `trails_search_bounding_box` store function to always fetch polylines for trails marked as large, regardless of zoom level.
- Removed obsolete `MAP_*_ZOOM_DIAGONAL_LIMIT` constants and simplified map layer constructors by removing tier-based filtering.
- Updated environment configurations and documentation to use the new `PUBLIC_MAP_MAX_POLYLINES` variable.

* refactor: remove obsolete zoom-based map clustering thresholds

Following the transition to dynamic server-side clustering based on result density (Top N polylines), this commit removes all remaining zoom-based thresholds and logic.

- Removed PUBLIC_MAP_LOW_ZOOM_THRESHOLD, PUBLIC_MAP_MEDIUM_ZOOM_THRESHOLD, and PUBLIC_MAP_HIGH_ZOOM_THRESHOLD environment variables.
- Removed the 'mapClusterMinZoom' user setting from the schema, models, and settings UI.
- Simplified the map component and MapLibre layer managers by removing unused 'clusterMinZoom', 'minZoom', and 'maxZoom' parameters.
- Cleaned up obsolete 'map-cluster-zoom-level' translation keys across all locales.
- Updated documentation to reflect the removal of these variables.

* chore: remove map clustering debug logs

* docs: update changelog and fix global zoom feature disappearance

* fix: address PR reviews and refine map cluster/preview visuals

* feat: implement configurable map cluster zoom and trail start marker settings

* feat: render single unclustered shedded trails as start markers instead of cluster circles

* minor fixes

* minor ui changes

* fix missing entries in map list

* remove redundant map clustering zoom clamp

* fix merge issues

* fix merge issues

* fixes

* hide popup for trails without details

* several improvements

* prevent import of client trail_store in server cluster code

* update changelog

---------

Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-06-07 13:00:26 +02:00
github-actions[bot]
7ad129b841 Release v0.19.2 (#1035)
* chore: release v0.19.2

* add changelog

---------

Co-authored-by: Flomp <26000991+Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-06-01 19:30:44 +02:00
slothful-vassal
bfa8dfefbd prepare v0.19.1 (#988)
* prepare v0.19.1

* update changelog

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-05-14 18:41:14 +02:00
slothful-vassal
677d3a12b5 prepare changelog for upcoming release (#970)
* prepare changelog for upcoming release

* minor wording improvements

* #960

* #961

* update changelog

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-05-10 10:11:48 +02:00
slothful-vassal
6d1d1236ef Trail Edit / Waypoints from photos: prevent creating different waypoints for near-by locations (#457)
* trail edit / waypoints from photos: prevent creating different waypoints for near-by locations

* remove not necessary imports

* remove changes from gitignore

* patch gitignore

* waypoint merge radius as category property

* change datamodel for merge radius (use more generic settings field for future implementations)

* fix npm run check issues

* several improvements/fixes

* fix

* move geo cluster code to db

* fix compile issue

* fix docker issue

* merge with existing waypoints

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-04-29 11:15:06 +02:00
github-actions[bot]
702681acee Release v0.18.5 (#830)
* chore: release v0.18.5

* update changelog

---------

Co-authored-by: Flomp <26000991+Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-02-20 14:50:42 +01:00
Flomp
f99c650f8b v0.18.4 Changelog (#761)
* initial commit

* update changelog

---------

Co-authored-by: Christian Beutel <>
2026-02-02 18:24:45 +01:00
Jonas Plum
c2b86f5521 Change repo url (#722) 2026-01-13 20:23:42 +01:00
Christian Beutel
722bd6c078 updates changelog 2025-09-19 18:07:27 +02:00
Christian Beutel
adf41c370b updates changelog 2025-09-13 16:39:37 +02:00
Christian Beutel
4ffd2dd0c2 updates changelog 2025-08-28 15:04:21 +02:00
Flomp
00bb717def New Crowdin updates (#394)
* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Russian)

* New translations en.json (French)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Spanish)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Chinese Simplified)

* New translations en.json (Russian)

* New translations en.json (Basque)

* New translations en.json (Italian)

* New translations en.json (Basque)

* New translations en.json (Basque)

* New translations en.json (Basque)

* New translations en.json (Basque)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

* New translations en.json (Chinese Simplified)

* New translations en.json (Basque)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (German)

* New translations en.json (Basque)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Chinese Simplified)

* New translations en.json (German)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (German)

* New translations en.json (Basque)

* New translations en.json (Hungarian)

* New translations en.json (Italian)

* New translations en.json (Dutch)

* New translations en.json (Polish)

* New translations en.json (Portuguese)

* New translations en.json (Russian)

* New translations en.json (Chinese Simplified)

* adds OpenHikingMaps

* update changelogs

---------

Co-authored-by: Christian Beutel <>
2025-08-24 13:39:28 +02:00
Christian Beutel
620d724972 updates changelog 2025-07-10 18:59:18 +02:00
Christian Beutel
dc7afffe8a updates changelog 2025-07-10 18:52:27 +02:00
Christian Beutel
efebcc176b v0.17.1 2025-06-27 18:52:57 +02:00
Christian Beutel
0c7718cc24 updates changelog 2025-06-21 10:32:50 +02:00
Christian Beutel
031836cd24 updates changelog 2025-06-21 10:31:39 +02:00
Flomp
9276690d60 Federation (#327)
* initial commit federation

* more federation

* more federation

* more federation

* completes follow, accept, undo

* add trail create activity

* process trail create activity

* more trail create activity

* adds missing endpoints

* adds update and delete activity

* adds comment activities

* adds activities back

* adds summit logs activities

* deletes follow counts table

* fixes migrations

* fixes migrations

* fixes migrations

* fixes migrations

* adds remote profiles

* ctd

* ctd

* we are getting closer...

* adds public summit logs

* fixes federated trails in lists

* adds remote lists

* adds list activites

* fixes lists

* adds notifications

* adds iri redirect

* fixes comments and summitlogs

* fixes follows and profiles

* adds asynchronous send

* fixes list search

* adds encryption key

* bug fixes

* fixes activity signing

* removes custon activity object types

* adds html editor

* fixes html editor

* fixes display issues on mastodon

* adds federated sharing

* finishes announcements

* fixes small summit log issues

* adds trail likes

* finalizes likes

* fixes images for komoot

* add disable federation option

* adds private profiles

* updates docs

* adds federated comments

* adds trail and comments actvitiypub routes

* adds mentions to editor

* adds mentions to trails, comments, summit logs

* updates theme

* updates theme

* update docs

* update docs

* updates docs

* fixes various frontend problems

* fixes activitypub follows api

* updates docs

* updates docs

---------

Co-authored-by: Christian Beutel <>
2025-06-21 10:09:22 +02:00
Christian Beutel
40da416083 v0.16.5 2025-04-26 19:56:00 +02:00
Christian Beutel
5024ade9ba updates changelog 2025-04-18 13:21:38 +02:00
Christian Beutel
dcdb82f5de v0.16.4 2025-04-18 13:18:37 +02:00
Christian Beutel
9529c6b0d2 v0.16.3 2025-04-15 20:42:07 +02:00
Christian Beutel
108d4775bd v0.16.2 2025-04-11 16:42:46 +02:00
Christian Beutel
4732f5a86e updates changelog 2025-03-28 21:10:58 +01:00
Christian Beutel
ebf39526ef v0.16.0 2025-03-20 20:12:07 +01:00
Christian Beutel
f2077cb171 v0.15.2 2025-02-16 20:57:20 +01:00
Christian Beutel
2317f82284 v0.15.1 2025-02-14 13:46:37 +01:00
Christian Beutel
1b6ddc30a4 v0.15.0 2025-02-11 21:23:39 +01:00
Christian Beutel
e837b6e04b updates trail panel view 2025-01-27 19:38:54 +01:00
Christian Beutel
4b284a1873 v0.14.0 2025-01-26 18:18:13 +01:00
Christian Beutel
bd9add3b0a updates changelog 2025-01-17 12:38:27 +01:00
Christian Beutel
e4d05e6ea1 updates changelog 2025-01-17 12:37:28 +01:00
Christian Beutel
06b6bba31f fixes list create bug new user 2025-01-10 17:12:23 +01:00
Christian Beutel
6e3a398e42 updates changelog 2025-01-09 21:46:38 +01:00
Christian Beutel
5d943a2e2a updates changelog 2025-01-05 18:32:09 +01:00
Christian Beutel
ed6968db53 v0.12.0 2024-12-05 19:41:03 +01:00
Christian Beutel
ffb47cf5ba v0.11.0 2024-11-16 16:21:31 +01:00
Christian Beutel
01b0d49913 adds elevation loss for trails 2024-11-09 12:56:11 +01:00
Christian Beutel
ce3d65d324 updates version to 0.10.0 2024-11-05 23:42:11 +01:00
Christian Beutel
efb411e5ff v0.9.0 2024-09-14 20:02:07 +02:00
Christian Beutel
414fa9b752 adds docs 2024-09-14 18:06:07 +02:00
Christian Beutel
84873ce5b9 v0.8.2 2024-09-06 13:31:42 +02:00
Christian Beutel
b29696f326 v0.8.1 2024-08-10 18:18:16 +02:00
Christian Beutel
1a23696880 v0.8.0 2024-07-13 23:22:28 +02:00
Christian Beutel
c8e7b76d00 fixes display issues 2024-07-01 17:16:13 +02:00
Christian Beutel
7b3abb515d v0.7.2 2024-06-28 13:49:32 +02:00
Christian Beutel
018545bbcd v0.7.1 2024-06-16 01:03:02 +02:00
Christian Beutel
7a6cb6c771 v0.7.0 2024-06-15 19:53:50 +02:00
Christian Beutel
c11114e726 v0.6.1 2024-06-11 03:10:32 +02:00
Christian Beutel
09335a85d2 v0.6.0 2024-06-07 15:42:02 +02:00