0b922ab1a608b95d2077588cd0f09df8e48ee163
NOMAD
Navigation Organizer for Maps, Activities & Destinations
A self-hosted travel planner for organizing trips, places, budgets, packing lists, and more.
Features
- Drag & Drop Planner — Organize places into day plans with drag & drop
- Google Maps Integration — Search and auto-fill place details
- Budget Tracking — Track expenses per trip with pie chart overview
- Packing Lists — Grouped lists with progress tracking and suggestions
- Photo Gallery — Upload and manage trip photos
- File Storage — Attach documents, tickets, and PDFs to trips
- Reservations — Track booking status and details
- Weather — Weather forecasts for your destinations
- PDF Export — Export trip plans as PDF
- Multi-User — Invite members to collaborate on trips
- Admin Panel — User management, backups, and app settings
- Dark Mode — Full light/dark theme support
- i18n — English and German
Tech Stack
- Backend: Node.js 22 + Express + SQLite (
node:sqlite) - Frontend: React 18 + Vite + Tailwind CSS
- State: Zustand
- Auth: JWT
- Maps: Leaflet + Google Places API
- Icons: lucide-react
Deployment with Docker
Prerequisites
- Docker & Docker Compose
- A Google Maps API key (optional, for place search)
1. Clone the repository
git clone https://github.com/mauriceboe/NOMAD.git
cd NOMAD
2. Configure environment
cp server/.env.example .env
Edit the .env or set variables in docker-compose.yml:
| Variable | Required | Description |
|---|---|---|
JWT_SECRET |
Yes | Secret key for JWT signing (min. 32 characters) |
ALLOWED_ORIGINS |
No | Comma-separated list of allowed origins (default: http://localhost:3000) |
PORT |
No | Server port (default: 3000) |
3. Start the app
docker compose up -d --build
The app is now running. Open your browser and navigate to your server's IP or domain on port 3000.
4. First setup
The first user to register automatically becomes the admin. No default credentials — you create your own account.
Updating
git pull
docker compose up -d --build
Your data is persisted in the ./data and ./uploads volumes.
Reverse Proxy (recommended)
For production, put NOMAD behind a reverse proxy (Nginx, Caddy, Traefik) with HTTPS.
Example with Caddy (Caddyfile):
nomad.yourdomain.com {
reverse_proxy localhost:3000
}
Update ALLOWED_ORIGINS in docker-compose.yml to match your domain:
environment:
- ALLOWED_ORIGINS=https://nomad.yourdomain.com
Google Maps API Setup
- Go to Google Cloud Console
- Create a project and enable the Places API (New)
- Create an API key under Credentials
- In NOMAD: Admin Panel → API Keys → enter your key
Data & Backups
- Database: SQLite, stored in
./data/travel.db - Uploads: Stored in
./uploads/ - Backups: Can be created and managed in the Admin Panel
- Auto-Backups: Configurable schedule in Admin Panel
License
Description
Languages
TypeScript
64.7%
JavaScript
35%
CSS
0.2%