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
slothful-vassal
6baeafe755
waypoint editing while drawing a route ( #1060 )
...
* waypoint editing while drawing a route
* fix waypoint click while drawing
---------
Co-authored-by: Christian Beutel <>
2026-06-16 19:55:46 +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
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
slothful-vassal
44cd092065
Improve trail planning: option to re-order route anchors ( #1007 )
...
* trail anchor list added
* add search location card to extend route endpoint in drawing mode
* add POI popup endpoint action in route drawing mode
* fix anchor stats, improve anchor list entries and refine route marker behavior
* fix map marker spinner
* docs updated
* fix spinner when delete an anchor
* further improvements
* fix adding first anchor from POI
* optimize drag handle area
---------
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-06-06 11:56:12 +02:00
slothful-vassal
1b2781960a
fix: resolve Svelte 5 reactivity warnings ( #974 )
...
- Use untrack() for $derived/$state initial values captured outside reactive context (scene.svelte, lists edit page)
- Add $state() to bind:this component references in settings account page
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-05-10 08:42:20 +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
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
7e84e39cda
fix hillshading visibility ( #942 )
...
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-04-27 16:31:58 +02:00
Flomp
345452e720
Improve frontpage performance ( #929 )
...
* initial commit
* merge with origin/main
* fix package-lock.json
* fix tiptap mentions
* remove flutter
* update package-lock.json
* disable tailwindcss/typography until https://github.com/tailwindlabs/tailwindcss/issues/19946 is fixed
* reactivate tailwind/typography after fix
---------
Co-authored-by: Christian Beutel <>
Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com >
2026-04-22 09:04:53 +02:00
slothful-vassal
c9256aeb29
fix help links ( #938 )
2026-04-22 09:03:48 +02:00
Flomp
25c63ffa56
Improves multiselect ( #921 )
...
* initial commit
* fixes open in new tab
---------
Co-authored-by: Christian Beutel <>
2026-04-20 21:04:00 +02:00
Flomp
b7b16e5a6e
Adds API docs annotations & generator ( #927 )
...
* initial commit
* fixes category api route
* fixes follow api routes
---------
Co-authored-by: Christian Beutel <>
2026-04-18 17:04:49 +02:00
slothful-vassal
f6354dcd56
narrow-wide trail list view mode added ( #666 )
...
* narrow-wide trail list view mode added
* change icon, change pos, add i18n
* change icon
---------
Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-04-01 19:07:27 +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
Flomp
0623287206
initial commit ( #881 )
...
Co-authored-by: Christian Beutel <>
2026-03-10 21:48:54 +01:00
slothful-vassal
4b1dc784c9
fix issues updating avatar ( #870 )
2026-03-10 18:00:38 +01:00
slothful-vassal
c9acf8ad91
fix list descriptions in list selection modal ( #869 )
2026-03-07 10:23:30 +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
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
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
slothful-vassal
230f42d639
Improve save public list ( #554 )
...
* improve save public list
* remove obsolete code fragment
---------
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-02-28 09:26:48 +01:00
Flomp
23b0913c9a
initial commit ( #826 )
...
Co-authored-by: Christian Beutel <>
2026-02-20 13:56:58 +01:00
Martin Schmidt
be8465be78
fix: expand and display tag name in list view ( #742 )
...
Co-authored-by: Christian Beutel <>
Co-authored-by: Flomp <Flomp@users.noreply.github.com >
2026-02-20 11:00:04 +01:00
slothful-vassal
c8af897cdd
resolve svelte-check warnings ( #819 )
...
Co-authored-by: Jonas Plum <cugu@users.noreply.github.com >
2026-02-18 22:08:21 +01:00
slothful-vassal
0c715ad5ba
list search modal: fix asynch states ( #816 )
2026-02-17 10:44:05 +01:00
slothful-vassal
adc32339b6
search field: fix losing focus, fix duplicated cancel button in chrome ( #738 )
2026-02-16 19:42:18 +01:00
dependabot[bot]
46a12647ee
Bump @sveltejs/kit from 2.16.1 to 2.50.2 in /web ( #772 )
...
* Bump @sveltejs/kit from 2.16.1 to 2.50.2 in /web
Bumps [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit ) from 2.16.1 to 2.50.2.
- [Release notes](https://github.com/sveltejs/kit/releases )
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md )
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/kit@2.50.2/packages/kit )
---
updated-dependencies:
- dependency-name: "@sveltejs/kit"
dependency-version: 2.50.2
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com >
* Fix errors
* Fix errors
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jonas Plum <git@cugu.eu >
Co-authored-by: Jonas Plum <cugu@users.noreply.github.com >
2026-02-06 13:31:37 +01:00
slothful-vassal
6d5494935d
fix playwright tests ( #759 )
2026-02-01 21:02:36 +01:00
Jonas Plum
c2b86f5521
Change repo url ( #722 )
2026-01-13 20:23:42 +01:00
Flomp
b65fbdd128
fix trail privacy ( #719 )
...
* fix trail privacy
* adds privacy setting to integrations
---------
Co-authored-by: Christian Beutel <>
2026-01-13 19:01:05 +01:00
slothful-vassal
57b37d84c4
Fix new trail ( #673 )
...
* Update FUNDING.yml
* fix new trail page reload
2026-01-13 11:57:27 +01:00
slothful-vassal
6e5edf7ed7
fix lost gpx on summit log update ( #702 )
...
* fix lost gpx on summit log update
* fix missing trail in summit log modal
2026-01-11 22:13:39 +01:00
slothful-vassal
9282f37c15
fix list fetch timeout ( #701 )
...
* fix list fetch timeout
* list search modal added (replaces list select modal)
* query startsWith -> includes
---------
Co-authored-by: Christian Beutel <>
2026-01-11 22:03:35 +01:00
slothful-vassal
b09675f2b2
Select number of search items per page ( #577 )
...
* select items per pages
* fix 'all'
* fix page switch
* fix filter update when 'all'
* startDrawing: set map to current user position
* remove startDrawing change from other branch
* handle 413
* remove 'all', cange increment, use local storage
* remove obsolete import, fix 413
2025-10-04 17:22:46 +02:00
slothful-vassal
03ef547a75
improve some elements for dark mode ( #609 )
2025-10-04 14:38:27 +02:00
Christian Beutel
4010b85442
fixes show on map from feed
2025-09-19 18:03:16 +02:00
Christian Beutel
72acac072c
fixes strava integration
2025-09-13 16:04:48 +02:00
Christian Beutel
73d20b1cbc
reverses waypoint relation
2025-09-12 17:48:41 +02:00
Christian Beutel
3b7f30908c
fixes sorting by difficulty
2025-09-07 17:59:35 +02:00
Christian Beutel
432176d8f5
fixes list saving
2025-08-28 14:10:04 +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
4ba0281e0f
adds customizable "about" section
2025-08-23 19:10:46 +02:00
Jonas Plum
c93ab89f51
Break long trail titles ( #466 )
2025-08-23 14:35:03 +02:00
Christian Beutel
1cc70c4e4b
adds polyline simplyfication
2025-08-23 14:28:00 +02:00