# FreeMoto Web

A web-based motorcycle route planner built with Go, Leaflet, Bootstrap, and Valhalla routing, ready for containerized deployment.

## Features

- Interactive map with OpenStreetMap tiles
- Route planning with options (avoid highways, tolls, ferries, unpaved, shortest route)
- Docker-ready and configurable via `.env`

## Getting Started

### Prerequisites

- [Go](https://golang.org/) (1.22+ recommended)
- [Docker](https://www.docker.com/) (for container builds)
- [Valhalla](https://github.com/valhalla/valhalla) routing backend
- [Gitea](https://gitea.io/) (optional, for CI/CD and registry)

### Configuration

Create a `.env` file in the project root:

```
VALHALLA_URL=http://valhalla:8002/route
PORT=8080
# Optional: Nominatim base URL (defaults to https://nominatim.openstreetmap.org)
NOMINATIM_URL=https://nominatim.openstreetmap.org
# Recommended: configure a descriptive User-Agent per Nominatim usage policy
# Example format: "AppName/Version (+contact-url-or-email)"
NOMINATIM_USER_AGENT=FreeMoto/1.0 (+https://fm.ztsw.de/)
# Optional: log level (debug, info, warn, error). Default: info
LOG_LEVEL=info
```

### Local Development

```bash
cd app/web
go run main.go
```

Visit [http://localhost:8080](http://localhost:8080) in your browser.

### Docker

Build and run the container:

```bash
docker build -t freemoto-web .
docker run --env-file .env -p 8080:8080 freemoto-web
```

### Docker Compose

Example `docker-compose.yml`:

```yaml
services:
  freemoto-web:
    image: git.ztsw.de/pedan/freemoto/freemoto-web:latest
    ports:
      - "8080:8080"
    env_file:
      - .env
    #environment:
      # - VALHALLA_URL=http://10.200.0.15:8002/route
      # - PORT=8080
      # - NOMINATIM_URL=https://nominatim.openstreetmap.org
      # - NOMINATIM_USER_AGENT=FreeMoto/1.0 (+https://fm.ztsw.de/)
      # - LOG_LEVEL=debug
  valhalla-scripted:
    image: ghcr.io/valhalla/valhalla-scripted:latest
    ports:
        - 8002:8002
    volumes:
        - $PWD/custom_files:/custom_files
    environment:
        - tile_urls=https://download.geofabrik.de/europe/germany-latest.osm.pbf 
```

### Notes on Nominatim

- Please follow the official usage policy for Nominatim. Provide a meaningful `NOMINATIM_USER_AGENT` that includes a contact URL or email. The default is `FreeMoto/1.0 (+https://fm.ztsw.de/)`.
- You can point `NOMINATIM_URL` to your own Nominatim instance or keep the default public endpoint.

### Logging

- Configure verbosity with `LOG_LEVEL`.
  - Supported values: `debug`, `info` (default), `warn`, `error`.
- Incoming requests are logged at `info` level. Upstream success traces (Valhalla/Nominatim) are at `debug`. Errors are at `error`.

## Customization

- **Map UI:** Edit `static/index.html` and `static/main.js`
- **Routing logic:** Edit `static/route.js`
- **Geolocation/autocomplete:** Edit `static/geolocate.js`
- **Backend proxy:** Edit `main.go`

## License

MIT