Commit Graph

36 Commits

Author SHA1 Message Date
Maurice
45d410c1b0 Demo baseline reset: full DB snapshot/restore (v2.3.0)
Hourly reset now restores entire DB from baseline snapshot instead of
just deleting demo trips. This reverts ALL demo user changes including
modifications to shared admin trips. Admin credentials (password, API
keys) are preserved across resets. Admin can save new baseline via
Admin Panel button. Removed demoWriteBlock middleware.
2026-03-19 16:31:27 +01:00
Maurice
cd36fba0c9 Add security policy (v2.2.8) 2026-03-19 16:16:47 +01:00
Maurice
f93efe9740 Add Nginx WebSocket config to README with reverse proxy docs (v2.2.7) 2026-03-19 16:01:05 +01:00
Maurice
53b1c8617e Add reset countdown timer to demo popup (v2.2.6) 2026-03-19 15:42:22 +01:00
Maurice
bf7412d016 Fix PDF export: show trip title instead of 'Meine Reise' (v2.2.5) 2026-03-19 15:31:20 +01:00
Maurice
9b0755debc Demo popup: show on every dashboard visit, add upload notice (v2.2.4)
- Popup now shows every time user visits dashboard (not session-cached)
- Only shows on dashboard, not other pages
- Added upload disabled notice with amber highlight
- Upload listed as first full-version feature
2026-03-19 15:17:31 +01:00
Maurice
c582a7b6c8 Block uploads for demo user, restore PDF preview modal (v2.2.3)
- Demo user gets 403 on all upload endpoints (files, photos, cover, avatar)
- Admin uploads still work normally
- PDF export back in modal popup using srcdoc iframe
- Zero behavior change when DEMO_MODE is not set
2026-03-19 15:09:20 +01:00
Maurice
1a5c8cd385 Fix PDF: export opens in new tab, file preview uses object tag (v2.2.2) 2026-03-19 15:01:27 +01:00
Maurice
98f90adb6d Bump version to 2.2.1 2026-03-19 14:57:42 +01:00
Maurice
0935143001 Fix PDF preview: use srcdoc instead of blob URL to avoid X-Frame-Options 2026-03-19 14:53:38 +01:00
Maurice
c3535967ee Show app version (v2.2.0) in user menu 2026-03-19 14:49:36 +01:00
Maurice
4d9854062c Fix PDF export: allow same-origin iframes (X-Frame-Options) 2026-03-19 14:44:35 +01:00
Maurice
173d6cd953 Fix travel-stats: wrong JOIN on days table (d.trip_id not d.id) 2026-03-19 14:22:05 +01:00
Maurice
da79059576 Replace demo banner with dismissable popup modal
Shows once per session, no layout interference with navbar/map.
Uses sessionStorage so it reappears on next visit.
2026-03-19 14:09:12 +01:00
Maurice
f856956428 Remove demo deployment folder (moved to nomad-demo repo) 2026-03-19 14:00:04 +01:00
Maurice
4e33d710ea Fix demo banner: add EN/DE translations, fix navbar overlap
Banner is now in document flow instead of fixed position,
so it no longer covers the navigation. Language follows
the app's i18n setting.
2026-03-19 13:58:27 +01:00
Maurice
c2bb9a904c Fix Docker build: add setup-buildx-action for push 2026-03-19 13:41:48 +01:00
Maurice
aeac66baff Allow manual workflow trigger for Docker build 2026-03-19 13:39:12 +01:00
Maurice
9a8c24cf7b Add GitHub Actions workflow for Docker Hub auto-build 2026-03-19 13:35:11 +01:00
Maurice
e8acbbd129 Add demo mode with hourly reset, example trips & demo banner
DEMO_MODE=true enables: auto-seeded admin + demo user, 3 example trips
(Tokyo, Barcelona, Wien), hourly reset of demo user data, one-click
demo login, visible banner with feature info. Zero behavior change
when DEMO_MODE is not set.
2026-03-19 13:25:37 +01:00
Maurice
f8dcce802e Replace MIT license with AGPL-3.0 2026-03-19 13:01:55 +01:00
Maurice
5d73beca8f Update README for v2.1.0 — add WebSocket, remove outdated features, AGPL license 2026-03-19 12:53:02 +01:00
Maurice
74f19f3312 v2.1.0 — Real-time collaboration, performance & security overhaul
Real-Time Collaboration (WebSocket):
- WebSocket server with JWT auth and trip-based rooms
- Live sync for all CRUD operations (places, assignments, days, notes, budget, packing, reservations, files)
- Socket-based exclusion to prevent duplicate updates
- Auto-reconnect with exponential backoff
- Assignment move sync between days

