diff --git a/.reuse/dep5 b/.reuse/dep5
index f30224f2..7519084a 100644
--- a/.reuse/dep5
+++ b/.reuse/dep5
@@ -3,7 +3,7 @@ Upstream-Name: odh-mentor-otp
 Upstream-Contact: NOI Techpark <digital@noi.bz.it>
 Source: https://github.com/noi-techpark/odh-mentor-otp
 
-Files: .github/* infrastructure .pre-commit-config.yaml .gitignore .dockerignore AUTHOR.txt *.json dotenv.example osm.url *.jar */.nvmrc *.geojson docs/images/* gbfs/bikestations_meran.csv */dotenv.example gtfs2bbox/tests/* journey/yarn.lock journey/src/fonts/* journey/src/images/* vms/README vms/.gitignore journey/src/otp-ui/icons/openmove/README vms/signs/* journey/src/otp-ui/icons/.eslintrc journey/src/otp-ui/icons/*.svg otp-react-redux-config/config.yml
+Files: .github/* infrastructure .pre-commit-config.yaml .gitignore .gitmodules .dockerignore AUTHOR.txt *.json dotenv.example osm.url *.jar */.nvmrc *.geojson docs/images/* gbfs/bikestations_meran.csv */dotenv.example gtfs2bbox/tests/* journey/yarn.lock journey/src/fonts/* journey/src/images/* vms/README vms/.gitignore journey/src/otp-ui/icons/openmove/README vms/signs/* journey/src/otp-ui/icons/.eslintrc journey/src/otp-ui/icons/*.svg otp-react-redux-config/config.yml
 Copyright: (c) NOI Techpark <digital@noi.bz.it>
 License: CC0-1.0
 
@@ -19,3 +19,7 @@ License: BSD-2-Clause
 Files: journey/src/styles/cookieconsent/cookieconsent.css journey/src/util/cookieconsent.js
 Copyright: (c) 2020-2023 Orest Bida
 License: MIT
+
+Files: web-demo/.gitignore web-demo/.babelrc
+Copyright: (c) 2017 Conveyal
+License: MIT
diff --git a/pelias/.gitignore b/pelias/.gitignore
new file mode 100644
index 00000000..b4589ec4
--- /dev/null
+++ b/pelias/.gitignore
@@ -0,0 +1,5 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+./data
\ No newline at end of file
diff --git a/pelias/README.md b/pelias/README.md
new file mode 100644
index 00000000..611be0c1
--- /dev/null
+++ b/pelias/README.md
@@ -0,0 +1,66 @@
+<!--
+SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+
+SPDX-License-Identifier: MIT
+-->
+
+# Italian area
+
+This project is configured to download/prepare/build a complete Pelias installation for South-Tyrol.
+
+# Setup
+
+Please refer to the instructions at <https://github.com/pelias/docker> in order to install and configure your docker environment.
+
+The minimum configuration required in order to run this project are [installing prerequisites](https://github.com/pelias/docker#prerequisites), [install the pelias command](https://github.com/pelias/docker#installing-the-pelias-command) and [configure the environment](https://github.com/pelias/docker#configure-environment)
+
+You also need `curl`, `jq` and `node` to import OpenTripPlanner stops and NOI Datahub Activities and Accomodations POI.
+
+Please ensure that's all working fine before continuing.
+
+# Run a Build
+
+To run a complete build, execute the following commands:
+
+## Pull relevant images and create elasticsearch shard (see pelias.json configuration)
+```bash
+pelias compose pull
+pelias elastic start
+pelias elastic wait
+pelias elastic create
+```
+
+## Download all the relevant information
+
+```bash
+pelias download all
+pelias prepare all
+./importers/download_and_prepare_stops.sh
+./importers/download_and_prepare_poi.sh
+```
+
+## Import all the data in the service
+```bash
+pelias import all
+```
+
+## Frequently update stops and POI
+```bash
+./importers/download_and_prepare_stops.sh
+./importers/download_and_prepare_poi.sh
+./importers/delete_old_poi_and_stops.sh
+pelias import csv
+```
+
+# Starting the service
+The API service can then be started with the following command
+
+```bash
+pelias compose up -d
+```
+
+# Make an Example Query
+
+You can now make queries against your new Pelias build:
+
+<http://localhost:4000/v1/search?text=Morena>
diff --git a/pelias/docker-compose.yml b/pelias/docker-compose.yml
new file mode 100644
index 00000000..8aa2b503
--- /dev/null
+++ b/pelias/docker-compose.yml
@@ -0,0 +1,116 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+version: '3'
+networks:
+  default:
+    driver: bridge
+services:
+  libpostal:
+    image: pelias/libpostal-service
+    container_name: pelias_libpostal
+    user: "${DOCKER_USER}"
+    restart: always
+    ports: [ "127.0.0.1:4400:4400" ]
+  schema:
+    image: pelias/schema:master
+    container_name: pelias_schema
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+  api:
+    image: pelias/api:master
+    container_name: pelias_api
+    user: "${DOCKER_USER}"
+    restart: always
+    environment: [ "PORT=4000" ]
+    ports: [ "0.0.0.0:4000:4000" ]
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+  placeholder:
+    image: pelias/placeholder:master
+    container_name: pelias_placeholder
+    user: "${DOCKER_USER}"
+    restart: always
+    environment: [ "PORT=4100" ]
+    ports: [ "127.0.0.1:4100:4100" ]
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+      - "./blacklist/:/data/blacklist"
+  whosonfirst:
+    image: pelias/whosonfirst:master
+    container_name: pelias_whosonfirst
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  openstreetmap:
+    image: pelias/openstreetmap:master
+    container_name: pelias_openstreetmap
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  openaddresses:
+    image: pelias/openaddresses:master
+    container_name: pelias_openaddresses
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  csv-importer:
+    image: pelias/csv-importer:master
+    container_name: pelias_csv_importer
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+      - "./blacklist/:/data/blacklist"
+  polylines:
+    image: pelias/polylines:master
+    container_name: pelias_polylines
+    user: "${DOCKER_USER}"
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  interpolation:
+    image: pelias/interpolation:master
+    container_name: pelias_interpolation
+    user: "${DOCKER_USER}"
+    restart: always
+    environment: [ "PORT=4300" ]
+    ports: [ "127.0.0.1:4300:4300" ]
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  pip:
+    image: pelias/pip-service:master
+    container_name: pelias_pip-service
+    user: "${DOCKER_USER}"
+    restart: always
+    environment: [ "PORT=4200" ]
+    ports: [ "127.0.0.1:4200:4200" ]
+    volumes:
+      - "./pelias.json:/code/pelias.json"
+      - "${DATA_DIR}:/data"
+  elasticsearch:
+    image: pelias/elasticsearch:7.16.1
+    container_name: pelias_elasticsearch
+    user: "${DOCKER_USER}"
+    restart: always
+    ports: [ "127.0.0.1:9200:9200", "127.0.0.1:9300:9300" ]
+    volumes:
+      - "./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro"
+      - "${DATA_DIR}/elasticsearch:/usr/share/elasticsearch/data"
+    ulimits:
+      memlock:
+        soft: -1
+        hard: -1
+      nofile:
+        soft: 65536
+        hard: 65536
+    cap_add: [ "IPC_LOCK" ]
+    security_opt:
+      - seccomp=unconfined
diff --git a/pelias/elasticsearch.yml b/pelias/elasticsearch.yml
new file mode 100644
index 00000000..be1c1f2b
--- /dev/null
+++ b/pelias/elasticsearch.yml
@@ -0,0 +1,8 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+network.host: 0.0.0.0
+bootstrap.memory_lock: true
+indices.breaker.fielddata.limit: 85%
+indices.fielddata.cache.size: 75%
\ No newline at end of file
diff --git a/pelias/importers/delete_old_poi_and_stops.sh b/pelias/importers/delete_old_poi_and_stops.sh
new file mode 100755
index 00000000..d1e54e4a
--- /dev/null
+++ b/pelias/importers/delete_old_poi_and_stops.sh
@@ -0,0 +1,41 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+function delete_old_stops {
+  curl -X POST "localhost:9200/pelias/_delete_by_query?pretty" -H 'Content-Type: application/json' -d'
+  {
+    "query": {
+      "match": {
+        "source": "otp"
+      }
+    }
+  }
+  '
+}
+function delete_old_poi {
+  curl -X POST "localhost:9200/pelias/_delete_by_query?pretty" -H 'Content-Type: application/json' -d'
+  {
+    "query": {
+      "match": {
+        "source": "noi-datahub-poi"
+      }
+    }
+  }
+  '
+}
+function delete_old_accomodation {
+  curl -X POST "localhost:9200/pelias/_delete_by_query?pretty" -H 'Content-Type: application/json' -d'
+  {
+    "query": {
+      "match": {
+        "source": "noi-datahub-accomodation"
+      }
+    }
+  }
+  '
+}
+
+delete_old_stops
+delete_old_poi
+delete_old_accomodation
\ No newline at end of file
diff --git a/pelias/importers/download_and_prepare_poi.sh b/pelias/importers/download_and_prepare_poi.sh
new file mode 100644
index 00000000..df412dc7
--- /dev/null
+++ b/pelias/importers/download_and_prepare_poi.sh
@@ -0,0 +1,37 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+curl "https://tourism.api.opendatahub.com/v1/ODHActivityPoi?pagesize=50000" > ./data/csv-importer/touristic-poi-all.json
+curl "https://tourism.api.opendatahub.com/v1/STA/ODHActivityPoi?language=en&referer=SuedtirolMobilWeb&fields=Id%2CDetail.en.Title%2CContactInfos.en.City&pagesize=20000" > ./data/csv-importer/touristic-poi-filtered-set.json
+
+curl "https://tourism.api.opendatahub.com/v1/Accommodation?pagesize=20000" > ./data/csv-importer/accomodation-poi-all.json 
+curl "https://tourism.api.opendatahub.com/v1/STA/Accommodation?language=en&referer=SuedtirolMobilWeb&fields=Id%2CAccoDetail.en.Name%2CAccoDetail.en.City&pagesize=10000" > ./data/csv-importer/accomodation-poi-filtered-set.json
+
+node ./importers/process-touristic-poi.js
+
+TOURISTIC_CSV=./data/csv-importer/touristic-poi.csv
+TOURISTIC_JSON_FILE=./data/csv-importer/touristic-poi.json
+ACCOMODATION_CSV=./data/csv-importer/accomodation-poi.csv
+ACCOMODATION_JSON_FILE=./data/csv-importer/accomodation-poi.json
+
+# transform JSON data to CSV with jq
+echo "source,layer,id,lat,lon,name,name_de,name_en,name_fr,name_it,category_json,addendum_json_poi" > $TOURISTIC_CSV
+cat $TOURISTIC_JSON_FILE | jq --raw-output ".[] | [
+    \"noi-datahub-poi\",\"venue\",\
+    .Id,\
+    .GpsPoints.position.Latitude,.GpsPoints.position.Longitude,\
+    .Detail.it.Title,.Detail.de.Title,.Detail.en.Title,.Detail.fr.Title,.Detail.it.Title,\
+    ([.Tags[] | \"touristic:\"+ (.Id | gsub(\" \"; \"_\"))] | tostring), \
+    (.|tostring) \
+    ] | @csv" >> $TOURISTIC_CSV;
+
+echo "source,layer,id,lat,lon,name,name_de,name_en,name_fr,name_it,category_json,addendum_json_accomodation" > $ACCOMODATION_CSV
+cat $ACCOMODATION_JSON_FILE | jq --raw-output ".[] | [
+    \"noi-datahub-accomodation\",\"venue\",\
+    .Id,\
+    .Latitude,.Longitude,\
+    .AccoDetail.it.Name,.AccoDetail.de.Name,.AccoDetail.en.Name,.AccoDetail.fr.Name,.AccoDetail.it.Name,\
+    ([(.AccoType,.AccoCategory) | \"accomodation:\"+ (.Id | gsub(\" \"; \"_\"))] | tostring), \
+    (.|tostring) \
+    ] | @csv" >> $ACCOMODATION_CSV;
diff --git a/pelias/importers/download_and_prepare_stops.sh b/pelias/importers/download_and_prepare_stops.sh
new file mode 100644
index 00000000..44564740
--- /dev/null
+++ b/pelias/importers/download_and_prepare_stops.sh
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+#
+# SPDX-License-Identifier: MIT
+
+STOP_JSON_FILE=./data/csv-importer/stops.json
+STOP_CSV=./data/csv-importer/stops.csv
+
+
+# fetch JSON data from OpenTripPlanner 
+node ./importers/fetch-poi.js
+
+# transform JSON data to CSV with jq
+echo "source,layer,id,name,lat,lon,popularity,categories,addendum_json_stop" > $STOP_CSV
+cat $STOP_JSON_FILE | jq --raw-output '.[] | ["otp","stops",.gtfsId,.name,.lat,.lon,.popularity,(.categories|tostring),(.|tostring)] | @csv' >> $STOP_CSV
diff --git a/pelias/importers/fetch-poi.js b/pelias/importers/fetch-poi.js
new file mode 100644
index 00000000..17eccbcf
--- /dev/null
+++ b/pelias/importers/fetch-poi.js
@@ -0,0 +1,158 @@
+// SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+//
+// SPDX-License-Identifier: MIT
+
+let fs = require('fs');
+
+// Retrieve all stops and additional information
+let GraphqlOtp = require('./graphql_otp.js');
+    
+// Config
+const DATA_DIR = __dirname + "/../data/csv-importer";
+const EXPORT_STOPS = DATA_DIR + "/stops.json";
+const EXPORT_PARKINGS = DATA_DIR + "/parkings.json";
+const EXPORT_RENTAL_VEHICLES = DATA_DIR + "/rental_vehicles.json";
+const EXPORT_RENTAL_STATIONS = DATA_DIR + "/rental_stations.json";
+
+// Create folder if not exists
+if (!fs.existsSync(DATA_DIR)){
+    fs.mkdirSync(DATA_DIR);
+}
+
+// Query stops from OTP graphql endpoint
+GraphqlOtp.query('https://otp.opendatahub.testingmachine.eu/otp/gtfs/v1', GraphqlOtp.queries.getAllPoi)
+    .then((data) => {
+        let stops = data.data.stops;
+        let stations = data.data.stations;
+        let vehicleParkings = data.data.vehicleParkings;
+        let rentalVehicles = data.data.rentalVehicles;
+        let vehicleRentalStations = data.data.vehicleRentalStations;
+        processStops(stops, stations);
+        processVehicleParkings(vehicleParkings);
+        processRentalVehicles(rentalVehicles);
+        processVehicleRentalStations(vehicleRentalStations);
+    });
+
+
+function processStops(stops, stations) {
+    // Index stations by id
+    let stationsIndex = {};
+    stations.forEach((st) => {
+        stationsIndex[st.gtfsId] = st;
+    });
+    
+    // Filter stop without routes
+    var stops = stops.filter((st) => {
+       return st.routes.length > 0;
+    })
+    // Recompute vehicle mode based on routes
+    .map((st) => {
+        let vehicleModes = st.routes.map((r) => r.mode);
+        // Make it unique
+        vehicleModes = [...new Set(vehicleModes)];
+        return {
+            ...st,
+            vehicleMode: vehicleModes,
+        };
+    // Extract platform into stations
+    }).filter((st) => {
+        if(st.parentStation) {
+            let parentStation = stationsIndex[st.parentStation.gtfsId];
+            if(!parentStation.childs) {
+                parentStation.childs = [];
+            }
+            parentStation.childs.push(st);
+            return false;
+        }
+        return true;
+    });
+
+    // filter stations with no childs
+    stations = stations.filter((st) => {
+        return st.childs && st.childs.length > 0;
+    });
+
+    // broadcast vehicles from childs to parent station
+    stations.forEach((st) => {
+        if(st.childs) {
+            let vehicleMode = [];
+            let routes = [];
+            st.childs.forEach((child) => {
+                vehicleMode = vehicleMode.concat(child.vehicleMode);
+                routes = routes.concat(child.routes);
+            });
+            vehicleMode = [...new Set(vehicleMode)];
+            routes = [...new Set(routes)];
+            st.vehicleMode = vehicleMode;
+            st.routes = routes;
+        }
+    });
+
+    let poi = stops.concat(stations);
+
+    /* Modes
+    "[\"AIRPLANE\"]"
+    "[\"BUS\",\"FUNICULAR\"]"
+    "[\"BUS\",\"GONDOLA\",\"RAIL\"]"
+    "[\"BUS\",\"GONDOLA\"]"
+    "[\"BUS\",\"RAIL\"]"
+    "[\"BUS\"]"
+    "[\"FUNICULAR\"]"
+    "[\"GONDOLA\"]"
+    "[\"RAIL\",\"BUS\"]"
+    "[\"RAIL\"]"
+*/
+
+    // Compute popularity based on number of routes / different vehicle modes
+    // Target is between 1'000 and 3'000 for small/medium stops and 3'000-10'000 for big stations
+    poi.forEach((p) => {
+        let popularity = 0;
+        
+        if(p.vehicleMode.includes("AIRPLANE")) {
+            popularity += 1500;
+        }
+        if(p.vehicleMode.includes("RAIL")) {
+            popularity += 1000;
+        }
+        if(p.vehicleMode.includes("BUS")) {
+            popularity += 500;
+        }
+        if(p.vehicleMode.includes("TRAM")) {
+            popularity += 500;
+        }
+        if(p.vehicleMode.includes("GONDOLA")) {
+            popularity += 500;
+        }
+        if(p.vehicleMode.includes("FUNICULAR")) {
+            popularity += 500;
+        }
+
+        popularity += p.routes.length * 250;
+
+        p.popularity = popularity
+    });
+
+    // Compute categories based on vehicleMode
+    poi.forEach((p) => {
+        p.categories = ["public_transport", "public_transport:stop"];
+        p.vehicleMode.forEach((vm) => {
+            p.categories.push("public_transport:stop:" + vm.toLowerCase());
+        });
+    });
+    
+    // Save the processed points
+    fs.writeFileSync(EXPORT_STOPS, JSON.stringify(poi, null, 2));  
+
+}
+
+function processVehicleParkings(vehicleParkings) {
+    fs.writeFileSync(EXPORT_PARKINGS, JSON.stringify(vehicleParkings, null, 2));
+}
+
+function processRentalVehicles(rentalVehicles) {
+    // NONE for now
+}
+
+function processVehicleRentalStations(vehicleRentalStations) {
+    fs.writeFileSync(EXPORT_RENTAL_STATIONS, JSON.stringify(vehicleRentalStations, null, 2));
+}  
\ No newline at end of file
diff --git a/pelias/importers/graphql_otp.js b/pelias/importers/graphql_otp.js
new file mode 100644
index 00000000..c29ecc5f
--- /dev/null
+++ b/pelias/importers/graphql_otp.js
@@ -0,0 +1,113 @@
+// SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+//
+// SPDX-License-Identifier: MIT
+
+let getAllPoi = `query GetAllPoi {
+  vehicleParkings {
+    vehicleParkingId   
+    name
+    bicyclePlaces
+    carPlaces
+    lat
+    lon
+    note
+    tags 
+  }
+  rentalVehicles {
+    vehicleId
+    name
+    lat
+    lon
+    rentalNetwork {
+      networkId
+      url
+    }
+    vehicleType {
+      formFactor
+      propulsionType
+    }
+  }
+  vehicleRentalStations {
+    stationId
+    name
+    lat
+    lon
+    availableSpaces {
+      byType {
+        count
+        vehicleType {
+          formFactor
+          propulsionType
+        }
+      }
+      total
+    }
+    availableVehicles {
+      byType {
+        count
+        vehicleType {
+          formFactor
+          propulsionType
+        }
+      }
+      total
+      
+    }
+    capacity
+    rentalNetwork {
+      networkId
+      url
+    }
+  }
+  stations {
+    gtfsId
+    lat
+    lon
+    name
+  }
+  stops {
+    gtfsId
+    code
+    desc
+    lat
+    lon
+    name
+    parentStation {
+      gtfsId
+      name
+    }
+    vehicleType
+    vehicleMode
+    platformCode
+    __typename
+    url
+    routes {
+      gtfsId
+      mode
+      shortName
+      longName
+      agency {
+        name
+        url
+        gtfsId
+      }
+    }
+  }
+}`;
+
+exports.query = function(endpoint, query) {
+  return fetch(
+    endpoint,
+    {
+        method: "POST",
+        headers: {
+        "Content-Type": "application/json",
+        },
+        body: JSON.stringify({query}),
+    }
+    ).then((response) => response.json())
+}
+
+exports.queries = {
+  getAllPoi: getAllPoi
+}
\ No newline at end of file
diff --git a/pelias/importers/process-touristic-poi.js b/pelias/importers/process-touristic-poi.js
new file mode 100644
index 00000000..1c458c6d
--- /dev/null
+++ b/pelias/importers/process-touristic-poi.js
@@ -0,0 +1,61 @@
+// SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+//
+// SPDX-License-Identifier: MIT
+
+const fs = require('fs');
+
+const DATA_DIR = __dirname + "/../data/csv-importer";
+const touristicAll = require(DATA_DIR + '/touristic-poi-all.json');
+const touristicFilteredSet = require(DATA_DIR + '/touristic-poi-filtered-set.json');
+
+const accomodationAll = require(DATA_DIR + '/accomodation-poi-all.json');
+const accomodationFilteredSet = require(DATA_DIR + '/accomodation-poi-filtered-set.json');
+
+const EXPORT_POIS = DATA_DIR + "/touristic-poi.json";
+const EXPORT_ACCOMODATION = DATA_DIR + "/accomodation-poi.json";
+// Index POI by id
+const touristicAllIndex = {};
+touristicAll.Items.forEach((item) => {
+    touristicAllIndex[item.Id] = item;
+});
+
+
+var touristicPois = touristicFilteredSet.Items.map((filteredItem) => {
+    // Retrieve poi data
+    let poi = touristicAllIndex[filteredItem.Id];
+    
+    if(!poi) {
+        console.log("Missing poi", filteredItem);
+    }
+
+    return poi;
+}).filter((poi) => {
+    return poi;
+});
+
+// Write poi to file
+fs.writeFileSync(EXPORT_POIS, JSON.stringify(touristicPois, null, 2));
+delete touristicPois;
+delete touristicAllIndex;
+
+// Index accomodation by id
+const accomodationIndex = {};
+accomodationAll.Items.forEach((item) => {
+    accomodationIndex[item.Id] = item;
+});
+
+var accomodationPois = accomodationFilteredSet.Items.map((filteredItem) => {
+    // Retrieve poi data
+    let poi = accomodationIndex[filteredItem.Id];
+    
+    if(!poi) {
+        console.log("Missing poi", filteredItem);
+    }
+
+    return poi;
+}).filter((poi) => {
+    return poi;
+});
+
+// Write poi to file
+fs.writeFileSync(EXPORT_ACCOMODATION, JSON.stringify(accomodationPois, null, 2));
\ No newline at end of file
diff --git a/pelias/pelias.json b/pelias/pelias.json
new file mode 100644
index 00000000..6951eed2
--- /dev/null
+++ b/pelias/pelias.json
@@ -0,0 +1,68 @@
+{
+  "logger": {
+    "level": "debug",
+    "timestamp": false
+  },
+  "esclient": {
+    "apiVersion": "7.5",
+    "hosts": [
+      { "host": "elasticsearch" }
+    ]
+  },
+  "elasticsearch": {
+    "settings": {
+      "index": {
+        "refresh_interval": "10s",
+        "number_of_replicas": "0",
+        "number_of_shards": "1"
+      }
+    }
+  },
+  "api": {
+    "targets": {
+      "csv": ["stops","venue"],
+      "auto_discover": true
+    },
+    "services": {
+      "pip": { "url": "http://pip:4200" },
+      "libpostal": { "url": "http://libpostal:4400" },
+      "placeholder": { "url": "http://placeholder:4100" },
+      "interpolation": { "url": "http://interpolation:4300" }
+    }
+  },
+  "imports": {
+    "adminLookup": {
+      "enabled": true
+    },
+    "openstreetmap": {
+      "download": [
+        { "sourceURL": "https://download.geofabrik.de/europe/italy/nord-est-latest.osm.pbf" }
+      ],
+      "leveldbpath": "/tmp",
+      "datapath": "/data/openstreetmap",
+      "import": [{
+        "filename": "nord-est-latest.osm.pbf"
+      }]
+    },
+    "csv": {
+      "datapath": "/data/csv-importer",
+      "files": ["stops.csv", "accomodation-poi.csv", "touristic-poi.csv"],
+      "download": [
+      ]
+    },
+    "openaddresses": {
+      "datapath": "/data/openaddresses",
+      "files": ["it/32/south-tyrol-it.csv"]
+    },
+    "polyline": {
+      "datapath": "/data/polylines",
+      "files": [ "extract.0sv" ]
+    },
+    "whosonfirst": {
+      "datapath": "/data/whosonfirst",
+      "countryCode": "IT",
+      "importPostalcodes": true,
+      "importPlace": [ "85685271" ]
+    }
+  }
+}
diff --git a/pelias/pelias.json.license b/pelias/pelias.json.license
new file mode 100644
index 00000000..3fe3e221
--- /dev/null
+++ b/pelias/pelias.json.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2024 routeRANK <info@routerank.com>
+
+SPDX-License-Identifier: MIT
diff --git a/web-demo/.eslintrc.js b/web-demo/.eslintrc.js
index 24c81065..e676b7b8 100644
--- a/web-demo/.eslintrc.js
+++ b/web-demo/.eslintrc.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 module.exports = {
diff --git a/web-demo/.gitignore b/web-demo/.gitignore
index f9a46088..5c27885c 100644
--- a/web-demo/.gitignore
+++ b/web-demo/.gitignore
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+#
 # SPDX-License-Identifier: MIT
 
 node_modules
diff --git a/web-demo/README.md b/web-demo/README.md
index 4d0719fe..0ec30179 100644
--- a/web-demo/README.md
+++ b/web-demo/README.md
@@ -1,4 +1,6 @@
 <!--
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT
 -->
 
diff --git a/web-demo/craco-icons.js b/web-demo/craco-icons.js
index 8a269677..5655908f 100644
--- a/web-demo/craco-icons.js
+++ b/web-demo/craco-icons.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 import PropTypes from 'prop-types'
diff --git a/web-demo/craco.config.js b/web-demo/craco.config.js
index 7ac882d0..1aa8394d 100644
--- a/web-demo/craco.config.js
+++ b/web-demo/craco.config.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 const path = require('path')
diff --git a/web-demo/lib/app/.babelrc.json.license b/web-demo/lib/app/.babelrc.json.license
index 59d7f405..02e2fcfc 100644
--- a/web-demo/lib/app/.babelrc.json.license
+++ b/web-demo/lib/app/.babelrc.json.license
@@ -1 +1,3 @@
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT
diff --git a/web-demo/lib/app/app.js b/web-demo/lib/app/app.js
index f0fcbf5c..9e953159 100644
--- a/web-demo/lib/app/app.js
+++ b/web-demo/lib/app/app.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 // TODO: Typescript
diff --git a/web-demo/lib/app/components/example.js b/web-demo/lib/app/components/example.js
index fd6b8ed8..6cd6f942 100644
--- a/web-demo/lib/app/components/example.js
+++ b/web-demo/lib/app/components/example.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 /* eslint-disable react/prop-types */
diff --git a/web-demo/lib/app/config.js b/web-demo/lib/app/config.js
index a29e23ec..7c45a487 100644
--- a/web-demo/lib/app/config.js
+++ b/web-demo/lib/app/config.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 /**
diff --git a/web-demo/lib/app/example.css b/web-demo/lib/app/example.css
index fbe73858..bba77548 100644
--- a/web-demo/lib/app/example.css
+++ b/web-demo/lib/app/example.css
@@ -1,4 +1,6 @@
 /*
+ * SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+ *
  * SPDX-License-Identifier: MIT
  */
 
diff --git a/web-demo/lib/app/index.css b/web-demo/lib/app/index.css
index 4b02e312..2ea7f91f 100644
--- a/web-demo/lib/app/index.css
+++ b/web-demo/lib/app/index.css
@@ -1,4 +1,6 @@
 /*
+ * SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+ *
  * SPDX-License-Identifier: MIT
  */
 
diff --git a/web-demo/lib/app/index.js b/web-demo/lib/app/index.js
index 849fb062..2944b88e 100644
--- a/web-demo/lib/app/index.js
+++ b/web-demo/lib/app/index.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 /* eslint-disable prettier/prettier */
diff --git a/web-demo/lib/app/index.tpl.html b/web-demo/lib/app/index.tpl.html
index 5f6185bd..994492fb 100644
--- a/web-demo/lib/app/index.tpl.html
+++ b/web-demo/lib/app/index.tpl.html
@@ -1,4 +1,6 @@
 <!--
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT
 -->
 
diff --git a/web-demo/lib/app/main.js b/web-demo/lib/app/main.js
index 3bd11081..b28650a1 100644
--- a/web-demo/lib/app/main.js
+++ b/web-demo/lib/app/main.js
@@ -1,3 +1,5 @@
+// SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+//
 // SPDX-License-Identifier: MIT
 
 // import this polyfill in order to make webapp compatible with IE 11
diff --git a/web-demo/lib/config.yml b/web-demo/lib/config.yml
index 7e9ab2f5..830d3871 100644
--- a/web-demo/lib/config.yml
+++ b/web-demo/lib/config.yml
@@ -1,3 +1,5 @@
+# SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+#
 # SPDX-License-Identifier: MIT
 
 branding: Merano - Alto Adige/Suedtirol
diff --git a/web-demo/package.json.license b/web-demo/package.json.license
index 59d7f405..02e2fcfc 100644
--- a/web-demo/package.json.license
+++ b/web-demo/package.json.license
@@ -1 +1,3 @@
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT
diff --git a/web-demo/tsconfig.json.license b/web-demo/tsconfig.json.license
index 59d7f405..02e2fcfc 100644
--- a/web-demo/tsconfig.json.license
+++ b/web-demo/tsconfig.json.license
@@ -1 +1,3 @@
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT
diff --git a/web-demo/yarn.lock.license b/web-demo/yarn.lock.license
index 59d7f405..02e2fcfc 100644
--- a/web-demo/yarn.lock.license
+++ b/web-demo/yarn.lock.license
@@ -1 +1,3 @@
+SPDX-FileCopyrightText: 2024 Conveyal <support@conveyal.com>
+
 SPDX-License-Identifier: MIT