A SvelteKit-based map application with OpenLayers, migrated from the AngularJS-based bielefeldGEOCLIENT.
# Docker
sudo apt update
sudo apt install docker.io docker-compose-v2
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Log out and back in for group changes to take effect
# Without Docker (native development)
sudo apt install nodejs npm python3 python3-venv
# Docker
sudo pacman -S docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Log out and back in for group changes to take effect
# Without Docker (native development)
sudo pacman -S nodejs npm python python-virtualenv
OLKD_Svelte/
├── src/ # SvelteKit frontend
│ ├── lib/
│ │ ├── components/ # Svelte components (Map, Layerswitcher)
│ │ ├── layers/ # Layer classes (TiledWMS, WMTS, etc.)
│ │ ├── services/ # API client
│ │ └── stores/ # Svelte stores (config, map, layers)
│ └── routes/ # SvelteKit routes
├── backend/ # Standalone Flask API
│ ├── munimap/ # Flask application
│ ├── configs/ # YAML configuration files
│ │ ├── app_configs/ # Application configurations
│ │ ├── layers_conf/ # Layer definitions
│ │ └── static_geojson/ # Static GeoJSON files
│ └── Dockerfile
├── Dockerfile # Frontend Dockerfile (multi-stage)
├── docker-compose.yml # Development setup
├── docker-compose.prod.yml # Production setup
├── nginx.conf # Production nginx config
├── start-dev.sh # Native development startup script
└── package.json
docker compose up
This starts:
Open http://localhost:5173/app/default/ to view the application.
Source code is mounted as volumes, so changes will hot-reload automatically.
docker compose -f docker-compose.prod.yml up -d
This builds optimized images and serves the app on http://localhost:80 with nginx.
# Rebuild after Dockerfile changes
docker compose build --no-cache
# View logs
docker compose logs -f
# Stop containers
docker compose down
# Remove all containers and volumes
docker compose down -v
./start-dev.sh
npm install
npm run dev
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
FLASK_APP=munimap.app:create_app flask run --host=0.0.0.0 --port=8080
GET /api/v1/app/<config>/config - Application and layer configurationGET /api/v1/app/config - Default configurationGET /proxy/wms/<hash>/service - WMS proxy for map tilesGET /static_geojson/<filename> - Static GeoJSON filesGET /health - Health checkdocker compose -f docker-compose.prod.yml build
npm run build
The build output will be in the build/ directory.
Edit backend/configs/app_configs/default.yaml to customize:
Add/modify YAML files in backend/configs/layers_conf/ to define: