๐ README ๆ่ฆ
A self-hosted, real-time collaborative travel planner โ with maps, budgets, packing lists, a journal, and AI built in.
---
---
## What you get
See all features
#### ๐งญ Trip planning
- **Drag & drop planner** โ organise places into day plans with reordering and cross-day moves
- **Interactive map** โ Leaflet or Mapbox GL with 3D buildings, terrain, photo markers, clustering, route visualization
- **Place search** โ Google Places (photos, ratings, hours) or OpenStreetMap (free, no API key)
- **Place import** โ shared Google Maps / Naver Maps lists, plus GPX and KML/KMZ/GeoJSON map files
- **Day notes** โ timestamped, icon-tagged notes with drag-and-drop reordering
- **Route optimisation** โ auto-sort places and export to Google Maps
- **Weather forecasts** โ 16-day via Open-Meteo (no key) + historical climate fallback
- **Category filter** โ show only matching pins on the map
#### ๐งณ Travel management
- **Reservations** โ flights, accommodations, restaurants with status, confirmation numbers, files; import from booking confirmation emails and PDFs (KDE Itinerary)
- **Costs** โ track and split trip expenses (Splitwise-style): per-person / per-day breakdowns, settle-up, multi-currency
- **Packing lists** โ categories, templates, user assignment, progress tracking
- **Bag tracking** โ optional weight tracking with iOS-style distribution
- **Document manager** โ attach docs, tickets, PDFs to trips / places / reservations (โค 50 MB each)
- **PDF export** โ full trip plan as PDF with cover page, images, notes
#### ๐ฅ Collaboration
- **Real-time sync** โ WebSocket. Changes appear instantly across all connected users
- **Multi-user trips** โ invite members with role-based access
- **Invite links** โ one-time or reusable links with expiry
- **SSO (OIDC)** โ Google, Apple, Authentik, Keycloak, or any OIDC provider
- **2FA** โ TOTP + backup codes
- **Passkeys** โ passwordless WebAuthn login (fingerprint / face / PIN / security key), admin-toggleable
- **Collab suite** โ group chat, shared notes, polls, day check-ins
#### ๐ฑ Mobile & PWA
- **Installable** โ iOS and Android, straight from the browser, no App Store needed
- **Offline support** โ Service Worker caches tiles, API, uploads via Workbox
- **Native feel** โ fullscreen standalone, themed status bar, splash screen
- **Touch optimised** โ mobile-specific layouts with safe-area handling
#### ๐งฉ Addons (admin-toggleable)
- **Lists** โ packing lists + to-dos with templates, member assignments, optional bag tracking
- **Costs** โ expense tracker with splits and settle-up (who owes whom), multi-currency
- **Documents** โ file attachments on trips, places, and reservations
- **Collab** โ chat, notes, polls, day-by-day attendance
- **Vacay** โ personal vacation planner with calendar, 100+ country holidays, carry-over tracking
- **Atlas** โ world map of visited countries, bucket list, travel stats, streak tracking, liquid-glass UI
- **Journey** โ magazine-style travel journal with entries, photos (Immich/Synology), maps, moods
- **AirTrail** โ connect a self-hosted AirTrail instance to import and sync flights into reservations
- **MCP** โ expose TREK to AI assistants via OAuth 2.1
#### ๐ค AI / MCP
- **Built-in MCP server** โ OAuth 2.1 authenticated. 150+ tools, 30 resources
- **Granular scopes** โ 27 OAuth scopes across 13 permission groups
- **Full automation** โ AI can create trips, plan days, build packing lists, manage budgets, mark countries visited
- **Pre-built prompts** โ `trip-summary`, `packing-list`, `budget-overview`
- **Addon-aware** โ exposes Atlas, Collab, Vacay when those addons are on
#### โ๏ธ Admin & customisation
- **Dashboard views** โ card grid or compact list ยท **Dark mode** โ full theme with matching status bar
- **20 languages** โ EN, DE, ES, FR, IT, NL, HU, RU, ZH, ZH-TW, PL, CS, AR (RTL), BR, ID, TR, JA, KO, UK, GR
- **Admin panel** โ users, invites, packing templates, categories, addons, API keys, backups, GitHub history
- **Notifications** โ per-user preferences across email (SMTP), webhook, ntfy, and an in-app notification center
- **Auto-backups** โ scheduled with configurable retention ยท **Units** โ ยฐC/ยฐF, 12h/24h, map tile sources, default coordinates
## Get started in 30 seconds
ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d -p 3000:3000 \
-e ENCRYPTION_KEY=$ENCRYPTION_KEY \
-v ./data:/app/data -v ./uploads:/app/uploads mauriceboe/trek
Open `http://localhost:3000`. On first boot TREK seeds an admin account โ if you set `ADMIN_EMAIL`/`ADMIN_PASSWORD` those are used, otherwise the credentials are printed to the container log (`docker logs trek`).
ยท Docker Compose ยท Helm / Kubernetes ยท Install as PWA ยท Reverse Proxy ยท
## Tech stack
Real-time sync via WebSocket (`ws`). Backend on NestJS 11. State with Zustand. Auth via JWT + OAuth 2.1 + OIDC + Passkeys (WebAuthn) + TOTP MFA. Weather via Open-Meteo (no key required). Maps with Leaflet and Mapbox GL.
Docker Compose (production)
Full compose example with secure defaults
services:
app:
image: mauriceboe/trek:latest
container_name: trek
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
tmpfs:
- /tmp:noexec,nosuid,size=64m
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- PORT=3000
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-} # generate with: openssl rand -hex 32
- TZ=${TZ:-UTC}
- LOG_LEVEL=${LOG_LEVEL:-info}
- ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-}
- APP_URL=${APP_URL:-} # required for OIDC + email