TREK v2.7.1
✨ New Features
Transport in Day Plan (#37)
- Flight, train, bus, car, cruise bookings now appear directly in the day plan timeline
- Compact cards with icons, time, and booking details (airline, flight number, etc.)
- Click to open detail modal with all reservation data and linked files
- Persistent positioning — drag places between transport entries
- Chronological auto-sort for timed places and transports
Public Share Links (#79)
- Share trips as read-only links — no login required
- Choose what to share: Map & Plan, Bookings, Packing, Budget, Chat
- Beautiful shared page with cover image, tabs, language picker
- Permissions enforced server-side
Email Notifications + ICS Export (#110)
- SMTP configuration in Admin > Settings (works with any mail server)
- Notifications for: trip invites, bookings, vacay fusion, photos, chat, packing assignments
- Per-user notification preferences with addon-aware toggles
- Webhook support (Discord, Slack, custom)
- Beautiful HTML email template in user's language (12 languages)
- ICS calendar export for trips and reservations
Expense Settlement (#41)
- Click member avatars to mark who paid (green = paid)
- Settlement dropdown in budget card shows who owes whom
- Optimized payment flows with net balances
GPX File Import (#98)
- Upload .gpx files to auto-create places from waypoints
- Supports
<wpt>,<rtept>,<trkpt>, CDATA, any lat/lon order
Google Maps URL Import (#141)
- Paste any Google Maps URL into the search bar
- Supports short URLs (goo.gl), full place URLs, embedded coordinates
Bucket List POIs (#105)
- Add individual places (not just countries) to your bucket list
- Auto-search for places with coordinates
- Optional target date with month/year pickers
Live GPS Location (#136)
- Blue dot on the map showing your live position
- Toggle button bottom-right, accuracy circle
OIDC Admin Role (#93)
OIDC_ADMIN_CLAIM+OIDC_ADMIN_VALUEenvironment variables- Auto-assign/revoke admin role based on OIDC group claims
Blur Booking Codes (#114)
- New display setting to blur confirmation codes
- Hover/click to reveal
Packing List Bulk Import (#133)
- Import modal with paste or CSV/TXT upload
- Format: Category, Name, Weight, Bag, checked/unchecked
- Bags auto-created if they don't exist
Admin Audit Log (PR #118)
- Logs all admin actions, backup events, auth changes
- Paginated panel in Admin > Audit tab
- Thanks @fgbona!
Timezone + Backup Schedule (#131)
TZenvironment variable for Docker timezone- Granular backup scheduling (hour, day of week, day of month)
- Thanks @andreibrebene!
MCP — AI Assistant Integration (PR #125)
- Built-in Model Context Protocol server at
/mcp— connect AI assistants like Claude Desktop, Cursor, or any MCP-compatible client to control TREK via natural language - 14 read-only resources: trips, places, budget, packing, reservations, accommodations, collab notes, bucket list, visited countries, and more
- 34 tools: create/update/delete trips, places, day assignments, reservations, budget items, packing items, notes, atlas entries
get_trip_summaryloads everything about a trip in one call — perfect as context primer- Long-lived API tokens (
trek_*prefix) stored as SHA256 hashes, shown once at creation - Security: 60 req/min rate limit, max 5 concurrent sessions, 1-hour inactivity timeout, max 10 tokens per user
- MCP addon disabled by default — admins enable it in Admin Panel → Addons
- Token management UI in Settings with ready-to-copy client config snippets
- Admin panel: view and revoke tokens across all users (Admin → MCP Tokens tab)
- Changes made via MCP broadcast to all connected browser clients in real-time via WebSocket
- Demo mode blocks all write operations
- Wiki: MCP Integration
- Thanks @jubnl!
🌍 Languages
- 3 new languages: Italian 🇮🇹, Czech 🇨🇿, Hungarian 🇭🇺 — now 12 languages total
- All 12 language files fully synced (~1238 keys each)
- Thanks @entropyst72, @Numira-code, @slashwarm!
🐛 Bug Fixes
- Atlas: use 50m GeoJSON for smaller countries (#115)
- Cache: auto-invalidate on version update (#121)
- Immich: paginate beyond 200 photos (#137)
- Locale: use user's locale instead of hardcoded de-DE (#144)
- TimezoneWidget: respect 12h/24h setting (#147, #150)
- OIDC: fix redirect loop in oidc-only mode (#148, PR #149)
- OIDC: pass invite token through flow (PR #117)
- ICS export: add DTSTAMP, fix DTEND formatting
- PDF export: transport bookings with Lucide icons
- PWA: increase cache size limit (#151)
🔧 Improvements
- Settings page: two-column masonry layout on desktop
- Category filter: multi-select dropdown with checkboxes
- Check-in/out labels: chronological order (checkout before checkin)
- PlaceAvatar: event-based notification instead of polling (performance)
- Map photo fetches: concurrency limited to 3
- CustomSelect: auto-opens upward near screen bottom
- Panel centering between sidebars (PR #120)
- Vacay month/weekday: Intl.DateTimeFormat instead of hardcoded arrays (PR #122)
- Budget currencies: expanded from 14 to 46 (#96)
- Dockerfile: run as non-root user (PR #118)
- Timed places auto-sort chronologically when time is added
🏗️ Infrastructure
- Nodemailer for SMTP email delivery
- Notification preferences DB table
- Share tokens DB table with per-field permissions
- Audit log DB table with index
- MCP server with Streamable HTTP transport, per-user session management
mcp_tokensDB table with SHA256 hash index- New addon type:
integration(backend-only, no dedicated page) - Zustand addon store replaces event-based addon refresh
- New server routes: /notifications, /share, /maps/resolve-url, /mcp
- 14 new DB migrations
Full Changelog: v2.7.0...v2.7.1