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>
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.
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
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
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.
- 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
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.
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.
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.
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.
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.
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.
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).
- 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
- 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
* 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>
* Update version to v0.12.0 across documentation, configuration, and Docker files
* Collapse Troubleshooting and Guides sections in documentation config