Commit Graph

212 Commits

Author SHA1 Message Date
slothful-vassal
da9f0cd31d fix missing tmp directory in docker image (#1069) 2026-06-27 11:26:14 +02:00
slothful-vassal
485ec53f6d feat: add plugin system (#1034)
* feat: add plugin system

* fix db docker build

* fix hammerhead readme, add strava subscription news to docs

* fixes and sdk improvements

* fix: reduce Meilisearch load, debounce federation sync (#1012)

* optimize meili trail index

* several fixes

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>

* Bump svelte from 5.55.5 to 5.56.0 in /docs (#1032)

Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 5.55.5 to 5.56.0.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.56.0/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.56.0
  dependency-type: direct:production
...

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

* 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 <>

* speed up plugin sync and several small fixes

* concepts for security improvements and process stability

* improve concept

* security concept implemented

* remove insecure TLS

* worker concept implemented

* fixes and cleanup

* fixes

* docu

* mermaid, namings

* WASM plugin host improvements, plugin logging

* fix db migration

* Improve plugin config and category mapping UI

* fixes

* further fixes

* remove manual test sync

* fix db migration and strava mapping

* type added, UI improvements

* fix plugin card toggle clickable area

* optimize synch status card layout

* plugin type 'trails' instead of 'integration'

* session auth validation in UI

* fix komoot date and waypoints

* improve category mapping

* fix send to hammerhead: trail name

* plugin setup error handling improved

* fix review findings

* re-mapping added

* rename remote_category

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Flomp <26000991+Flomp@users.noreply.github.com>
2026-06-22 15:00:44 +02:00
Flomp
64da36aa20 fix: harden ActivityPub federation and fix N+1 follower fanout (#1056)
* initial commit

* improve activitypub recipient query

* small fixes

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-06-18 16:36:57 +02:00
Flomp
c04a719ca6 Feat add actors to meilisearch (#1048)
* initial commit

* update api docs

* adds search token versioning

* make id filterable

* isLocal -> is_local

* add iri to actor index

* update gitignore

* Merge remote-tracking branch 'origin/main' into feat-add-actors-to-meilisearch

* fix sharing for newly discovered actors

* fix ActorSearchResult type

---------

Co-authored-by: Christian Beutel <>
2026-06-09 21:02:05 +02:00
dependabot[bot]
ca326fabbd Bump golang.org/x/net (#1036)
Bumps the gomod-backward-compatible group with 1 update in the /db directory: [golang.org/x/net](https://github.com/golang/net).


Updates `golang.org/x/net` from 0.53.0 to 0.55.0
- [Commits](https://github.com/golang/net/compare/v0.53.0...v0.55.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.55.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod-backward-compatible
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-07 13:45:01 +02:00
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
Flomp
fc735130cc Add IRI to local resources (#1046)
* initial commit

* add remote trail/list

* fix errors

* update to use new IRIs

* use origin in migration instead

* use UnsafeWithoutHooks

* fix trail/list order of operations

* fix remote trail/list fetch

* fixes list document update

* fix errors

---------

Co-authored-by: Christian Beutel <>
2026-06-07 12:20:13 +02:00
Ole
f912a186a6 Update remote_trail.go (#1002)
Public Trails from users with private accounts currently show a 404. This fixes that

Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-06-06 12:08:13 +02:00
slothful-vassal
14ebaa0d04 fix waypoint actor in ingetrations (#1049) 2026-06-04 20:47:16 +02:00
slothful-vassal
b304e9975a fix polyline db field size (#1047) 2026-06-04 17:47:04 +02:00
slothful-vassal
8153cfe14e fix self-federation (#1044) 2026-06-04 10:52:15 +02:00
slothful-vassal
65c2e3d932 fix: reduce Meilisearch load, debounce federation sync (#1012)
* optimize meili trail index

* several fixes

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-06-01 16:01:59 +02:00
Pål Håland
77cf8a0819 feat(strava): sync all activity photos instead of only primary photo (#1015)
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-05-31 16:46:43 +02:00
Pål Håland
64b39685ed fix: use ActivityPub actor ID for shared trails/lists search token filtering (#1014)
* fix: use ActivityPub actor ID for shared trails/lists search token filtering

* fix deprecated meili token storage

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-05-31 16:25:42 +02:00
slothful-vassal
f7c7c6d805 meili: fix corrupt likes index after un-like (#1011) 2026-05-26 09:15:56 +02:00
slothful-vassal
f69ad01029 optimize db view queries (#729)
* optimize db view queries

* add more indices

* appease gofmt

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-05-13 19:11:01 +02:00
Flomp
0bb55ef84e Fix comment author rule (#984)
Co-authored-by: Christian Beutel <>
2026-05-11 20:03:18 +02:00
Flomp
c9024a4322 Fix trails being unavailable when profile is private (#986) 2026-05-11 20:02:37 +02:00
Flomp
ea6f5d5c95 initial commit (#987)
Co-authored-by: Christian Beutel <>
2026-05-11 19:48:43 +02:00
Flomp
b2753c29d2 initial commit (#980)
Co-authored-by: Christian Beutel <>
2026-05-11 11:11:09 +02:00
slothful-vassal
edad99c7b4 fix email change issues (#973)
* fix email change

* isolated email update

* update email UI immediately

---------

Co-authored-by: Christian Beutel <>
2026-05-10 08:38:55 +02:00
Flomp
d2ac49470a Federation Refactoring & Architecture Improvements (#930)
* initial commit

* add lists

* update permissions

* fix waypoint create

* needs_full_sync for activitypub trails

* fixes build issues

* fix list get

* further CSRF protection

* update API docs

* adds rate limiter

* fix tiptap mentions

* a bit more cleanup of main.go

* Fix migration order

* fixes reviewed notes

* require context for activitpub server calls

* improve hashing for identifier

* fix copy paste error

* fix sync trail/list issues

* fix summit log/comment duplicates

* adaptions after trail merge

* fix dockerignore

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-05-09 17:30:34 +02:00
slothful-vassal
b5739cb72e merge trails function added (#627)
* merge trails function added

* fix conflict resolve issues

* avoid incorrect authorship when merging trail comments

* require edit access for all selected trails before merge

* fix likes checkbox binding in trail merge modal

* improve error handling

* require editable target and deletable sources for merge

* avoid duplicate trail fetch during merge

* prevent duplicate likes when merging trails

* check photo download responses during trail merge

* add merge completion toast notifications

* cleanup

* small fixes

* move merge code to backend, option to merge single trail selection with similar one, automatic merge for integrations add as option, maintenance page to find and merge similar trails added

* fix build error

* fix

* docu, beautifying, refactoring

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-05-09 13:09:26 +02:00
slothful-vassal
d2268429c7 chore/pocketbase v0.38.0 (#972)
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-05-09 13:02:31 +02:00
Pål Håland
127b7a0745 chore: meilisearch sdk rename and dependency upgrades (#958)
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-05-07 22:58:06 +02:00
Pål Håland
25fe7982c5 chore: dockerfile build optimizations (#959) 2026-05-07 21:33:46 +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
Flomp
7bdf0d3151 Adds option to mark trail as completed (#920)
* initial commit

* add completed for komoot tours

* mark hammerhead activities as completed

* fix review suggestions

* adds completed modal to trail edit page

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-04-27 20:37:11 +02:00
slothful-vassal
86c94a5ce2 fix komoot integration issue with 'invalid' photos (#941) 2026-04-27 16:17:00 +02:00
slothful-vassal
c9256aeb29 fix help links (#938) 2026-04-22 09:03:48 +02:00
Stefan Schlögl
19fd259129 fix komoot sync stopping before all tours are imported (#917)
Three bugs caused partial imports:

1. Type filter halted pagination: if a page contained only tours of the
   excluded type (planned vs. recorded), syncTrailWithTours returned false
   and the loop stopped even though later pages might have matching tours.
   Fixed by tracking allAlreadySynced separately - only tours already in the
   DB count toward early termination, not type-filtered ones.

2. continue on error never incremented page: a fetch or sync error called
   continue on the outer for loop, so page stayed the same and hasNewTours
   was never updated, causing an infinite retry on the failing page. Changed
   to break so a failed page aborts the current sync cycle cleanly.

3. Pagination ignored TotalPages: the loop used a fragile stop heuristic
   instead of the TotalPages value returned by the Komoot API. fetchTours
   now returns TotalPages and the loop uses it as the upper bound, with the
   allAlreadySynced early-exit kept as an optimization for incremental syncs.

Closes #570

Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-04-20 20:24:51 +02:00
dependabot[bot]
da38cfc19a Bump golang.org/x/net (#932)
Bumps the gomod-backward-compatible group with 1 update in the /db directory: [golang.org/x/net](https://github.com/golang/net).


Updates `golang.org/x/net` from 0.50.0 to 0.53.0
- [Commits](https://github.com/golang/net/compare/v0.50.0...v0.53.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.53.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod-backward-compatible
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-18 11:59:32 +02:00
dependabot[bot]
bef362914f Bump golang.org/x/image from 0.36.0 to 0.38.0 in /db (#901)
Bumps [golang.org/x/image](https://github.com/golang/image) from 0.36.0 to 0.38.0.
- [Commits](https://github.com/golang/image/compare/v0.36.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/image
  dependency-version: 0.38.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-18 11:56:34 +02:00
Flomp
ec76b69dba Fix mentions when username != preferred_username (#885)
* initial commit

* fixes mention name

---------

Co-authored-by: Christian Beutel <>
2026-03-20 19:35:34 +01:00
slothful-vassal
369e71fcec hammerhead integration added (#628)
* hammerhead integration added

* typo corrected

* start date added, optimize some translations

* new option to send trail to hammerhead

* fix elevation information (was in cm)

* skip empty tracks on import

* update docs

* remove manual user-id input

* fix merge issues

* remove user-id from documentation

* fix hammerhead logo for light theme

* fix hammerhead logo for light theme

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-03-20 13:58:34 +01:00
slothful-vassal
4b1dc784c9 fix issues updating avatar (#870) 2026-03-10 18:00:38 +01:00
Flomp
711a592038 Feature: API Tokens (#848)
* initial commit

* fix last_used timestamp

---------

Co-authored-by: Christian Beutel <>
2026-03-07 10:10:25 +01:00
Flomp
ba88d08078 Update meilisearch to v1.36.0 (#847)
* Update meilisearch to v1.36.0

* Merge remote-tracking branch 'origin/main' into chore/update-meilisearch

---------

Co-authored-by: Christian Beutel <>
2026-03-07 10:00:31 +01:00
Jonas Plum
84bf27a415 Fix go version in Dockerfile (#859)
* Add dockerfile updates and cooldown settings to dependabot

* Upgrade Go version in Dockerfile to 1.25.0
2026-03-01 19:35:13 +01:00
Flomp
88aabfa6fd Update pocketbase to 36.5 (#846)
Co-authored-by: Christian Beutel <>
2026-03-01 19:32:11 +01:00
slothful-vassal
f2396ae574 new trail view options: create copy & change visibility (#571)
* change visibility of multiple trails in trails view (multi-select)

* error handling

* create copy option added

* wait for meilisearch when updating trail

* remove toggles from dropdown

* change public/private logic

* adds loading spinner for bulk operations

* fixes trail duplicate

* fixes tags delete on visiblility change

* fix conflict resolving issue

* edit labels & german translation

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
2026-03-01 18:18:09 +01:00
dependabot[bot]
2b9d5305a8 Bump the gomod-backward-compatible group in /db with 2 updates (#851)
Bumps the gomod-backward-compatible group in /db with 2 updates: [github.com/pocketbase/dbx](https://github.com/pocketbase/dbx) and [golang.org/x/net](https://github.com/golang/net).


Updates `github.com/pocketbase/dbx` from 1.11.0 to 1.12.0
- [Release notes](https://github.com/pocketbase/dbx/releases)
- [Commits](https://github.com/pocketbase/dbx/compare/v1.11.0...v1.12.0)

Updates `golang.org/x/net` from 0.49.0 to 0.51.0
- [Commits](https://github.com/golang/net/compare/v0.49.0...v0.51.0)

---
updated-dependencies:
- dependency-name: github.com/pocketbase/dbx
  dependency-version: 1.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod-backward-compatible
- dependency-name: golang.org/x/net
  dependency-version: 0.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod-backward-compatible
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-01 07:22:10 +01:00
slothful-vassal
bd293e6739 new setting: begin drawing a new trail from current location (#592)
* new setting: begin drawing a new trail from  current location

* apply only when drawing

* fix application when editing an existing route

* documentation

* ignore pointer events on location circles

* fix i18n

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>
2026-02-28 10:15:43 +01:00
Flomp
6cac905368 Use dynamic tokens & bootstrap meili config on startup (#839)
* initial commit

* persist meili token in cookie

* handle login/logout cookie invalidation

* fix review suggestions

---------

Co-authored-by: Christian Beutel <>
2026-02-27 08:52:53 +01:00
Jonas Plum
82ad995cdc Make the env var change non-breaking (#778)
* Fix typo in environment variable for sender address

Make the env var change non-breaking.

* Fix formatting of environment variable access
2026-02-06 11:49:19 +01:00
Flomp
32a9a67e7e Adds czech (#774)
Co-authored-by: Christian Beutel <>
2026-02-05 09:36:57 +01:00
dependabot[bot]
357b446bfd Bump golang.org/x/net in /db in the gomod-backward-compatible group (#756)
Bumps the gomod-backward-compatible group in /db with 1 update: [golang.org/x/net](https://github.com/golang/net).


Updates `golang.org/x/net` from 0.48.0 to 0.49.0
- [Commits](https://github.com/golang/net/compare/v0.48.0...v0.49.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod-backward-compatible
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-05 08:48:20 +01:00
Flomp
32e6b6a6cc fix/pocketbase-smtp-sender-address-spelling (#769)
Co-authored-by: Christian Beutel <>
2026-02-04 11:26:49 +01:00
Flomp
dacdaeab26 New Crowdin updates (#622)
* New translations en.json (French)

* New translations en.json (Dutch)

* New translations en.json (Dutch)

* New translations en.json (Russian)

* New translations en.json (Russian)

* New translations en.json (French)

* New translations en.json (French)

* New translations en.json (Spanish)

* New translations en.json (Spanish)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (Czech)

* New translations en.json (German)

* New translations en.json (French)

* New translations en.json (German)

* New translations en.json (German)

* New translations en.json (German)

* New translations en.json (German)

* fixes valhalla spelling

* Added Norwegian translation (#668)

* adds norwegian

* minor fixes in de

---------

Co-authored-by: Christian Beutel <>
Co-authored-by: Pål Håland <4449863+palhaland@users.noreply.github.com>
2026-02-02 18:24:20 +01:00
Robert Clarke
029f1f134b Return 401s when logged out of more activitypub api endpoints (#750)
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
2026-01-31 23:04:56 +01:00