1782 Commits

Author SHA1 Message Date
246b081d97 docs: add .memory consultation + instruction file sync rules
Add two new sections to AGENTS.md and CLAUDE.md:
- .memory Files: consult knowledge.md, decisions.md, plans/, research/ at task start
- Instruction File Sync: keep AGENTS.md, CLAUDE.md, .cursorrules, and Copilot CLI instructions in sync when any is updated

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-08 23:19:37 +00:00
08c85afa5e docs: add branch hygiene commit-and-merge guidance 2026-03-08 21:43:07 +00:00
62578e7aa5 merge: collections AI chat integration
# Conflicts:
#	backend/server/chat/llm_client.py
#	frontend/src/routes/chat/+page.svelte
#	frontend/src/routes/settings/+page.svelte
2026-03-08 21:32:22 +00:00
4d489efa2a merge: provider catalog and zen support 2026-03-08 21:30:29 +00:00
d35feed98c feat(chat): add dynamic provider catalog and zen support 2026-03-08 21:29:48 +00:00
64f9fe7382 feat: embed AI travel chat in collection recommendations 2026-03-08 21:24:49 +00:00
3526c963a4 chore: add missing project scaffolding 2026-03-08 20:01:46 +00:00
006a28ea0f move documentation/ to docs/ 2026-03-08 20:00:08 +00:00
604b52bcc7 fix(itinerary): make optimize nearest-neighbor context-aware of anchor positions
The optimize function always started nearest-neighbor from the first
array element, ignoring where the traveler actually is after preceding
anchors (flights, lodging). Now passes the preceding anchor's exit
coordinates (destination for transportation) so the algorithm picks
the spatially nearest item as the starting point.
2026-03-08 19:41:19 +00:00
73289725eb Merge branch 'feat/llm-travel-agent' into main 2026-03-08 18:54:50 +00:00
64345d44d6 Merge branch 'fix/itinerary-reactivity-optimize' into main 2026-03-08 18:54:46 +00:00
fd3ca360de fix(chat): sanitize error responses and add tool kwargs allowlist
Prevent API key and sensitive info leakage through exception messages:
- Replace str(exc) with generic error messages in all catch-all handlers
- Add server-side exception logging via logger.exception()
- Add ALLOWED_KWARGS per-tool allowlist to filter untrusted LLM kwargs
- Bound tool execution loop to MAX_TOOL_ITERATIONS=10
- Fix tool_call delta merge to use tool_call index
2026-03-08 18:54:35 +00:00
757140ec70 feat(chat): add LLM-powered travel agent with multi-provider support
Implement a full chat-based travel agent using LiteLLM for multi-provider
LLM support (OpenAI, Anthropic, Gemini, Ollama, Groq, Mistral, etc.).

Backend:
- New 'chat' Django app with ChatConversation and ChatMessage models
- Streaming SSE endpoint via StreamingHttpResponse
- 5 agent tools: search_places, list_trips, get_trip_details,
  add_to_itinerary, get_weather
- LiteLLM client wrapper with per-user API key retrieval
- System prompt with user preference context injection

Frontend:
- New /chat route with full-page chat UI (DaisyUI + Tailwind)
- Collapsible conversation sidebar with CRUD
- SSE streaming response display with tool call visualization
- Provider selector dropdown
- SSE proxy fix to stream text/event-stream without buffering
- Navbar link and i18n keys
2026-03-08 18:44:44 +00:00
6203d7ed87 fix(itinerary): fix Svelte 4 reactivity for temperature display and connector metrics
Temperature display always showed 'unavailable' because formatDayTemperature()
read dayTemperatures from closure, which Svelte 4's compiler doesn't track in
template expressions. Same issue affected getLocationConnector() reading
connectorMetricsMap from closure.

Fix: pass both state variables as explicit function parameters so they appear
in template expressions and trigger re-renders on async updates.