Performance:
- 16 database indexes on all foreign key columns
- N+1 query fix in places, assignments and days endpoints
- Marker clustering (react-leaflet-cluster) with configurable radius
- List virtualization (react-window) for places sidebar
- useMemo for filtered places
- SQLite WAL mode + busy_timeout for concurrent writes
- Weather API: server-side cache (1h forecast, 15min current) + client sessionStorage
- Google Places photos: persisted to DB after first fetch
- Google Details: 3-tier cache (memory → sessionStorage → API)

Security:
- CORS auto-configuration (production: same-origin, dev: open)
- API keys removed from /auth/me response
- Admin-only endpoint for reading API keys
- Path traversal prevention in cover image deletion
- JWT secret persisted to file (survives restarts)
- Avatar upload file extension whitelist
- API key fallback: normal users use admin's key without exposure
- Case-insensitive email login

Dark Mode:
- Fixed hardcoded colors across PackingList, Budget, ReservationModal, ReservationsPanel
- Mobile map buttons and sidebar sheets respect dark mode
- Cluster markers always dark

UI/UX:
- Redesigned login page with animated planes, stars and feature cards
- Admin: create user functionality with CustomSelect
- Mobile: day-picker popup for assigning places to days
- Mobile: touch-friendly reorder buttons (32px targets)
- Mobile: responsive text (shorter labels on small screens)
- Packing list: index-based category colors
- i18n: translated date picker placeholder, fixed German labels
- Default map tile: CartoDB Light
2026-03-19 12:46:11 +01:00
Maurice
f000943489 Show NOMAD instead of translated name in navbar 2026-03-19 00:48:30 +01:00
Maurice
5b1a9d6e3b Update README: JWT_SECRET optional, add docker run update instructions 2026-03-19 00:33:33 +01:00
Maurice
2cad77c8fb Auto-generate JWT_SECRET in all environments
No more crash on missing JWT_SECRET. A random secret is generated
automatically with a warning that sessions won't persist across restarts.
2026-03-19 00:29:38 +01:00
Maurice
393f77850b Mention port without full URL in Quick Start 2026-03-19 00:23:05 +01:00
Maurice
b54422a33f Remove port from Quick Start instructions 2026-03-19 00:22:42 +01:00
Maurice
8abebdf17f Simplify Quick Start to single docker run command 2026-03-19 00:21:57 +01:00
Maurice
3b683519c9 Add Docker Hub image support and update deployment docs 2026-03-19 00:18:39 +01:00
Maurice
8601370a47 Allow all origins by default, restrict only when ALLOWED_ORIGINS is set
Same-origin requests don't need CORS restrictions. Users can optionally
set ALLOWED_ORIGINS to lock it down.
2026-03-19 00:13:23 +01:00
Maurice
c6a9b54662 Update README with complete feature list and API key docs 2026-03-19 00:07:01 +01:00
Maurice
0b922ab1a6 Update README for NOMAD with Docker deployment guide 2026-03-19 00:02:18 +01:00
Maurice
10cf482d9f Merge remote .gitignore and resolve conflict 2026-03-18 23:59:12 +01:00
Maurice
cb1e217bbe Initial commit — NOMAD (Navigation Organizer for Maps, Activities & Destinations)
Self-hosted travel planner with Express.js, SQLite, React & Tailwind CSS.
2026-03-18 23:58:08 +01:00
mauriceboe
ad36d1ba7c Initial commit 2026-03-18 23:53:12 +01:00