diff --git a/README.md b/README.md index 3d900db..794be10 100644 --- a/README.md +++ b/README.md @@ -8,19 +8,23 @@ A self-hosted travel planner for organizing trips, places, budgets, packing list ## 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 +- **Drag & Drop Planner** — Organize places into day plans with drag & drop reordering +- **Interactive Map** — Leaflet map with place markers, route visualization, and customizable tile sources +- **Google Places Search** — Search and auto-fill place details including ratings, reviews, and opening hours (requires API key) +- **Weather Forecasts** — Current weather and 5-day forecasts for your destinations (requires API key) +- **Budget Tracking** — Category-based expenses with pie chart, per-person/per-day splitting, and multi-currency support +- **Packing Lists** — Grouped checklists with progress tracking, drag & drop reordering, and smart suggestions +- **Reservations** — Track booking status, confirmation numbers, and reservation details +- **File Storage** — Attach documents, tickets, and PDFs to your trips (up to 50 MB per file) +- **Photo Gallery** — Upload and manage trip photos with lightbox view +- **PDF Export** — Export complete trip plans as PDF +- **Multi-User** — Invite members to collaborate on shared trips +- **Day Notes** — Add notes to individual days +- **Admin Panel** — User management, global categories, API key configuration, and backups +- **Auto-Backups** — Scheduled backups with configurable interval and retention +- **Dark Mode** — Full light and dark theme support +- **Multilingual** — English and German (i18n) +- **Customizable** — Temperature units, time format (12h/24h), map tile sources, default coordinates ## Tech Stack @@ -28,7 +32,8 @@ A self-hosted travel planner for organizing trips, places, budgets, packing list - **Frontend**: React 18 + Vite + Tailwind CSS - **State**: Zustand - **Auth**: JWT -- **Maps**: Leaflet + Google Places API +- **Maps**: Leaflet + Google Places API (optional) +- **Weather**: OpenWeatherMap API (optional) - **Icons**: lucide-react ## Deployment with Docker @@ -36,7 +41,6 @@ A self-hosted travel planner for organizing trips, places, budgets, packing list ### Prerequisites - Docker & Docker Compose -- A Google Maps API key (optional, for place search) ### 1. Clone the repository @@ -47,29 +51,25 @@ cd NOMAD ### 2. Configure environment -```bash -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) | +| `JWT_SECRET` | **Yes** (production) | Secret key for JWT signing (min. 32 characters). Auto-generated in development. | | `ALLOWED_ORIGINS` | No | Comma-separated list of allowed origins (default: `http://localhost:3000`) | | `PORT` | No | Server port (default: `3000`) | +Set these in `docker-compose.yml` under `environment`. + ### 3. Start the app ```bash 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`. +The app is now running on port `3000`. ### 4. First setup -The first user to register automatically becomes the **admin**. No default credentials — you create your own account. +The **first user to register** automatically becomes the admin. No default credentials. ### Updating @@ -82,9 +82,9 @@ 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. +For production, put NOMAD behind a reverse proxy with HTTPS (e.g. Nginx, Caddy, Traefik). -Example with **Caddy** (`Caddyfile`): +Example with **Caddy**: ``` nomad.yourdomain.com { @@ -99,19 +99,29 @@ environment: - ALLOWED_ORIGINS=https://nomad.yourdomain.com ``` -## Google Maps API Setup +## Optional API Keys + +API keys are configured in the **Admin Panel** after login. + +### Google Maps (Place Search) 1. Go to [Google Cloud Console](https://console.cloud.google.com/) 2. Create a project and enable the **Places API (New)** 3. Create an API key under Credentials -4. In NOMAD: Admin Panel → API Keys → enter your key +4. In NOMAD: Admin Panel → API Keys → Google Maps + +### OpenWeatherMap (Weather Forecasts) + +1. Sign up at [OpenWeatherMap](https://openweathermap.org/api) +2. Get a free API key +3. In NOMAD: Admin Panel → API Keys → OpenWeatherMap ## 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 +- **Backups**: Create and restore via Admin Panel +- **Auto-Backups**: Configurable schedule and retention in Admin Panel ## License