Also improve optimize button diagnostics with console logging and better
toast feedback when items lack coordinates.
2026-03-08 18:18:53 +00:00
d4e0ef14b8 fix(itinerary): fix route optimization reactivity and replace api key provider dropdown with AI LLM providers
- fix optimizeDayOrder() dual-update: directly set days[dayIndex].items + days before
  saveReorderedItems() so it reads the correct post-optimization order synchronously
  (Svelte 4 batches reactive statements; days wasn't updated before save read it)
- also patch collection.itinerary order values so reactive rebuild uses new order
- replace single google_maps <option> with 8 AI LLM provider options
  (anthropic, openai, gemini, ollama, groq, mistral, github_models, openrouter)
- add getApiKeyProviderLabel() helper for saved key display with google_maps fallback
- add i18n keys for all new provider labels in en.json and de.json
2026-03-08 17:45:44 +00:00
c5be09bcb9 fix(frontend): clean docs links and improve settings clarity 2026-03-08 17:21:51 +00:00
2fd11dbd26 fix: stabilize post-MVP travel-agent and itinerary workflows 2026-03-08 16:51:19 +00:00
fb2347345f fix(docker): stabilize compose startup across prod and dev stacks 2026-03-08 14:54:55 +00:00
e56170fbd4 merge: integrate mvp trip features and bun migration 2026-03-08 14:46:20 +00:00
c5939e2957 feat(frontend): apply itinerary UI and docs refinements 2026-03-08 14:42:32 +00:00
2ad814334f chore(frontend): migrate toolchain from pnpm to bun 2026-03-08 14:41:36 +00:00
8c0637c518 feat: ship MVP itinerary optimization, weather, AI key prefs, and MCP tools 2026-03-08 13:49:32 +00:00
9eb0325c7a fix(frontend): simplify collections view and restore invite access
Unify collections and shared items under a single Collections tab while keeping Archive separate, and fix card layering so menus render correctly. Restore invite discoverability by adding navbar access to /invites and add missing i18n keys to prevent raw key labels in collections/invites UI.
2026-03-08 01:29:52 +00:00
f11a5051c6 fix(ci): lowercase GHCR owner tags and harden frontend runtime image 2026-03-07 21:18:21 +00:00
7cf1b783ae fix(ci): publish container images to GHCR only 2026-03-07 21:02:38 +00:00
4df5036534 fix(ci): use GITHUB_TOKEN for GHCR and stabilize Trivy scan 2026-03-07 20:56:52 +00:00
da84d171e5 fix(frontend): remediate Trivy vulnerabilities in build image 2026-03-07 20:40:51 +00:00
7bcab5afd8 rm docs/ 2026-03-07 20:21:06 +00:00
63996a532c chore: update latest workflows and dev compose overrides
Allow manual dispatch and self-triggering path updates for latest image workflows while bumping checkout/login actions. Adjust dev compose to favor local builds and bypass backend image entrypoint for local startup.
2026-03-07 20:20:20 +00:00
288f81f631 fix: refine itinerary lodging placement and stay metadata
Align lodging cards with itinerary flow by rendering checkout stays before the timeline and check-in stays after it, while collapsing duplicate no-location stays. Tighten compact card metadata into a concise IN/OUT panel so stay details read cleanly without visual noise.
2026-03-07 20:18:26 +00:00
68a6aea023 chore: ignore local megamemory directory 2026-03-07 17:48:40 +00:00
2579cd46ce fix: make itinerary lodging cards compact and remove duplicate overnight summary 2026-03-07 17:47:22 +00:00
3af4f06944 feat: anchor lodging in itinerary days with boundary connectors 2026-03-07 17:28:03 +00:00
7d279883d5 fix: add directions links and stabilize connector metrics after drag 2026-03-07 15:47:41 +00:00
eb612f1cdf fix: keep itinerary connectors visible when route data is unavailable 2026-03-07 15:28:33 +00:00
cf84feb783 fix: restore itinerary connectors and refresh dependencies 2026-03-07 12:46:02 +00:00
a3d12bf4b2 feat: refine itinerary flow and add OSRM connector metrics 2026-03-07 11:54:13 +00:00
246d836459 feat: redesign itinerary flow and add catppuccin mocha theme 2026-03-07 10:20:06 +00:00
0b514a99ea feat: redesign collection UI with WanderLog-inspired card style
- CollectionCard: hero image with gradient overlay, title/date on
  image in white, glass pill status badges, compact stats footer,
  removes 'Open Details' button (entire card is clickable)
- collections page: clean white bg, underline tabs, 'New Collection'
  button in header, responsive grid starts at md breakpoint
- Fix empty dropdown for viewonly type, remove debug console.log,
  add aria-label to card container
2026-03-06 15:51:19 +00:00
04fb1dfb40 fix: replace native date inputs with custom DateInput/DateTimeInput components
Native <input type='date'> and <input type='datetime-local'> render
their display format (mm/dd/yyyy vs dd/mm/yyyy, 12h vs 24h) based on
browser/OS locale, ignoring HTML lang attributes in Firefox and
inconsistently in Chrome. The previous lang=en-GB fix was unreliable.

Create DateInput.svelte and DateTimeInput.svelte components that show
dd/mm/yyyy (and DD/MM/YYYY HH:MM for datetime) by formatting the ISO
value in JS, while delegating the actual picker to a hidden native
input triggered via showPicker(). Supported in Chrome 99+, Firefox
101+, Safari 16+ (covers all modern browsers).

Updated 8 component files across CollectionModal, ChecklistModal,
NoteModal, ImmichSelect, CollectionMap, TransportationDetails,
LodgingDetails, and LocationVisits.
2026-03-06 15:14:02 +00:00
52299c1ff2 fix: set lang=en-GB on html root to force dd/mm/yyyy and 24h inputs
The previous fix updated JavaScript date formatting functions to use
en-GB locale, but native <input type="date"> and <input type="datetime-local">
elements render their placeholder/display format based on the HTML
document's lang attribute, not JavaScript. Changing lang="en" to
lang="en-GB" on the root <html> element fixes all 15+ date/time
inputs across the app in one place.
2026-03-06 14:50:50 +00:00
370a50dcb2 chore: add missing project scaffolding 2026-03-06 14:34:16 +00:00
ed5ba58866 remove megamemory from repo 2026-03-06 14:27:30 +00:00
d32fcb6fed chore: complete rebranding from seanmorley15 to Alex-Wiesner/voyage
Replace all seanmorley15/Voyage repo URLs, ghcr.io/seanmorley15 container
image references, seanmorley.com/sponsor and buymeacoffee links with
the new repo (github.com/Alex-Wiesner/voyage) and new GHCR images
(ghcr.io/alex-wiesner/voyage-*). Attribution to original AdventureLog
author Sean Morley is preserved.
2026-03-06 14:25:16 +00:00
c57df72610 test: add geocoding lang parameter unit tests
8 standalone tests covering Accept-Language header in Nominatim
requests and languageCode field in Google Places payload, for both
explicit lang values (en, de, fr) and the default fallback (en).
2026-03-06 14:16:10 +00:00
f55b0ea230 fix: enforce dd/mm/yyyy, 24h time, and locale-aware location search
- Replace all 'en-US' and undefined locales with 'en-GB' in date
  formatting across 15+ frontend files (dateUtils.ts, cards, routes,
  Luxon calls) to consistently output day-first dates and 24h times
- Set hour12: false in all Intl.DateTimeFormat and toLocaleDateString
  calls that previously used 12h format
- Pass user's svelte-i18n locale as &lang= query param from
  LocationSearchMap and LocationQuickStart to the reverse-geocode API
- Extract lang param in reverse_geocode_view and forward to both
  search_osm and search_google
- Add Accept-Language header to Nominatim requests so searches return
  results in the user's language (e.g. Prague not Praha)
- Add languageCode field to Google Places API payload for same effect
2026-03-06 13:50:27 +00:00
df8d1adf15 Rename AdventureLog to Voyage and add fork attribution
- Replace all AdventureLog references with Voyage across ~102 files
  (7 case variants: AdventureLog, adventurelog, Adventurelog, ADVENTURELOG,
  AdventUrelog, AdventureLOG, adventure-log, adventure_log)
- Rename brand, static, and documentation assets to use voyage naming
- Rename install_adventurelog.sh → install_voyage.sh
- Update README.md and voyage_overview.md to credit AdventureLog as
  the upstream project and Sean Morley as its original creator
2026-03-06 11:05:26 +00:00
Sean Morley
2b644d3afa Bug Fixes + Romanian Localization (#1034)
* Added translation using Weblate (Romanian)

* Translated using Weblate (Romanian)

Currently translated at 4.1% (45 of 1073 strings)

Translation: AdventureLog/Web App
Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/ro/

* Fix Svelte dependencies

* Add Romanian language support by registering locale files

* Update appVersion to 'v0.12.0-main-022726'

---------

Co-authored-by: Hango Bogdan Ioan <hangobogdan@gmail.com>
2026-02-27 15:30:18 -05:00
Sean Morley
c6efdaa75b Version bump for v0.12.0 (#1024)
* Update version to v0.12.0 across documentation, configuration, and Docker files

* Collapse Troubleshooting and Guides sections in documentation config
2026-02-23 09:00:13 -05:00
Sean Morley
bec90fe2a5 Bug Fixes + Duplicate Support (#1016)
* Update README.md supporter list

* Fix: Multiple bug fixes and features bundle (#888, #991, #617, #984) (#1007)

* fix: resolve location creation failures, broken image uploads, and invalid URL handling

- Add missing addToast import in LocationDetails.svelte for proper error feedback
- Add objectId check and error response handling in ImageManagement.svelte to prevent ghost images
- Add Content-Type check in +page.server.ts image action to handle non-JSON backend responses
- Add client-side URL validation in LocationDetails.svelte (invalid URLs → null)
- Improve Django field error extraction for user-friendly toast messages
- Clean up empty description fields (whitespace → null)
- Update BUGFIX_DOCUMENTATION.md with detailed fix descriptions

* feat: bug fixes and new features bundle

Bug fixes:
- fix: resolve PATCH location with visits (#888)
- fix: Wikipedia/URL image upload via server-side proxy (#991)
- fix: private/public toggle race condition (#617)
- fix: location creation feedback (addToast import)
- fix: invalid URL handling for locations and collections
- fix: world map country highlighting (bg-*-200 -> bg-*-400)
- fix: clipboard API polyfill for HTTP contexts
- fix: MultipleObjectsReturned for duplicate images
- fix: SvelteKit proxy sessionid cookie forwarding

Features:
- feat: duplicate location button (list + detail view)
- feat: duplicate collection button
- feat: i18n translations for 19 languages
- feat: improved error handling and user feedback

Technical:
- Backend: fetch_from_url endpoint with SSRF protection
- Backend: validate_link() for collections
- Backend: file_permissions filter() instead of get()
- Frontend: copyToClipboard() helper function
- Frontend: clipboard polyfill via server-side injection

* chore: switch docker-compose from image to build

Use local source code builds instead of upstream :latest images
to preserve our custom patches and fixes.

* fix: lodging save errors, AI language support, and i18n improvements

- Fix Lodging save: add res.ok checks, error toasts, isSaving state (#984)
- Fix URL validation: silently set invalid URLs to null (Lodging, Transportation)
- Fix AI description language: pass user locale to Wikipedia API
- Fix missing i18n keys: Strava toggle buttons (show/hide)
- Add CHANGELOG.md
- Remove internal documentation from public tracking
- Update .gitignore for Cursor IDE and internal docs

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: update location duplication handling, improve UI feedback, and enhance localization support

---------

Co-authored-by: AdventureLog Bugfix <bugfix@adventurelog.local>
Co-authored-by: madmp87 <info@so-pa.de>
Co-authored-by: Mathias Ponnwitz <devuser@dockge-dev.fritz.box>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Sean Morley <mail@seanmorley.com>

* Enhance duplication functionality for collections and locations; update UI to reflect changes

* Potential fix for code scanning alert no. 49: Information exposure through an exception

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update Django and Pillow versions in requirements.txt

* Fix error logging for image fetch timeout in ContentImageViewSet

* Update requirements.txt to include jaraco.context and wheel for security fixes

* Update app version and add security vulnerabilities to .trivyignore

* Update backend/server/adventures/views/collection_view.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update frontend/src/lib/types.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Reorder build and image directives in docker-compose.yml for clarity

* Refactor code structure for improved readability and maintainability

* Remove inline clipboard polyfill script injection from server hooks (#1019)

* Initial plan

* Remove inline clipboard polyfill script injection from hooks.server.ts

Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

* Fix unhandled promise rejections in copyToClipboard click handlers (#1018)

* Initial plan

* Fix: make copyToClipboard handlers async with try/catch error toast

Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

* Harden `fetch_from_url` image proxy: require auth, rate-limit, and strengthen SSRF protections (#1017)

* Initial plan

* Harden fetch_from_url: require auth, rate-limit, block non-standard ports, check all IPs, re-validate redirects

Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

* Fix subregion filtering in world travel page to exclude null values

* Update package.json to use caret (^) for versioning in overrides

* fix: update package dependencies for compatibility and stability

- Added cookie dependency with version constraint <0.7.0
- Updated svelte dependency to allow versions <=5.51.4
- Updated @sveltejs/adapter-vercel dependency to allow versions <6.3.2

* Refactor code structure for improved readability and maintainability

---------

Co-authored-by: madmp87 <79420509+madmp87@users.noreply.github.com>
Co-authored-by: AdventureLog Bugfix <bugfix@adventurelog.local>
Co-authored-by: madmp87 <info@so-pa.de>
Co-authored-by: Mathias Ponnwitz <devuser@dockge-dev.fritz.box>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-02-20 20:49:24 -05:00