What's New in 2.7.0
This is a major feature release with significant improvements to the Atlas, Packing system, Authentication, and overall UX.
🗺️ Atlas — Country Marking & Bucket List
Mark countries as visited directly on the map — no trip required. Click any country on the Atlas map and choose:
- Mark as visited — adds the country to your visited list with a confirmation popup
- Add to Bucket List — save it as a place you want to visit, with a planned month and year
The Bucket List appears as a new tab in the Atlas sidebar alongside Statistics. Countries in the bucket list show with their flag and planned travel date. The bucket list uses the same glass-panel design as the stats bar.
Also fixed: France, Norway, and Israel now display correctly on the Atlas (ADM0_A3 prioritized over ISO_A3). Full A2↔A3 country code mapping for ~195 countries.
🎒 Packing System — Complete Overhaul
Category-first workflow:
- Add categories first (e.g. "Clothing", "Hygiene"), then add items inside each category
- Replaces the old freetext item+category input
- Inline "Add item" button inside each category group
Packing Templates (Admin → Configuration):
- Create reusable templates with categories and items
- Apply templates to any trip — items are added additively (existing items preserved)
- Full CRUD: rename, edit, delete templates/categories/items
User Assignment:
- Assign trip members to packing categories — click the + icon next to any category name
- Avatar chips with tooltip show who's responsible for each list
Bag Tracking (Admin → Addons, under Packing — disabled by default):
- Enable weight tracking and bag assignment for packing items
- Each item gets a weight field (grams) and a bag assignment dot
- Create bags on the fly from the item's bag picker
- Desktop: iOS-style weight distribution sidebar with colored bars per bag, total weight, unassigned items
- Mobile: "Bags" button opens a modal with the same info
- Bags are per-trip with auto-assigned colors
Other packing improvements:
- Stable category ordering (no more jumping when items change)
- Mobile: all action buttons always visible (no hover required)
🔐 Two-Factor Authentication (MFA)
- Enable 2FA in Settings → Profile with any TOTP authenticator app (Google Authenticator, Authy, etc.)
- QR code setup with manual secret key option
- 6-digit code verification on login
- Can be disabled with password + current code
- Fully translated in all 8 languages
Thanks to @fgbona for the initial MFA implementation.
🔗 Invite Registration Links
Admins can create one-time registration links (Admin → Users):
- Configurable max uses: 1×, 2×, 3×, 4×, 5×, or unlimited
- Optional expiry: 1 day, 3 days, 7 days, 14 days, or never
- Recipients can register even when public registration is disabled
- Links are automatically invalidated after reaching their usage limit
- Full link management: create, view status, copy, delete
- Race-condition safe (atomic usage counting)
🗓️ Trip Creation UX
- Drag & drop cover image — drag an image onto the upload area
- Paste cover image — paste from clipboard (already existed)
- Manual date entry — double-click the date picker to type a date directly (supports DD.MM.YYYY, YYYY-MM-DD, and natural language)
- Add travel buddies — select members via the familiar CustomSelect dropdown when creating a trip (no need to share afterwards)
🗃️ Dashboard — Grid/List View Toggle
Switch between card grid and compact list view on the My Trips page. Click the toggle icon next to the settings button. Preference is saved in localStorage.
🏨 "Hotel" → "Accommodation"
The booking type "Hotel" in reservations has been renamed to "Accommodation" across all languages — better fits cabins, tents, RVs, Airbnbs, etc. Categories remain fully customizable in the Admin panel.
🗺️ Map — Category Filter Sync
When you filter by category in the Places sidebar (e.g. "Restaurant"), the map pins now update accordingly — only places matching the selected category are shown. Clearing the filter brings all pins back.
🗺️ Map — Click Behavior Fix
Clicking a place on the map now pans to it without changing your zoom level. Previously it would zoom out to fit all day places. Day selection still fits all places for that day.
🔑 OIDC_ONLY Environment Variable
You can now set OIDC_ONLY=true as an environment variable to disable password authentication entirely. On a fresh install, there's no local admin account prompt — only OIDC login. Env var takes priority over the web UI setting.
environment:
OIDC_ISSUER: https://auth.example.com
OIDC_CLIENT_ID: trek
OIDC_CLIENT_SECRET: supersecret
OIDC_DISPLAY_NAME: "Authelia"
OIDC_ONLY: "true"🌍 Languages
- New language: Arabic (العربية) with full RTL support
- All 8 languages fully synced to 1086 translation keys: English, German, Spanish, French, Russian, Chinese, Dutch, Arabic
🛠️ Admin Panel Reorganization
- "Categories" and "Packing Templates" merged into a single "Configuration" tab
- Bag Tracking toggle moved under the Packing addon in the Addons tab (as a sub-option)
- Mobile: button labels shortened, enabled/disabled badges hidden on small screens
🐛 Bug Fixes
- Atlas: France, Norway, Israel not showing (ISO_A3 → ADM0_A3 fix, thanks @Summerfeeling)
- Helmet CSP:
upgrade-insecure-requestsno longer breaks HTTP deployments - MFA: database migration ordering fixed for existing installations
- Settings: increased spacing between password/MFA sections
- Language buttons: unified sizing across all settings
📦 How to Update
Docker (recommended):
docker compose pull
docker compose up -dManual / Git:
git pull origin main
cd server && npm install
cd ../client && npm install && npm run build
# Restart your serverDatabase migrations run automatically on startup.
Thanks to all contributors: @fgbona (MFA), @mansourSaleh (Arabic), @Summerfeeling (Atlas fix), and everyone who filed issues and feedback!