You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by gi...@apache.org on 2023/03/02 13:42:04 UTC

[incubator-baremaps-site] branch asf-site updated: deploy: 662af6ef409e89d5b0e02d8370bab7398da5136c

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 7279837  deploy: 662af6ef409e89d5b0e02d8370bab7398da5136c
7279837 is described below

commit 72798370a0d27c66a1769b0a5422632b5b7059fd
Author: bchapuis <bc...@users.noreply.github.com>
AuthorDate: Thu Mar 2 13:41:57 2023 +0000

    deploy: 662af6ef409e89d5b0e02d8370bab7398da5136c
---
 .asf.yaml                                          |    6 +-
 .gitignore                                         |    7 -
 examples/contour/indexes.sql => .nojekyll          |    0
 404.html                                           |    1 +
 CNAME                                              |    1 -
 Gemfile                                            |    6 -
 Gemfile.lock                                       |  265 ----
 _config.yml                                        |    7 -
 _data/menu.yaml                                    |   18 -
 _layouts/default.html                              |   51 -
 _layouts/home.html                                 |   19 -
 .../static/9iBr8E8pctaPc_Mbk1B6E/_buildManifest.js |    1 +
 _next/static/9iBr8E8pctaPc_Mbk1B6E/_ssgManifest.js |    1 +
 _next/static/chunks/249-fd3f6735e60085b1.js        |    1 +
 _next/static/chunks/815-37c0c667e816ec2a.js        |    1 +
 _next/static/chunks/863-81c354dba606f038.js        |    1 +
 _next/static/chunks/d94c0b71-888deb0cc9e33c11.js   |   54 +
 _next/static/chunks/framework-2c79e2a64abdb08b.js  |   33 +
 _next/static/chunks/main-862156089985efcc.js       |    1 +
 _next/static/chunks/nextra-data-en-US.json         |    1 +
 _next/static/chunks/pages/_app-0b51bf33ea748059.js |   23 +
 .../static/chunks/pages/_error-e4f561a102d9bb14.js |    1 +
 .../chunks/pages/documentation-a93376fa8c085104.js |    1 +
 .../developer-manual-272fbf284b802e4d.js           |    1 +
 .../developer-manual/basemap-11157ffb4515e9cc.js   |    1 +
 .../developer-manual/geocoder-e34d680f2c1777d2.js  |    1 +
 .../how-to-build-with-maven-88ae5b3c2c83887c.js    |    1 +
 .../ip-to-location-33046f09e40d8379.js             |    1 +
 .../project-structure-ef2d7d7ae18b81e1.js          |    1 +
 .../setup-in-intellij-9617f43c0662679e.js          |    1 +
 .../documentation/examples-8624c50ffb5cbc26.js     |    1 +
 .../examples/extrusion-f64b34b9cfc7d88a.js         |    1 +
 .../examples/geoadmin-74fb49e0138b6e62.js          |    1 +
 .../examples/geocoding-d092e1856895e9fd.js         |    1 +
 ...import-contour-into-postgis-4b57ff83b98fb25e.js |    1 +
 ...t-naturalearth-into-postgis-f5fb26a34cf16ddb.js |    1 +
 .../import-osm-into-postgis-f37ecf2df186ec6d.js    |    1 +
 .../examples/ip-to-location-4e4b8527167821ce.js    |    1 +
 .../serve-vector-tiles-7f0b41932e82ee7b.js         |    1 +
 .../getting-started-6ca2a3f65e5e4f16.js            |    1 +
 .../installing-postgis-362088d2144ba210.js         |    1 +
 .../installing-the-cli-021e38f014bb7a0d.js         |    1 +
 .../static/chunks/pages/index-ea81da34430ec69e.js  |    1 +
 _next/static/chunks/polyfills-c67a75d1b6f99dc8.js  |    1 +
 _next/static/chunks/webpack-38cee4c0e358b1a3.js    |    1 +
 _next/static/css/0aa53f20ab4b3fde.css              |    1 +
 _next/static/css/a025813405bc35e2.css              |    1 +
 _next/static/css/eb590262495d9b19.css              |    1 +
 .../static/media/database.ee4f3f49.png             |  Bin
 .../static/media/extrusion.9934b529.png            |  Bin
 _sass/normalize.scss                               |  427 ------
 _sass/skeleton.scss                                |  418 ------
 _sass/style.scss                                   |   34 -
 about.md                                           |   22 -
 assets/demo.html                                   |   72 -
 assets/screenshot.jpg                              |  Bin 334131 -> 0 bytes
 {assets/css => css}/main.scss                      |    0
 output/assets/demo.html => demo.html               |    0
 documentation.html                                 |   21 +
 documentation/developer-manual.html                |   22 +
 documentation/developer-manual/basemap.html        |   21 +
 documentation/developer-manual/geocoder.html       |   13 +
 .../developer-manual/how-to-build-with-maven.html  |   47 +
 documentation/developer-manual/ip-to-location.html |   88 ++
 .../developer-manual/project-structure.html        |   17 +
 .../developer-manual/setup-in-intellij.html        |   15 +
 documentation/examples.html                        |   35 +
 documentation/examples/extrusion.html              |   62 +
 documentation/examples/geoadmin.html               |   39 +
 documentation/examples/geocoding.html              |   25 +
 .../examples/import-contour-into-postgis.html      |   72 +
 .../examples/import-naturalearth-into-postgis.html |   38 +
 .../examples/import-osm-into-postgis.html          |   63 +
 documentation/examples/ip-to-location.html         |   40 +
 documentation/examples/serve-vector-tiles.html     |   79 +
 documentation/getting-started.html                 |   17 +
 .../getting-started/installing-postgis.html        |   27 +
 .../getting-started/installing-the-cli.html        |   29 +
 examples/contour/index.md                          |   56 -
 .../contour/liecthenstein-aster-dem-v2-3857.tif    |  Bin 1966773 -> 0 bytes
 examples/contour/liecthenstein-aster-dem-v2.tif    |  Bin 1739201 -> 0 bytes
 examples/contour/style.json                        |   31 -
 examples/contour/tileset.json                      |   29 -
 examples/extrusion/index.md                        |   74 -
 examples/extrusion/indexes.sql                     |    5 -
 examples/extrusion/style.json                      |   31 -
 examples/extrusion/tileset.json                    |   31 -
 examples/extrusion/workflow.json                   |   42 -
 examples/geoadmin/index.md                         |   50 -
 examples/geoadmin/style.json                       |   31 -
 examples/geoadmin/tileset.json                     |   29 -
 examples/geoadmin/tileset.yaml                     |   19 -
 examples/index.md                                  |   15 -
 examples/naturalearth/index.md                     |   46 -
 examples/naturalearth/indexes.sql                  |  135 --
 examples/naturalearth/style.json                   |   33 -
 examples/naturalearth/tileset.json                 | 1360 ------------------
 examples/naturalearth/workflow.json                |   32 -
 examples/openstreetmap/index.md                    |  143 --
 examples/openstreetmap/indexes.sql                 |    5 -
 .../openstreetmap/liechtenstein-latest.osm.pbf     |  Bin 2710779 -> 0 bytes
 examples/openstreetmap/screenshot.png              |  Bin 262397 -> 0 bytes
 examples/openstreetmap/style.js                    |   26 -
 examples/openstreetmap/style.json                  |   26 -
 examples/openstreetmap/tileset.json                |  521 -------
 examples/openstreetmap/workflow.json               |   42 -
 examples/serving-vector-tiles.md                   |  151 --
 .../database.png                                   |  Bin
 .../screenshot.png => images/extrusion.png         |  Bin
 {output/assets => images}/screenshot.jpg           |  Bin
 index.html                                         |   47 +-
 installation.md                                    |   53 -
 notes/java-nio.md                                  |    3 -
 notes/postgis.md                                   |    3 -
 output/CNAME                                       |    1 -
 output/README.md                                   |   23 -
 output/about/index.html                            |  123 --
 output/assets/css/main.css                         |  886 ------------
 output/assets/style.json                           | 1517 --------------------
 output/developer-manual/geocoder/index.html        |  110 --
 .../how-to-build-with-maven/index.html             |  156 --
 output/developer-manual/index.html                 |  121 --
 output/developer-manual/ip-to-location/index.html  |  211 ---
 .../developer-manual/project-structure/index.html  |  118 --
 .../developer-manual/setup-in-intellij/index.html  |  114 --
 output/developer-manual/stylesheet/index.html      |  119 --
 output/examples/extrusion/index.html               |  175 ---
 output/examples/geocoding/index.html               |  135 --
 .../import-contour-into-postgis/index.html         |  196 ---
 .../import-naturalearth-into-postgis/index.html    |  148 --
 output/examples/import-osm-into-postgis/index.html |  179 ---
 output/examples/index.html                         |  143 --
 output/examples/ip-to-location/index.html          |  154 --
 output/examples/serve-vector-tiles/index.html      |  199 ---
 output/examples/serving-vector-tiles.html          |  143 --
 output/examples/serving-vector-tiles.md            |  151 --
 output/favicon.ico                                 |  Bin 15086 -> 0 bytes
 output/getting-started/index.html                  |  116 --
 .../getting-started/installing-postgis/index.html  |  132 --
 .../getting-started/installing-the-cli/index.html  |  134 --
 output/index.html                                  |   51 -
 output/notes/java-nio.html                         |    5 -
 output/notes/java-nio.md                           |    3 -
 output/notes/postgis.html                          |    5 -
 output/notes/postgis.md                            |    3 -
 output/release.html                                |    4 -
 output/release.md                                  |    5 -
 output/robots.txt                                  |    1 -
 output/sitemap.xml                                 |   79 -
 release.md                                         |    5 -
 assets/style.json => style.json                    |    0
 stylesheet.md                                      |   12 -
 152 files changed, 935 insertions(+), 10079 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 6e666d2..048f726 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -15,7 +15,7 @@
 #
 
 github:
-  description: Create custom vector tiles from OpenStreetMap and other data sources with Postgis and Java.
+  description: Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.
   homepage: https://baremaps.apache.org
   labels:
     - java 
@@ -32,9 +32,7 @@ notifications:
   issues:       commits@baremaps.apache.org
   pullrequests: commits@baremaps.apache.org
 
-jekyll:
-  whoami: main
-  target: asf-site
+jekyll: ~
 
 staging:
   whoami: asf-site
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9c8ca10..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-_site/
-.sass-cache/
-.jekyll-cache/
-.jekyll-metadata
-# Ignore folders generated by Bundler
-.bundle/
-vendor/
\ No newline at end of file
diff --git a/examples/contour/indexes.sql b/.nojekyll
similarity index 100%
rename from examples/contour/indexes.sql
rename to .nojekyll
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..8f93fb9
--- /dev/null
+++ b/404.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/a025813405bc35e2.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a025813405bc35e2.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script sr [...]
\ No newline at end of file
diff --git a/CNAME b/CNAME
deleted file mode 100644
index d0af0f3..0000000
--- a/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-baremaps.apache.org
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 0410b66..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,6 +0,0 @@
-source "https://rubygems.org"
-gem "jekyll", "~> 3.9.2"
-gem "github-pages", "~> 227"
-gem "jekyll-sitemap", "~> 1.4.0"
-gem "jekyll-gist", "~> 1.5.0"
-gem "jekyll-github-metadata", "~> 2.13.0"
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 954cf68..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,265 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    activesupport (6.0.6)
-      concurrent-ruby (~> 1.0, >= 1.0.2)
-      i18n (>= 0.7, < 2)
-      minitest (~> 5.1)
-      tzinfo (~> 1.1)
-      zeitwerk (~> 2.2, >= 2.2.2)
-    addressable (2.8.1)
-      public_suffix (>= 2.0.2, < 6.0)
-    coffee-script (2.4.1)
-      coffee-script-source
-      execjs
-    coffee-script-source (1.11.1)
-    colorator (1.1.0)
-    commonmarker (0.23.6)
-    concurrent-ruby (1.1.10)
-    dnsruby (1.61.9)
-      simpleidn (~> 0.1)
-    em-websocket (0.5.3)
-      eventmachine (>= 0.12.9)
-      http_parser.rb (~> 0)
-    ethon (0.16.0)
-      ffi (>= 1.15.0)
-    eventmachine (1.2.7)
-    execjs (2.8.1)
-    faraday (2.7.0)
-      faraday-net_http (>= 2.0, < 3.1)
-      ruby2_keywords (>= 0.0.4)
-    faraday-net_http (3.0.2)
-    ffi (1.15.5)
-    forwardable-extended (2.6.0)
-    gemoji (3.0.1)
-    github-pages (227)
-      github-pages-health-check (= 1.17.9)
-      jekyll (= 3.9.2)
-      jekyll-avatar (= 0.7.0)
-      jekyll-coffeescript (= 1.1.1)
-      jekyll-commonmark-ghpages (= 0.2.0)
-      jekyll-default-layout (= 0.1.4)
-      jekyll-feed (= 0.15.1)
-      jekyll-gist (= 1.5.0)
-      jekyll-github-metadata (= 2.13.0)
-      jekyll-include-cache (= 0.2.1)
-      jekyll-mentions (= 1.6.0)
-      jekyll-optional-front-matter (= 0.3.2)
-      jekyll-paginate (= 1.1.0)
-      jekyll-readme-index (= 0.3.0)
-      jekyll-redirect-from (= 0.16.0)
-      jekyll-relative-links (= 0.6.1)
-      jekyll-remote-theme (= 0.4.3)
-      jekyll-sass-converter (= 1.5.2)
-      jekyll-seo-tag (= 2.8.0)
-      jekyll-sitemap (= 1.4.0)
-      jekyll-swiss (= 1.0.0)
-      jekyll-theme-architect (= 0.2.0)
-      jekyll-theme-cayman (= 0.2.0)
-      jekyll-theme-dinky (= 0.2.0)
-      jekyll-theme-hacker (= 0.2.0)
-      jekyll-theme-leap-day (= 0.2.0)
-      jekyll-theme-merlot (= 0.2.0)
-      jekyll-theme-midnight (= 0.2.0)
-      jekyll-theme-minimal (= 0.2.0)
-      jekyll-theme-modernist (= 0.2.0)
-      jekyll-theme-primer (= 0.6.0)
-      jekyll-theme-slate (= 0.2.0)
-      jekyll-theme-tactile (= 0.2.0)
-      jekyll-theme-time-machine (= 0.2.0)
-      jekyll-titles-from-headings (= 0.5.3)
-      jemoji (= 0.12.0)
-      kramdown (= 2.3.2)
-      kramdown-parser-gfm (= 1.1.0)
-      liquid (= 4.0.3)
-      mercenary (~> 0.3)
-      minima (= 2.5.1)
-      nokogiri (>= 1.13.6, < 2.0)
-      rouge (= 3.26.0)
-      terminal-table (~> 1.4)
-    github-pages-health-check (1.17.9)
-      addressable (~> 2.3)
-      dnsruby (~> 1.60)
-      octokit (~> 4.0)
-      public_suffix (>= 3.0, < 5.0)
-      typhoeus (~> 1.3)
-    html-pipeline (2.14.3)
-      activesupport (>= 2)
-      nokogiri (>= 1.4)
-    http_parser.rb (0.8.0)
-    i18n (0.9.5)
-      concurrent-ruby (~> 1.0)
-    jekyll (3.9.2)
-      addressable (~> 2.4)
-      colorator (~> 1.0)
-      em-websocket (~> 0.5)
-      i18n (~> 0.7)
-      jekyll-sass-converter (~> 1.0)
-      jekyll-watch (~> 2.0)
-      kramdown (>= 1.17, < 3)
-      liquid (~> 4.0)
-      mercenary (~> 0.3.3)
-      pathutil (~> 0.9)
-      rouge (>= 1.7, < 4)
-      safe_yaml (~> 1.0)
-    jekyll-avatar (0.7.0)
-      jekyll (>= 3.0, < 5.0)
-    jekyll-coffeescript (1.1.1)
-      coffee-script (~> 2.2)
-      coffee-script-source (~> 1.11.1)
-    jekyll-commonmark (1.4.0)
-      commonmarker (~> 0.22)
-    jekyll-commonmark-ghpages (0.2.0)
-      commonmarker (~> 0.23.4)
-      jekyll (~> 3.9.0)
-      jekyll-commonmark (~> 1.4.0)
-      rouge (>= 2.0, < 4.0)
-    jekyll-default-layout (0.1.4)
-      jekyll (~> 3.0)
-    jekyll-feed (0.15.1)
-      jekyll (>= 3.7, < 5.0)
-    jekyll-gist (1.5.0)
-      octokit (~> 4.2)
-    jekyll-github-metadata (2.13.0)
-      jekyll (>= 3.4, < 5.0)
-      octokit (~> 4.0, != 4.4.0)
-    jekyll-include-cache (0.2.1)
-      jekyll (>= 3.7, < 5.0)
-    jekyll-mentions (1.6.0)
-      html-pipeline (~> 2.3)
-      jekyll (>= 3.7, < 5.0)
-    jekyll-optional-front-matter (0.3.2)
-      jekyll (>= 3.0, < 5.0)
-    jekyll-paginate (1.1.0)
-    jekyll-readme-index (0.3.0)
-      jekyll (>= 3.0, < 5.0)
-    jekyll-redirect-from (0.16.0)
-      jekyll (>= 3.3, < 5.0)
-    jekyll-relative-links (0.6.1)
-      jekyll (>= 3.3, < 5.0)
-    jekyll-remote-theme (0.4.3)
-      addressable (~> 2.0)
-      jekyll (>= 3.5, < 5.0)
-      jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
-      rubyzip (>= 1.3.0, < 3.0)
-    jekyll-sass-converter (1.5.2)
-      sass (~> 3.4)
-    jekyll-seo-tag (2.8.0)
-      jekyll (>= 3.8, < 5.0)
-    jekyll-sitemap (1.4.0)
-      jekyll (>= 3.7, < 5.0)
-    jekyll-swiss (1.0.0)
-    jekyll-theme-architect (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-cayman (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-dinky (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-hacker (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-leap-day (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-merlot (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-midnight (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-minimal (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-modernist (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-primer (0.6.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-github-metadata (~> 2.9)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-slate (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-tactile (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-theme-time-machine (0.2.0)
-      jekyll (> 3.5, < 5.0)
-      jekyll-seo-tag (~> 2.0)
-    jekyll-titles-from-headings (0.5.3)
-      jekyll (>= 3.3, < 5.0)
-    jekyll-watch (2.2.1)
-      listen (~> 3.0)
-    jemoji (0.12.0)
-      gemoji (~> 3.0)
-      html-pipeline (~> 2.2)
-      jekyll (>= 3.0, < 5.0)
-    kramdown (2.3.2)
-      rexml
-    kramdown-parser-gfm (1.1.0)
-      kramdown (~> 2.0)
-    liquid (4.0.3)
-    listen (3.7.1)
-      rb-fsevent (~> 0.10, >= 0.10.3)
-      rb-inotify (~> 0.9, >= 0.9.10)
-    mercenary (0.3.6)
-    minima (2.5.1)
-      jekyll (>= 3.5, < 5.0)
-      jekyll-feed (~> 0.9)
-      jekyll-seo-tag (~> 2.1)
-    minitest (5.16.3)
-    nokogiri (1.13.9-x86_64-darwin)
-      racc (~> 1.4)
-    octokit (4.25.1)
-      faraday (>= 1, < 3)
-      sawyer (~> 0.9)
-    pathutil (0.16.2)
-      forwardable-extended (~> 2.6)
-    public_suffix (3.1.1)
-    racc (1.6.0)
-    rb-fsevent (0.11.2)
-    rb-inotify (0.10.1)
-      ffi (~> 1.0)
-    rexml (3.2.5)
-    rouge (3.26.0)
-    ruby2_keywords (0.0.5)
-    rubyzip (2.3.2)
-    safe_yaml (1.0.5)
-    sass (3.7.4)
-      sass-listen (~> 4.0.0)
-    sass-listen (4.0.0)
-      rb-fsevent (~> 0.9, >= 0.9.4)
-      rb-inotify (~> 0.9, >= 0.9.7)
-    sawyer (0.9.2)
-      addressable (>= 2.3.5)
-      faraday (>= 0.17.3, < 3)
-    simpleidn (0.2.1)
-      unf (~> 0.1.4)
-    terminal-table (1.8.0)
-      unicode-display_width (~> 1.1, >= 1.1.1)
-    thread_safe (0.3.6)
-    typhoeus (1.4.0)
-      ethon (>= 0.9.0)
-    tzinfo (1.2.10)
-      thread_safe (~> 0.1)
-    unf (0.1.4)
-      unf_ext
-    unf_ext (0.0.8.2)
-    unicode-display_width (1.8.0)
-    zeitwerk (2.6.6)
-
-PLATFORMS
-  x86_64-darwin-21
-
-DEPENDENCIES
-  github-pages (~> 227)
-  jekyll (~> 3.9.2)
-  jekyll-gist (~> 1.5.0)
-  jekyll-github-metadata (~> 2.13.0)
-  jekyll-sitemap (~> 1.4.0)
-
-BUNDLED WITH
-   2.3.11
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index 3084e75..0000000
--- a/_config.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-title: Baremaps
-repository: baremaps/baremaps
-plugins:
-  - jekyll-sitemap
-  - jekyll-gist
-  - jekyll-github-metadata
-  - jekyll-optional-front-matter
\ No newline at end of file
diff --git a/_data/menu.yaml b/_data/menu.yaml
deleted file mode 100644
index 79b485e..0000000
--- a/_data/menu.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-items:
-  - page: <i class="fas fa-bullseye"></i> About
-    url: /about/
-  - page: <i class="fas fa-download"></i> Installation
-    url: /installation/
-  - page: <i class="fas fa-vial"></i> Examples
-    url: /examples/
-    subitems:
-      - page: OpenStreetMap
-        url: /examples/openstreetmap/
-      - page: NaturalEarth
-        url: /examples/naturalearth/
-      - page: Contour
-        url: /examples/contour/
-  - page: <i class="fas fa-paint-roller"></i> Stylesheet
-    url: /stylesheet/
-  - page: <i class="fas fa-map"></i> Demo
-    url: /assets/demo.html
\ No newline at end of file
diff --git a/_layouts/default.html b/_layouts/default.html
deleted file mode 100644
index b17bdc9..0000000
--- a/_layouts/default.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ site.lang | default: "en-US" }}">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>{{ page.title }} - {{ site.title }}</title>
-    {% if page.description %}<meta name="description" content="{{ site.description }}">{% endif %}
-    <link rel="stylesheet" href="{{ "/assets/css/main.css" | relative_url }}">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> {{ site.title }}</a></h2>
-              <p>{{ site.description }}</p>
-              <p>
-                <a class="github-button" href="https://github.com/baremaps/baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star baremaps/baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/baremaps/baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download baremaps/baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                {% for item in site.data.menu.items %}
-                <li>
-                  <a href="{{ item.url }}">{{ item.page }}</a>
-                  {% if item.subitems[0] %}
-                  <ul>
-                    {% for subitem in item.subitems %}
-                    <li><a href="{{ subitem.url }}">{{ subitem.page }}</a></li>
-                    {% endfor %}
-                  </ul>
-                  {% endif %}
-                </li>
-                {% endfor %}
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            {{ content }}
-            <p><a class="edit" href="{{site.github.repository_url}}/edit/main/docs/{{page.path}}"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/_layouts/home.html b/_layouts/home.html
deleted file mode 100644
index a320cac..0000000
--- a/_layouts/home.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ site.lang | default: "en-US" }}">
-  <head>
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta charset="utf-8">
-    <title>{{ page.title }} - {{ site.title }}</title>
-    <meta name="description" content="{{ site.description }}">
-    <link rel="stylesheet" href="{{ "/assets/css/main.css" | relative_url }}">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-        {{ content }}
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/_next/static/9iBr8E8pctaPc_Mbk1B6E/_buildManifest.js b/_next/static/9iBr8E8pctaPc_Mbk1B6E/_buildManifest.js
new file mode 100644
index 0000000..17d4949
--- /dev/null
+++ b/_next/static/9iBr8E8pctaPc_Mbk1B6E/_buildManifest.js
@@ -0,0 +1 @@
+self.__BUILD_MANIFEST=function(e,t,a){return{__rewrites:{beforeFiles:[],afterFiles:[{source:"/:path*/_meta",destination:"/404"}],fallback:[]},"/":[t,e,"static/chunks/249-fd3f6735e60085b1.js",a,"static/css/eb590262495d9b19.css","static/chunks/pages/index-ea81da34430ec69e.js"],"/_error":["static/chunks/pages/_error-e4f561a102d9bb14.js"],"/documentation":[e,"static/chunks/pages/documentation-a93376fa8c085104.js"],"/documentation/developer-manual":[e,"static/chunks/pages/documentation/develo [...]
\ No newline at end of file
diff --git a/_next/static/9iBr8E8pctaPc_Mbk1B6E/_ssgManifest.js b/_next/static/9iBr8E8pctaPc_Mbk1B6E/_ssgManifest.js
new file mode 100644
index 0000000..0511aa8
--- /dev/null
+++ b/_next/static/9iBr8E8pctaPc_Mbk1B6E/_ssgManifest.js
@@ -0,0 +1 @@
+self.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB();
\ No newline at end of file
diff --git a/_next/static/chunks/249-fd3f6735e60085b1.js b/_next/static/chunks/249-fd3f6735e60085b1.js
new file mode 100644
index 0000000..b8fe01e
--- /dev/null
+++ b/_next/static/chunks/249-fd3f6735e60085b1.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[249],{2350:function(){},1045:function(e,i,n){var r=n(3454);n(2350);var s=n(7294),o=s&&"object"==typeof s&&"default"in s?s:{default:s};function a(e,i){for(var n=0;n<i.length;n++){var r=i[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var l=void 0!==r&&r.env&&!0,u=function(e){return"[object String]"===Object.prototype.toString.call(e)},h=function(){function e(e){var i [...]
\ No newline at end of file
diff --git a/_next/static/chunks/815-37c0c667e816ec2a.js b/_next/static/chunks/815-37c0c667e816ec2a.js
new file mode 100644
index 0000000..38ef4a0
--- /dev/null
+++ b/_next/static/chunks/815-37c0c667e816ec2a.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[815],{9881:function(t){function e(t){var e=Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}e.keys=function(){return[]},e.resolve=e,e.id=9881,t.exports=e},9815:function(t,e,n){"use strict";n.d(e,{Z:function(){return f}});var o=n(5893),r=n(7294),i=n(4613),s=n.n(i),a=n(1985),c=n.n(a);function u(t){var e,n,o,r;t=Object.assign({show:!0,onToggle:function(){}},t),this._btn=((e=document.createElement("button")).classN [...]
\ No newline at end of file
diff --git a/_next/static/chunks/863-81c354dba606f038.js b/_next/static/chunks/863-81c354dba606f038.js
new file mode 100644
index 0000000..1d86b33
--- /dev/null
+++ b/_next/static/chunks/863-81c354dba606f038.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[863],{9208:function(e,t,r){var n,o="__lodash_hash_undefined__",i=1/0,a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,l=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,f=/^\[object .+?Constructor\]$/,h="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,p="object"==typeof self&&self&&self.Object===Object&&self,d=h||p||Function("return this")(),g=A [...]
\ No newline at end of file
diff --git a/_next/static/chunks/d94c0b71-888deb0cc9e33c11.js b/_next/static/chunks/d94c0b71-888deb0cc9e33c11.js
new file mode 100644
index 0000000..be5e683
--- /dev/null
+++ b/_next/static/chunks/d94c0b71-888deb0cc9e33c11.js
@@ -0,0 +1,54 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[644],{4613:function(i){i.exports=function(){"use strict";var i,r,a;function n(n,s){if(i){if(r){var o="var sharedChunk = {}; ("+i+")(sharedChunk); ("+r+")(sharedChunk);",l={};i(l),a=s(l),"undefined"!=typeof window&&(a.workerUrl=window.URL.createObjectURL(new Blob([o],{type:"text/javascript"})))}else r=s}else i=s}return n(["exports"],function(i){let r,a;function n(i,r,a,n){this.cx=3*i,this.bx=3*(a-i)-this.cx,this.ax=1-this.cx-this.bx [...]
+Use an identity property function instead: \`{ "type": "identity", "property": ${JSON.stringify(a[1])} }\`.`)];let d=[];return"symbol"===i.layerType&&("text-field"===h&&s&&!s.glyphs&&d.push(new er(n,l,'use of "text-field" requires a style "glyphs" property')),"text-font"===h&&t5(eo(l))&&"identity"===es(l.type)&&d.push(new er(n,l,'"text-font" does not support identity functions'))),d.concat(iL({key:i.key,value:l,valueSpec:p,style:s,styleSpec:o,expressionContext:"property",propertyType:r,p [...]
+#ifndef HAS_UNIFORM_u_${s}
+varying ${a} ${n} ${s};
+#else
+uniform ${a} ${n} u_${s};
+#endif
+`:`
+#ifdef HAS_UNIFORM_u_${s}
+    ${a} ${n} ${s} = u_${s};
+#endif
+`)),vertexSource:r=r.replace(a,(i,r,a,n,s)=>{let o="float"===n?"vec2":"vec4",l=s.match(/color/)?"color":o;return h[s]?"define"===r?`
+#ifndef HAS_UNIFORM_u_${s}
+uniform lowp float u_${s}_t;
+attribute ${a} ${o} a_${s};
+varying ${a} ${n} ${s};
+#else
+uniform ${a} ${n} u_${s};
+#endif
+`:"vec4"===l?`
+#ifndef HAS_UNIFORM_u_${s}
+    ${s} = a_${s};
+#else
+    ${a} ${n} ${s} = u_${s};
+#endif
+`:`
+#ifndef HAS_UNIFORM_u_${s}
+    ${s} = unpack_mix_${l}(a_${s}, u_${s}_t);
+#else
+    ${a} ${n} ${s} = u_${s};
+#endif
+`:"define"===r?`
+#ifndef HAS_UNIFORM_u_${s}
+uniform lowp float u_${s}_t;
+attribute ${a} ${o} a_${s};
+#else
+uniform ${a} ${n} u_${s};
+#endif
+`:"vec4"===l?`
+#ifndef HAS_UNIFORM_u_${s}
+    ${a} ${n} ${s} = a_${s};
+#else
+    ${a} ${n} ${s} = u_${s};
+#endif
+`:`
+#ifndef HAS_UNIFORM_u_${s}
+    ${a} ${n} ${s} = unpack_mix_${l}(a_${s}, u_${s}_t);
+#else
+    ${a} ${n} ${s} = u_${s};
+#endif
+`}),staticAttributes:n,staticUniforms:l}}class eq{constructor(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null}bind(i,r,a,n,s,o,l,h,u){this.context=i;let c=this.boundPaintVertexBuffers.length!==n.length;for(let i=0;!c&&i<n.length;i++)this.boundPaintVertexBuffers[i]!==n[i]&&(c=!0);i.extVertexArrayObject&&this.vao&&this.boundProgram===r&&this.bou [...]
+            <div class="maplibregl-desktop-message">${a}</div>
+            <div class="maplibregl-mobile-message">${"boolean"!=typeof this._cooperativeGestures&&this._cooperativeGestures.mobileHelpText?this._cooperativeGestures.mobileHelpText:"Use two fingers to move the map"}</div>
+        `,document.addEventListener("keydown",i=>{i.key===r&&(this._metaPress=!0)}),document.addEventListener("keyup",i=>{i.key===r&&(this._metaPress=!1)}),this._canvasContainer.addEventListener("wheel",i=>{this._onCooperativeGesture(i,this._metaPress,1)},!1),this._canvasContainer.classList.remove("mapboxgl-touch-drag-pan","maplibregl-touch-drag-pan")}_resizeCanvas(i,r,a){this._canvas.width=a*i,this._canvas.height=a*r,this._canvas.style.width=`${i}px`,this._canvas.style.height=`${r}px`}_ [...]
\ No newline at end of file
diff --git a/_next/static/chunks/framework-2c79e2a64abdb08b.js b/_next/static/chunks/framework-2c79e2a64abdb08b.js
new file mode 100644
index 0000000..d7d0c94
--- /dev/null
+++ b/_next/static/chunks/framework-2c79e2a64abdb08b.js
@@ -0,0 +1,33 @@
+"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[774],{4448:function(e,n,t){/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var r,l,a,u,o,i,s=t(7294),c=t(3840);function f(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var d=new Set,p={};function m(e,n){h(e,n),h(e+"Capture",n)}function h(e,n){for(p[e]=n,e=0;e<n.length;e++)d.add(n[e])}var g=!("undefined"= [...]
+ * @license React
+ * react-jsx-runtime.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var r=t(7294),l=Symbol.for("react.element"),a=Symbol.for("react.fragment"),u=Object.prototype.hasOwnProperty,o=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function s(e,n,t){var r,a={},s=null,c=null;for(r in void 0!==t&&(s=""+t),void 0!==n.key&&(s=""+n.key),void 0!==n.ref&&(c=n.ref),n)u.call(n,r)&&!i.hasOwnProperty(r)&&(a[r]=n[r]);if(e&&e.defaultProps)for(r in n=e.defaultProps)void 0===a[r]&&(a[r]=n[r]);return{$$typeof: [...]
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),l=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),o=Symbol.for("react.provider"),i=Symbol.for("react.context"),s=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),p=Symbol.iterator,m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=O [...]
+ * @license React
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */function t(e,n){var t=e.length;e.push(n);e:for(;0<t;){var r=t-1>>>1,l=e[r];if(0<a(l,n))e[r]=n,e[t]=l,t=r;else break e}}function r(e){return 0===e.length?null:e[0]}function l(e){if(0===e.length)return null;var n=e[0],t=e.pop();if(t!==n){e[0]=t;e:for(var r=0,l=e.length,u=l>>>1;r<u;){var o=2*(r+1)-1,i=e[o],s=o+1,c=e[s];if(0>a(i,t))s<l&&0>a(c,i)?(e[r]=c,e[s]=t,r=s):(e[r]=i,e[o]=t,r=o);else if(s<l&&0>a(c,t))e[r]=c,e[s]=t,r=s;else break e}}return n}function a(e,n){var t=e.sortIndex-n.sortIn [...]
\ No newline at end of file
diff --git a/_next/static/chunks/main-862156089985efcc.js b/_next/static/chunks/main-862156089985efcc.js
new file mode 100644
index 0000000..a558cc8
--- /dev/null
+++ b/_next/static/chunks/main-862156089985efcc.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[179],{932:function(e,t){"use strict";function r(e,t,r,n,a,o,i){try{var l=e[o](i),s=l.value}catch(e){r(e);return}l.done?t(s):Promise.resolve(s).then(n,a)}function n(e){return function(){var t=this,n=arguments;return new Promise(function(a,o){var i=e.apply(t,n);function l(e){r(i,a,o,l,s,"next",e)}function s(e){r(i,a,o,l,s,"throw",e)}l(void 0)})}}Object.defineProperty(t,"Z",{enumerable:!0,get:function(){return n}})},6495:function(e,t) [...]
\ No newline at end of file
diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json
new file mode 100644
index 0000000..f5beb97
--- /dev/null
+++ b/_next/static/chunks/nextra-data-en-US.json
@@ -0,0 +1 @@
+{"/_app":{"title":" App","data":{"":""}},"/documentation/developer-manual":{"title":"Developer Manual","data":{"":"The Developer Manual aims at helping developers to execute the code, understand the structure and contribute to the project.Go into the relevant sections to find out more about Apache Baremaps.\nProject structure\nHow to build with Maven\nSet up in IntelliJ IDEA\nGeocoder\nIP to location\nStylesheet"}},"/documentation/developer-manual/basemap":{"title":"Basemap","data":{"":" [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/_app-0b51bf33ea748059.js b/_next/static/chunks/pages/_app-0b51bf33ea748059.js
new file mode 100644
index 0000000..a60c8d3
--- /dev/null
+++ b/_next/static/chunks/pages/_app-0b51bf33ea748059.js
@@ -0,0 +1,23 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[888],{9603:function(e,t,n){"use strict";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach(function(t){c(e,t,n[t])}):Object.getOwnPropertyDescripto [...]
+ * buildToken
+ * Builds OAuth token prefix (helper function)
+ *
+ * @name buildToken
+ * @function
+ * @param {GitUrl} obj The parsed Git url object.
+ * @return {String} token prefix
+ */function i(e){return"bitbucket.org"===e.source?"x-token-auth:"+e.token+"@":e.token+"@"}function o(e){return"bitbucket-server"===e.source?"scm/"+e.full_name:""+e.full_name}a.stringify=function(e,t){t=t||(e.protocols&&e.protocols.length?e.protocols.join("+"):e.protocol);var n=e.port?":"+e.port:"",r=e.user||"git",a=e.git_suffix?".git":"";switch(t){case"ssh":if(n)return"ssh://"+r+"@"+e.resource+n+"/"+e.full_name+a;return r+"@"+e.resource+":"+e.full_name+a;case"git+ssh":case"ssh+git":case" [...]
+`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(e=>`  - ${e}`).join(`
+`)].join(`
+`));let e=tA(null==(a=u.props)?void 0:a.className,l.className),t=e?{className:e}:{};return(0,N.cloneElement)(u,Object.assign({},tz(u.props,tW(t$(l,["ref"]))),d,c,tZ(u.ref,c.ref),t))}return(0,N.createElement)(i,Object.assign({},t$(l,["ref"]),i!==N.Fragment&&c,i!==N.Fragment&&d),u)}function tZ(...e){return{ref:e.every(e=>null==e)?void 0:t=>{for(let n of e)null!=n&&("function"==typeof n?n(t):n.current=t)}}}function tz(...e){var t;if(0===e.length)return{};if(1===e.length)return e[0];let n={} [...]
+        :root {
+          --nextra-primary-hue: ${s}deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: ${o}deg;
+        }
+      `}),a]})]})}var sf={link:(0,T.Z)("nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray-300 md:nx-text-lg"),icon:(0,T.Z)("nx-inline nx-h-5 nx-shrink-0")},sp=({flatDirectories:e,currentIndex:t})=>{let n=oR(),r=n.navigation,a="boolean"==typeof r?{prev:r,next:r}:r,i=a.prev&&e[t-1],o=a.next&&e[t+1];return(i&&!i.isUnderCurrentDocsTree&&(i=!1),o&&!o.isUn [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/_error-e4f561a102d9bb14.js b/_next/static/chunks/pages/_error-e4f561a102d9bb14.js
new file mode 100644
index 0000000..b409f04
--- /dev/null
+++ b/_next/static/chunks/pages/_error-e4f561a102d9bb14.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[820],{1981:function(n,_,u){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return u(9185)}])}},function(n){n.O(0,[774,888,179],function(){return n(n.s=1981)}),_N_E=n.O()}]);
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation-a93376fa8c085104.js b/_next/static/chunks/pages/documentation-a93376fa8c085104.js
new file mode 100644
index 0000000..b235677
--- /dev/null
+++ b/_next/static/chunks/pages/documentation-a93376fa8c085104.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[410],{709:function(e,t,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation",function(){return i(307)}])},307:function(e,t,i){"use strict";i.r(t);var n=i(5893),s=i(8863),a=i(1151);function o(e){let t=Object.assign({h1:"h1",p:"p",a:"a",ul:"ul",li:"li"},(0,a.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"Introduction"}),"\n",(0,n.jsxs)(t.p,{children:["Apache Baremaps is an  ",(0,n.jsx)( [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual-272fbf284b802e4d.js b/_next/static/chunks/pages/documentation/developer-manual-272fbf284b802e4d.js
new file mode 100644
index 0000000..4917038
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual-272fbf284b802e4d.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[954],{4189:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual",function(){return t(2041)}])},2041:function(e,n,t){"use strict";t.r(n);var l=t(5893),a=t(8863),r=t(1151);function o(e){let n=Object.assign({h1:"h1",p:"p",ul:"ul",li:"li",a:"a"},(0,r.ah)(),e.components);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{children:"Developer Manual"}),"\n",(0,l.jsx)(n.p,{children:"The Developer [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/basemap-11157ffb4515e9cc.js b/_next/static/chunks/pages/documentation/developer-manual/basemap-11157ffb4515e9cc.js
new file mode 100644
index 0000000..8530cc3
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/basemap-11157ffb4515e9cc.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[491],{7156:function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/basemap",function(){return a(6840)}])},6840:function(e,t,a){"use strict";a.r(t);var n=a(5893),s=a(8863),o=a(1151);a(5675);var r=a(9815);function i(e){let t=Object.assign({h1:"h1",p:"p",a:"a"},(0,o.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"Basemap"}),"\n",(0,n.jsxs)(t.p,{children:["Barema [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/geocoder-e34d680f2c1777d2.js b/_next/static/chunks/pages/documentation/developer-manual/geocoder-e34d680f2c1777d2.js
new file mode 100644
index 0000000..b8a9377
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/geocoder-e34d680f2c1777d2.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[450],{8606:function(e,n,o){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/geocoder",function(){return o(1576)}])},1576:function(e,n,o){"use strict";o.r(n);var t=o(5893),r=o(8863),a=o(1151);function c(e){let n=Object.assign({h1:"h1",p:"p"},(0,a.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{children:"Geocoder"}),"\n",(0,t.jsx)(n.p,{children:"TODO"})]})}o(5675),n.default=(0,r. [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/how-to-build-with-maven-88ae5b3c2c83887c.js b/_next/static/chunks/pages/documentation/developer-manual/how-to-build-with-maven-88ae5b3c2c83887c.js
new file mode 100644
index 0000000..21127fc
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/how-to-build-with-maven-88ae5b3c2c83887c.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[214],{856:function(e,s,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/how-to-build-with-maven",function(){return n(5085)}])},5085:function(e,s,n){"use strict";n.r(s);var a=n(5893),o=n(8863),t=n(1151);function r(e){let s=Object.assign({h1:"h1",p:"p",a:"a",h3:"h3",code:"code",pre:"pre",span:"span"},(0,t.ah)(),e.components);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{children:"How to Build w [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/ip-to-location-33046f09e40d8379.js b/_next/static/chunks/pages/documentation/developer-manual/ip-to-location-33046f09e40d8379.js
new file mode 100644
index 0000000..b3e1b70
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/ip-to-location-33046f09e40d8379.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[777],{2159:function(e,s,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/ip-to-location",function(){return n(4139)}])},4139:function(e,s,n){"use strict";n.r(s);var t=n(5893),o=n(8863),a=n(1151);function i(e){let s=Object.assign({h1:"h1",p:"p",a:"a",ul:"ul",li:"li",em:"em",h2:"h2",pre:"pre",code:"code",span:"span",ol:"ol"},(0,a.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{ [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/project-structure-ef2d7d7ae18b81e1.js b/_next/static/chunks/pages/documentation/developer-manual/project-structure-ef2d7d7ae18b81e1.js
new file mode 100644
index 0000000..6c9b16a
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/project-structure-ef2d7d7ae18b81e1.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[246],{5671:function(e,t,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/project-structure",function(){return r(8660)}])},8660:function(e,t,r){"use strict";r.r(t);var n=r(5893),u=r(8863),o=r(1151);function c(e){let t=Object.assign({h1:"h1",p:"p",h2:"h2",h3:"h3"},(0,o.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"Project structure"}),"\n",(0,n.jsx)(t.p,{children:" [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/developer-manual/setup-in-intellij-9617f43c0662679e.js b/_next/static/chunks/pages/documentation/developer-manual/setup-in-intellij-9617f43c0662679e.js
new file mode 100644
index 0000000..b61239e
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/developer-manual/setup-in-intellij-9617f43c0662679e.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[575],{8670:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/developer-manual/setup-in-intellij",function(){return t(4591)}])},4591:function(e,n,t){"use strict";t.r(n);var i=t(5893),l=t(8863),u=t(1151);function o(e){let n=Object.assign({h1:"h1",p:"p"},(0,u.ah)(),e.components);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{children:"Set up in IntelliJ IDEA"}),"\n",(0,i.jsx)(n.p,{children:"To open th [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples-8624c50ffb5cbc26.js b/_next/static/chunks/pages/documentation/examples-8624c50ffb5cbc26.js
new file mode 100644
index 0000000..40269d1
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples-8624c50ffb5cbc26.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[561],{2221:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples",function(){return n(1596)}])},1596:function(e,t,n){"use strict";n.r(t);var o=n(5893),s=n(8863),a=n(1151);function i(e){let t=Object.assign({h1:"h1",p:"p",a:"a",pre:"pre",code:"code",span:"span",ul:"ul",li:"li"},(0,a.ah)(),e.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{children:"Examples"}),"\n",(0,o.jsxs)(t.p,{chil [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/extrusion-f64b34b9cfc7d88a.js b/_next/static/chunks/pages/documentation/examples/extrusion-f64b34b9cfc7d88a.js
new file mode 100644
index 0000000..c84b607
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/extrusion-f64b34b9cfc7d88a.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[226],{4368:function(s,e,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/extrusion",function(){return n(3317)}])},3317:function(s,e,n){"use strict";n.r(e),n.d(e,{default:function(){return h}});var l=n(5893),r=n(8863),i=n(1151),o=n(5675),t=n.n(o),a={src:"/_next/static/media/extrusion.9934b529.png",height:887,width:1392,blurDataURL:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAoUlEQVR42 [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/geoadmin-74fb49e0138b6e62.js b/_next/static/chunks/pages/documentation/examples/geoadmin-74fb49e0138b6e62.js
new file mode 100644
index 0000000..f4172a6
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/geoadmin-74fb49e0138b6e62.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[550],{6122:function(e,s,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/geoadmin",function(){return n(6068)}])},6068:function(e,s,n){"use strict";n.r(s);var a=n(5893),t=n(8863),i=n(1151);function r(e){let s=Object.assign({h1:"h1",p:"p",a:"a",pre:"pre",code:"code",span:"span"},(0,i.ah)(),e.components);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{children:"Geoadmin noise exposure in vector tiles"})," [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/geocoding-d092e1856895e9fd.js b/_next/static/chunks/pages/documentation/examples/geocoding-d092e1856895e9fd.js
new file mode 100644
index 0000000..ebb3329
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/geocoding-d092e1856895e9fd.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[74],{38:function(e,n,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/geocoding",function(){return a(9955)}])},9955:function(e,n,a){"use strict";a.r(n);var t=a(5893),i=a(8863),o=a(1151);function s(e){let n=Object.assign({h1:"h1",p:"p",h2:"h2",a:"a",pre:"pre",code:"code",span:"span"},(0,o.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{children:"Create a geocoding web service"}),"\n" [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/import-contour-into-postgis-4b57ff83b98fb25e.js b/_next/static/chunks/pages/documentation/examples/import-contour-into-postgis-4b57ff83b98fb25e.js
new file mode 100644
index 0000000..40e53da
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/import-contour-into-postgis-4b57ff83b98fb25e.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[818],{2709:function(e,n,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/import-contour-into-postgis",function(){return s(8319)}])},8319:function(e,n,s){"use strict";s.r(n);var t=s(5893),i=s(8863),a=s(1151);function o(e){let n=Object.assign({h1:"h1",p:"p",h2:"h2",code:"code",pre:"pre",span:"span",a:"a"},(0,a.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{children:"Contour Lines in  [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/import-naturalearth-into-postgis-f5fb26a34cf16ddb.js b/_next/static/chunks/pages/documentation/examples/import-naturalearth-into-postgis-f5fb26a34cf16ddb.js
new file mode 100644
index 0000000..1dbbbc4
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/import-naturalearth-into-postgis-f5fb26a34cf16ddb.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[721],{6695:function(a,e,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/import-naturalearth-into-postgis",function(){return t(5410)}])},5410:function(a,e,t){"use strict";t.r(e);var s=t(5893),n=t(8863),l=t(1151);function i(a){let e=Object.assign({h1:"h1",p:"p",a:"a",h2:"h2",pre:"pre",code:"code",span:"span"},(0,l.ah)(),a.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{children:"Import Natur [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/import-osm-into-postgis-f37ecf2df186ec6d.js b/_next/static/chunks/pages/documentation/examples/import-osm-into-postgis-f37ecf2df186ec6d.js
new file mode 100644
index 0000000..a6a215f
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/import-osm-into-postgis-f37ecf2df186ec6d.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[258],{9543:function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/import-osm-into-postgis",function(){return a(8703)}])},8703:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return c}});var o=a(5893),s=a(8863),n=a(1151),i=a(5675),r=a.n(i),l={src:"/_next/static/media/database.ee4f3f49.png",height:342,width:1121,blurDataURL:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAACCAIAAADq9gq6 [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/ip-to-location-4e4b8527167821ce.js b/_next/static/chunks/pages/documentation/examples/ip-to-location-4e4b8527167821ce.js
new file mode 100644
index 0000000..d28defd
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/ip-to-location-4e4b8527167821ce.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[357],{6636:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/ip-to-location",function(){return n(4579)}])},4579:function(e,t,n){"use strict";n.r(t);var a=n(5893),i=n(8863),s=n(1151);function o(e){let t=Object.assign({h1:"h1",p:"p",h2:"h2",a:"a",ul:"ul",li:"li",pre:"pre",code:"code",span:"span"},(0,s.ah)(),e.components);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{children:"Create an IP t [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/examples/serve-vector-tiles-7f0b41932e82ee7b.js b/_next/static/chunks/pages/documentation/examples/serve-vector-tiles-7f0b41932e82ee7b.js
new file mode 100644
index 0000000..c9fd049
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/examples/serve-vector-tiles-7f0b41932e82ee7b.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[259],{2293:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/examples/serve-vector-tiles",function(){return t(8719)}])},8719:function(e,s,t){"use strict";t.r(s);var n=t(5893),a=t(8863),o=t(1151);function r(e){let s=Object.assign({h1:"h1",p:"p",ul:"ul",li:"li",a:"a",h2:"h2",code:"code",pre:"pre",span:"span",h3:"h3"},(0,o.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{children:"Se [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/getting-started-6ca2a3f65e5e4f16.js b/_next/static/chunks/pages/documentation/getting-started-6ca2a3f65e5e4f16.js
new file mode 100644
index 0000000..8a55c90
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/getting-started-6ca2a3f65e5e4f16.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[527],{877:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/getting-started",function(){return n(741)}])},741:function(e,t,n){"use strict";n.r(t);var a=n(5893),r=n(8863),i=n(1151);function s(e){let t=Object.assign({h1:"h1",p:"p",a:"a"},(0,i.ah)(),e.components);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h1,{children:"Getting Started"}),"\n",(0,a.jsxs)(t.p,{children:["This section will get you starte [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/getting-started/installing-postgis-362088d2144ba210.js b/_next/static/chunks/pages/documentation/getting-started/installing-postgis-362088d2144ba210.js
new file mode 100644
index 0000000..1ff8f33
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/getting-started/installing-postgis-362088d2144ba210.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[646],{87:function(e,t,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/getting-started/installing-postgis",function(){return s(9792)}])},9792:function(e,t,s){"use strict";s.r(t);var n=s(5893),a=s(8863),l=s(1151);function i(e){let t=Object.assign({h1:"h1",p:"p",a:"a",pre:"pre",code:"code",span:"span"},(0,l.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"Installing PostGIS"}),"\n",(0 [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/documentation/getting-started/installing-the-cli-021e38f014bb7a0d.js b/_next/static/chunks/pages/documentation/getting-started/installing-the-cli-021e38f014bb7a0d.js
new file mode 100644
index 0000000..ba3f8ee
--- /dev/null
+++ b/_next/static/chunks/pages/documentation/getting-started/installing-the-cli-021e38f014bb7a0d.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[413],{6861:function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/documentation/getting-started/installing-the-cli",function(){return a(3624)}])},3624:function(e,t,a){"use strict";a.r(t);var n=a(5893),s=a(8863),l=a(1151);function i(e){let t=Object.assign({h1:"h1",p:"p",a:"a",code:"code",pre:"pre",span:"span"},(0,l.ah)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"Installing the CLI"}),"\n", [...]
\ No newline at end of file
diff --git a/_next/static/chunks/pages/index-ea81da34430ec69e.js b/_next/static/chunks/pages/index-ea81da34430ec69e.js
new file mode 100644
index 0000000..6002583
--- /dev/null
+++ b/_next/static/chunks/pages/index-ea81da34430ec69e.js
@@ -0,0 +1 @@
+(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[405],{1464:function(e,a,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return t(1948)}])},1948:function(e,a,t){"use strict";t.r(a),t.d(a,{default:function(){return w}});var n=t(5893),i=t(357),s=t.n(i),r=t(8863),l=t(1151);t(5675);var o=t(1664),d=t.n(o);t(9603);var c=t(9815),m=t(6010),h=t(9428),u=t(1696),p=t.n(u);function x(e){let{medium:a,large:t,plain:i,centered:s,children:r,lightOnly:l,className:o,href:c,index:u,... [...]
\ No newline at end of file
diff --git a/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js b/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js
new file mode 100644
index 0000000..3858b79
--- /dev/null
+++ b/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js
@@ -0,0 +1 @@
+!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){var e={exports:{}};return t(e,e.exports),e.exports}var r=function(t){return t&&t.Math==Math&&t},n=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t&&t)||Function("return this")(),o=function(t){try{return!!t()}catch(t){return!0}},i=!o( [...]
᠎"!="​…᠎"[t]()||hn[t].name!==t})},Tu=yn.start,ku=Iu("trimStart"),Lu=ku?function(){return Tu(this)}:"".trimStart;Lt({target:"String",proto:!0,forced:ku},{trimStart:Lu,trimLeft:Lu}),re("String","trimLeft");var Uu=yn.end,Mu=Iu("trimEnd"),_u=Mu?function(){return Uu(this)}:"".trimEnd;Lt({target:"String",proto:!0,forced:Mu},{trimEnd:_u,trimRight:_u}),re("String","trimRight");var Nu=qt("iterator"),Cu=!o(function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,r="";return t.pathname="c%20d" [...]
diff --git a/_next/static/chunks/webpack-38cee4c0e358b1a3.js b/_next/static/chunks/webpack-38cee4c0e358b1a3.js
new file mode 100644
index 0000000..69b87df
--- /dev/null
+++ b/_next/static/chunks/webpack-38cee4c0e358b1a3.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,n,r,t,o={},i={};function u(e){var n=i[e];if(void 0!==n)return n.exports;var r=i[e]={id:e,loaded:!1,exports:{}},t=!0;try{o[e].call(r.exports,r,r.exports,u),t=!1}finally{t&&delete i[e]}return r.loaded=!0,r.exports}u.m=o,e=[],u.O=function(n,r,t,o){if(r){o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[r,t,o];return}for(var f=1/0,i=0;i<e.length;i++){for(var r=e[i][0],t=e[i][1],o=e[i][2],l=!0,c=0;c<r.length;c++)f>=o&&Object.keys(u.O).every(functi [...]
\ No newline at end of file
diff --git a/_next/static/css/0aa53f20ab4b3fde.css b/_next/static/css/0aa53f20ab4b3fde.css
new file mode 100644
index 0000000..baec9f6
--- /dev/null
+++ b/_next/static/css/0aa53f20ab4b3fde.css
@@ -0,0 +1 @@
+.style_wrap__MRdtl{position:relative;width:100%;height:100%}.style_map__RQT_O{position:absolute;color:#000;border:1px solid #d3d3d3;border-radius:.75rem;width:100%;height:100%}
\ No newline at end of file
diff --git a/_next/static/css/a025813405bc35e2.css b/_next/static/css/a025813405bc35e2.css
new file mode 100644
index 0000000..05c57b0
--- /dev/null
+++ b/_next/static/css/a025813405bc35e2.css
@@ -0,0 +1 @@
+*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}a [...]
\ No newline at end of file
diff --git a/_next/static/css/eb590262495d9b19.css b/_next/static/css/eb590262495d9b19.css
new file mode 100644
index 0000000..4810269
--- /dev/null
+++ b/_next/static/css/eb590262495d9b19.css
@@ -0,0 +1 @@
+.style_wrap__MRdtl{position:relative;width:100%;height:100%}.style_map__RQT_O{position:absolute;color:#000;border:1px solid #d3d3d3;border-radius:.75rem;width:100%;height:100%}.style_feature__aEu2F{position:relative;padding:1.5rem 1.75rem;color:#000;background-color:#fff;overflow:hidden;border-radius:.75em}.style_feature__aEu2F.style_medium__ID_sZ{grid-column:span 2}.style_feature__aEu2F.style_large__nBy_k{grid-column:span 3}.style_feature__aEu2F.style_plain__m9ziz{padding:0}.style_featu [...]
\ No newline at end of file
diff --git a/examples/openstreetmap/database.png b/_next/static/media/database.ee4f3f49.png
similarity index 100%
rename from examples/openstreetmap/database.png
rename to _next/static/media/database.ee4f3f49.png
diff --git a/examples/extrusion/screenshot.png b/_next/static/media/extrusion.9934b529.png
similarity index 100%
rename from examples/extrusion/screenshot.png
rename to _next/static/media/extrusion.9934b529.png
diff --git a/_sass/normalize.scss b/_sass/normalize.scss
deleted file mode 100644
index 81c6f31..0000000
--- a/_sass/normalize.scss
+++ /dev/null
@@ -1,427 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- *    user zoom.
- */
-
-html {
-  font-family: sans-serif; /* 1 */
-  -ms-text-size-adjust: 100%; /* 2 */
-  -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
-  margin: 0;
-}
-
-/* HTML5 display definitions
-   ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
-  display: inline-block; /* 1 */
-  vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
-  display: none;
-}
-
-/* Links
-   ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
-  background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
-  outline: 0;
-}
-
-/* Text-level semantics
-   ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
-  font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
-  font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
-  background: #ff0;
-  color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
-  font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-sup {
-  top: -0.5em;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-/* Embedded content
-   ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
-  border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
-  overflow: hidden;
-}
-
-/* Grouping content
-   ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
-  margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
-  overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-
-/* Forms
-   ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- *    Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit; /* 1 */
-  font: inherit; /* 2 */
-  margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
-  overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
-  text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- *    and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- *    `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button; /* 2 */
-  cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
-  line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box; /* 1 */
-  padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- *    (include `-moz` to future-proof).
- */
-
-input[type="search"] {
-  -webkit-appearance: textfield; /* 1 */
-  -moz-box-sizing: content-box;
-  -webkit-box-sizing: content-box; /* 2 */
-  box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
-  border: 0; /* 1 */
-  padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
-  overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
-  font-weight: bold;
-}
-
-/* Tables
-   ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-td,
-th {
-  padding: 0;
-}
\ No newline at end of file
diff --git a/_sass/skeleton.scss b/_sass/skeleton.scss
deleted file mode 100644
index f28bf6c..0000000
--- a/_sass/skeleton.scss
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
-* Skeleton V2.0.4
-* Copyright 2014, Dave Gamache
-* www.getskeleton.com
-* Free to use under the MIT license.
-* http://www.opensource.org/licenses/mit-license.php
-* 12/29/2014
-*/
-
-
-/* Table of contents
-––––––––––––––––––––––––––––––––––––––––––––––––––
-- Grid
-- Base Styles
-- Typography
-- Links
-- Buttons
-- Forms
-- Lists
-- Code
-- Tables
-- Spacing
-- Utilities
-- Clearing
-- Media Queries
-*/
-
-
-/* Grid
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.container {
-  position: relative;
-  width: 100%;
-  max-width: 960px;
-  margin: 0 auto;
-  padding: 0 20px;
-  box-sizing: border-box; }
-.column,
-.columns {
-  width: 100%;
-  float: left;
-  box-sizing: border-box; }
-
-/* For devices larger than 400px */
-@media (min-width: 400px) {
-  .container {
-    width: 85%;
-    padding: 0; }
-}
-
-/* For devices larger than 550px */
-@media (min-width: 550px) {
-  .container {
-    width: 80%; }
-  .column,
-  .columns {
-    margin-left: 4%; }
-  .column:first-child,
-  .columns:first-child {
-    margin-left: 0; }
-
-  .one.column,
-  .one.columns                    { width: 4.66666666667%; }
-  .two.columns                    { width: 13.3333333333%; }
-  .three.columns                  { width: 22%;            }
-  .four.columns                   { width: 30.6666666667%; }
-  .five.columns                   { width: 39.3333333333%; }
-  .six.columns                    { width: 48%;            }
-  .seven.columns                  { width: 56.6666666667%; }
-  .eight.columns                  { width: 65.3333333333%; }
-  .nine.columns                   { width: 74.0%;          }
-  .ten.columns                    { width: 82.6666666667%; }
-  .eleven.columns                 { width: 91.3333333333%; }
-  .twelve.columns                 { width: 100%; margin-left: 0; }
-
-  .one-third.column               { width: 30.6666666667%; }
-  .two-thirds.column              { width: 65.3333333333%; }
-
-  .one-half.column                { width: 48%; }
-
-  /* Offsets */
-  .offset-by-one.column,
-  .offset-by-one.columns          { margin-left: 8.66666666667%; }
-  .offset-by-two.column,
-  .offset-by-two.columns          { margin-left: 17.3333333333%; }
-  .offset-by-three.column,
-  .offset-by-three.columns        { margin-left: 26%;            }
-  .offset-by-four.column,
-  .offset-by-four.columns         { margin-left: 34.6666666667%; }
-  .offset-by-five.column,
-  .offset-by-five.columns         { margin-left: 43.3333333333%; }
-  .offset-by-six.column,
-  .offset-by-six.columns          { margin-left: 52%;            }
-  .offset-by-seven.column,
-  .offset-by-seven.columns        { margin-left: 60.6666666667%; }
-  .offset-by-eight.column,
-  .offset-by-eight.columns        { margin-left: 69.3333333333%; }
-  .offset-by-nine.column,
-  .offset-by-nine.columns         { margin-left: 78.0%;          }
-  .offset-by-ten.column,
-  .offset-by-ten.columns          { margin-left: 86.6666666667%; }
-  .offset-by-eleven.column,
-  .offset-by-eleven.columns       { margin-left: 95.3333333333%; }
-
-  .offset-by-one-third.column,
-  .offset-by-one-third.columns    { margin-left: 34.6666666667%; }
-  .offset-by-two-thirds.column,
-  .offset-by-two-thirds.columns   { margin-left: 69.3333333333%; }
-
-  .offset-by-one-half.column,
-  .offset-by-one-half.columns     { margin-left: 52%; }
-
-}
-
-
-/* Base Styles
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/* NOTE
-html is set to 62.5% so that all the REM measurements throughout Skeleton
-are based on 10px sizing. So basically 1.5rem = 15px :) */
-html {
-  font-size: 62.5%; }
-body {
-  font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
-  line-height: 1.6;
-  font-weight: 400;
-  font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  color: #222; }
-
-
-/* Typography
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: 2rem;
-  font-weight: 300; }
-h1 { font-size: 4.0rem; line-height: 1.2;  letter-spacing: -.1rem;}
-h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
-h3 { font-size: 3.0rem; line-height: 1.3;  letter-spacing: -.1rem; }
-h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
-h5 { font-size: 1.8rem; line-height: 1.5;  letter-spacing: -.05rem; }
-h6 { font-size: 1.5rem; line-height: 1.6;  letter-spacing: 0; }
-
-/* Larger than phablet */
-@media (min-width: 550px) {
-  h1 { font-size: 5.0rem; }
-  h2 { font-size: 4.2rem; }
-  h3 { font-size: 3.6rem; }
-  h4 { font-size: 3.0rem; }
-  h5 { font-size: 2.4rem; }
-  h6 { font-size: 1.5rem; }
-}
-
-p {
-  margin-top: 0; }
-
-
-/* Links
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-a {
-  color: #1EAEDB; }
-a:hover {
-  color: #0FA0CE; }
-
-
-/* Buttons
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.button,
-button,
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  display: inline-block;
-  height: 38px;
-  padding: 0 30px;
-  color: #555;
-  text-align: center;
-  font-size: 11px;
-  font-weight: 600;
-  line-height: 38px;
-  letter-spacing: .1rem;
-  text-transform: uppercase;
-  text-decoration: none;
-  white-space: nowrap;
-  background-color: transparent;
-  border-radius: 4px;
-  border: 1px solid #bbb;
-  cursor: pointer;
-  box-sizing: border-box; }
-.button:hover,
-button:hover,
-input[type="submit"]:hover,
-input[type="reset"]:hover,
-input[type="button"]:hover,
-.button:focus,
-button:focus,
-input[type="submit"]:focus,
-input[type="reset"]:focus,
-input[type="button"]:focus {
-  color: #333;
-  border-color: #888;
-  outline: 0; }
-.button.button-primary,
-button.button-primary,
-input[type="submit"].button-primary,
-input[type="reset"].button-primary,
-input[type="button"].button-primary {
-  color: #FFF;
-  background-color: #33C3F0;
-  border-color: #33C3F0; }
-.button.button-primary:hover,
-button.button-primary:hover,
-input[type="submit"].button-primary:hover,
-input[type="reset"].button-primary:hover,
-input[type="button"].button-primary:hover,
-.button.button-primary:focus,
-button.button-primary:focus,
-input[type="submit"].button-primary:focus,
-input[type="reset"].button-primary:focus,
-input[type="button"].button-primary:focus {
-  color: #FFF;
-  background-color: #1EAEDB;
-  border-color: #1EAEDB; }
-
-
-/* Forms
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea,
-select {
-  height: 38px;
-  padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
-  background-color: #fff;
-  border: 1px solid #D1D1D1;
-  border-radius: 4px;
-  box-shadow: none;
-  box-sizing: border-box; }
-/* Removes awkward default styles on some inputs for iOS */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea {
-  -webkit-appearance: none;
-     -moz-appearance: none;
-          appearance: none; }
-textarea {
-  min-height: 65px;
-  padding-top: 6px;
-  padding-bottom: 6px; }
-input[type="email"]:focus,
-input[type="number"]:focus,
-input[type="search"]:focus,
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="url"]:focus,
-input[type="password"]:focus,
-textarea:focus,
-select:focus {
-  border: 1px solid #33C3F0;
-  outline: 0; }
-label,
-legend {
-  display: block;
-  margin-bottom: .5rem;
-  font-weight: 600; }
-fieldset {
-  padding: 0;
-  border-width: 0; }
-input[type="checkbox"],
-input[type="radio"] {
-  display: inline; }
-label > .label-body {
-  display: inline-block;
-  margin-left: .5rem;
-  font-weight: normal; }
-
-
-/* Lists
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-ul {
-  list-style: circle inside; }
-ol {
-  list-style: decimal inside; }
-ol, ul {
-  padding-left: 0;
-  margin-top: 0; }
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin: 1.5rem 0 1.5rem 3rem;
-  font-size: 90%; }
-li {
-  margin-bottom: 1rem; }
-
-
-/* Code
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-code {
-  padding: .2rem .5rem;
-  margin: 0 .2rem;
-  font-size: 90%;
-  white-space: nowrap;
-  background: #F1F1F1;
-  border: 1px solid #E1E1E1;
-  border-radius: 4px; }
-pre > code {
-  display: block;
-  padding: 1rem 1.5rem;
-  white-space: pre; }
-
-
-/* Tables
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-th,
-td {
-  padding: 12px 15px;
-  text-align: left;
-  border-bottom: 1px solid #E1E1E1; }
-th:first-child,
-td:first-child {
-  padding-left: 0; }
-th:last-child,
-td:last-child {
-  padding-right: 0; }
-
-
-/* Spacing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-button,
-.button {
-  margin-bottom: 1rem; }
-input,
-textarea,
-select,
-fieldset {
-  margin-bottom: 1.5rem; }
-pre,
-blockquote,
-dl,
-figure,
-table,
-p,
-ul,
-ol,
-form {
-  margin-bottom: 2.5rem; }
-
-
-/* Utilities
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.u-full-width {
-  width: 100%;
-  box-sizing: border-box; }
-.u-max-full-width {
-  max-width: 100%;
-  box-sizing: border-box; }
-.u-pull-right {
-  float: right; }
-.u-pull-left {
-  float: left; }
-
-
-/* Misc
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-hr {
-  margin-top: 3rem;
-  margin-bottom: 3.5rem;
-  border-width: 0;
-  border-top: 1px solid #E1E1E1; }
-
-
-/* Clearing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-
-/* Self Clearing Goodness */
-.container:after,
-.row:after,
-.u-cf {
-  content: "";
-  display: table;
-  clear: both; }
-
-
-/* Media Queries
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/*
-Note: The best way to structure the use of media queries is to create the queries
-near the relevant code. For example, if you wanted to change the styles for buttons
-on small devices, paste the mobile query code up in the buttons section and style it
-there.
-*/
-
-
-/* Larger than mobile */
-@media (min-width: 400px) {}
-
-/* Larger than phablet (also point when grid becomes active) */
-@media (min-width: 550px) {}
-
-/* Larger than tablet */
-@media (min-width: 750px) {}
-
-/* Larger than desktop */
-@media (min-width: 1000px) {}
-
-/* Larger than Desktop HD */
-@media (min-width: 1200px) {}
diff --git a/_sass/style.scss b/_sass/style.scss
deleted file mode 100644
index f66a1d0..0000000
--- a/_sass/style.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-body {
-  margin: 60px 0;
-}
-
-img {
-  width: 100%;
-}
-
-.logo a {
-  color: black;
-}
-
-.logo a, nav a {
-  text-decoration: none;
-}
-
-.home {
-  text-align: center;
-}
-
-nav > ul > li {
-  list-style: none;
-}
-
-section li {
-  padding-left: 1.28571429em;
-  text-indent: -1.28571429em;
-}
-
-#map {
-  border: 0;
-}
\ No newline at end of file
diff --git a/about.md b/about.md
deleted file mode 100644
index d354461..0000000
--- a/about.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-layout: default
-title: About
-description: An open source toolkit for creating vector tiles from OpenStreetMap and other data sources.
-permalink: /about/
----
-
-# About
-
-Baremaps is an [open source](https://github.com/baremaps/baremaps/blob/master/LICENSE) toolkit for creating vector tiles from [OpenStreetMap](https://www.openstreetmap.org) and other data sources.
-
-[![State of the map](/assets/screenshot.jpg)](/assets/demo.html)
-
-It is inspired by [Osmosis](https://github.com/openstreetmap/osmosis), but it comes with additional features, such as the ability to:
--   Process data in parallel with the [Stream API](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) introduced in Java 8
--   Import data faster with the [COPY API](https://www.postgresql.org/docs/11/sql-copy.html) of Postgresql
--   Create postgis geometries on the fly with [JTS](https://github.com/locationtech/jts)
--   Create and serve customized [Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/)
-
-On the longer run, the aim of the project is to work with a variety of data sources in order to create highly specialized and customized maps.
-
-
diff --git a/assets/demo.html b/assets/demo.html
deleted file mode 100644
index b5269d7..0000000
--- a/assets/demo.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<html>
-<head>
-  <link href='https://api.mapbox.com/mapbox-gl-js/v0.44.0/mapbox-gl.css' rel='stylesheet'/>
-
-  <style>
-
-    body {
-      line-height: 1.6;
-      font-weight: 300;
-      font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
-      color: #222;
-    }
-
-    header {
-      position: fixed;
-      background-color: white;
-      margin: 9px;
-      padding: 20px;
-      z-index: 1;
-      border: solid 2px lightgray;
-      border-radius: 5px;
-      width: 300px;
-    }
-
-    header h2 {
-      margin: 0;
-    }
-
-    header p {
-      margin: 0 0 10px 0;
-    }
-
-    #map {
-      width: 100%;
-      height: 100%;
-      z-index: 0;
-    }
-
-  </style>
-  <title>Demonstration - Baremaps</title>
-</head>
-<body style="margin: 0">
-<header>
-  <h2><i class="far fa-map"></i> Baremaps</h2>
-  <p>These <a target="_blank" href="https://docs.mapbox.com/vector-tiles/reference/">vector tiles</a> have been crafted with <a href="https://www.baremaps.com">Baremaps</a> and <a target="_blank" href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> data.</p>
-  <a class="github-button" href="https://github.com/baremaps/baremaps" data-size="large" data-show-count="true"
-     aria-label="Star baremaps/baremaps on GitHub">Star</a>
-  <a class="github-button" href="https://github.com/baremaps/baremaps/releases/latest"
-     data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-     aria-label="Download baremaps/baremaps on GitHub">Download</a>
-</header>
-<div id="map"></div>
-<script src='https://api.mapbox.com/mapbox-gl-js/v0.44.0/mapbox-gl.js'></script>
-<script src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-<script src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-<script>
-
-  // Initialize the map
-  var map = new mapboxgl.Map({
-    container: 'map',
-    style: 'https://tiles.baremaps.com/style.json',
-    center: [6.5743, 46.5189],
-    zoom: 14,
-    minZoom: 6,
-    maxZoom: 18
-  });
-
-  map.addControl(new mapboxgl.NavigationControl());
-
-</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/assets/screenshot.jpg b/assets/screenshot.jpg
deleted file mode 100644
index 39e72e6..0000000
Binary files a/assets/screenshot.jpg and /dev/null differ
diff --git a/assets/css/main.scss b/css/main.scss
similarity index 100%
rename from assets/css/main.scss
rename to css/main.scss
diff --git a/output/assets/demo.html b/demo.html
similarity index 100%
rename from output/assets/demo.html
rename to demo.html
diff --git a/documentation.html b/documentation.html
new file mode 100644
index 0000000..a7d0600
--- /dev/null
+++ b/documentation.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Introduction – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Introduction – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Apache Baremaps is an  <a href="https://github.com/apache/incubator-baremaps/blob/main/LICENSE" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">open source<span class="nx-sr-only"> (opens in a new tab)</span></a> toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Apache Baremaps is inspired by <a href="https://github.com/openstreetmap/osmosis" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Osmosis<span class="nx-sr-only"> (opens in a new tab)</span></a>, but it comes with additional features, such as the ability to:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">Process data in parallel with the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Stream API<span class="nx-sr-only"> (opens in a new tab)</span></a> introduced in Java 8</li>
+<li class="nx-my-2">Import data faster with the <a href="https://www.postgresql.org/docs/11/sql-copy.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">COPY API<span class="nx-sr-only"> (opens in a new tab)</span></a> of Postgresql</li>
+<li class="nx-my-2">Create postgis geometries on the fly with <a href="https://github.com/locationtech/jts" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">JTS<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2">Create and serve customized <a href="https://docs.mapbox.com/vector-tiles/specification/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Vector Tiles<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">On the longer run, the project aims to work with a variety of data sources in order to create highly specialized and customized maps.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Getting started" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-tex [...]
\ No newline at end of file
diff --git a/documentation/developer-manual.html b/documentation/developer-manual.html
new file mode 100644
index 0000000..3da74bc
--- /dev/null
+++ b/documentation/developer-manual.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Developer Manual – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Developer Manual – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The Developer Manual aims at helping developers to execute the code, understand the structure and contribute to the project.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Go into the relevant sections to find out more about Apache Baremaps.</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/project-structure">Project structure</a></li>
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/how-to-build-with-maven">How to build with Maven</a></li>
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/setup-with-intellij">Set up in IntelliJ IDEA</a></li>
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/geocoder">Geocoder</a></li>
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/ip-to-location">IP to location</a></li>
+<li class="nx-my-2"><a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual/stylesheet">Stylesheet</a></li>
+</ul><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Geoadmin Noise Exposure in Vector Tiles" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray-300 md:nx-text-lg ltr:nx-p [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/basemap.html b/documentation/developer-manual/basemap.html
new file mode 100644
index 0000000..3988b29
--- /dev/null
+++ b/documentation/developer-manual/basemap.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Basemap – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Basemap – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Baremaps comes with a
+<a href="https://github.com/apache/incubator-baremaps/tree/main/basemap" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">default tileset and stylesheet<span class="nx-sr-only"> (opens in a new tab)</span></a>
+that can be used to generate vector tiles. The stylesheet is based on the
+<a href="https://github.com/gravitystorm/openstreetmap-carto" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">OpenStreetMap Carto<span class="nx-sr-only"> (opens in a new tab)</span></a>
+style.
+It is an ongoing effort to create an attribution-free map style.
+Your contributions are welcome.</p>
+<!-- -->
+<div style="margin-top:20px;height:450px"><div class="style_wrap__MRdtl"><div class="style_map__RQT_O"></div></div></div><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="IP to Location" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [wo [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/geocoder.html b/documentation/developer-manual/geocoder.html
new file mode 100644
index 0000000..65b6d6e
--- /dev/null
+++ b/documentation/developer-manual/geocoder.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Geocoder – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Geocoder – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">TODO</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Project structure" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/how-to-build-with-maven.html b/documentation/developer-manual/how-to-build-with-maven.html
new file mode 100644
index 0000000..49f8a7d
--- /dev/null
+++ b/documentation/developer-manual/how-to-build-with-maven.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>How to Build with Maven – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="How to Build with Maven – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This guide describes the basics of compiling Baremaps from source. In order to run Apache Baremaps, you first need to install Java 17 or a later version.
+<a href="https://sdkman.io/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">SDKMAN<span class="nx-sr-only"> (opens in a new tab)</span></a> provides a convenient Command Line Interface (CLI) to install and upgrade Java. We also suggest you use the most recent version of Maven
+to compile <a href="https://maven.apache.org/download.cgi" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">(at least 3.x.x)<span class="nx-sr-only"> (opens in a new tab)</span></a>.</p>
+<h3 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl">Linux or OSX<span class="nx-absolute -nx-mt-20" id="linux-or-osx"></span><a href="#linux-or-osx" class="subheading-anchor" aria-label="Permalink for this section"></a></h3>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To start you can run the command <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">mvn clean package</code> from the root folder of the Baremaps project.  Upon successful
+compilation you should see something similar to the following output in your terminal.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] ------------------------------------------------------------------------</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] Reactor Summary </span><span style="color:var(--shiki-token-keyword)">for</span><span style="color:var(--shiki-color-text)"> baremaps 0.7.1-SNAPSHOT:</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] </span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps ........................................... SUCCESS [  </span><span style="color:var(--shiki-token-constant)">4.172</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps-core ...................................... SUCCESS [ </span><span style="color:var(--shiki-token-constant)">59.018</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps-benchmark ................................. SUCCESS [  </span><span style="color:var(--shiki-token-constant)">1.775</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps-ogcapi .................................... SUCCESS [  </span><span style="color:var(--shiki-token-constant)">9.796</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps-server .................................... SUCCESS [  </span><span style="color:var(--shiki-token-constant)">0.787</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] baremaps-cli ....................................... SUCCESS [ </span><span style="color:var(--shiki-token-constant)">20.687</span><span style="color:var(--shiki-color-text)"> s]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO] ------------------------------------------------------------------------</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">It is important to note the first line in the output above that notes where the location of the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">baremaps.zip</code> file resides.
+Referencing the location of the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">baremaps.zip</code> file, you can run the following to unzip
+and place Baremaps into your <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">PATH</code>.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">$ </span><span style="color:var(--shiki-token-string)">export</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string)">PATH=</span><span style="color:var(--shiki-color-text)">$PATH</span><span style="color:var(--shiki-token-string)">:</span><span style="color:var(--shiki-token-string-expression)">`</span><span style="color:var(--shiki-token-function)">pwd</span><span style="color [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Executing the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">baremaps</code> command should now result in an output similar to the following:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">A toolkit for producing vector tiles.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">Commands:</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  import  Import OpenStreetMap data in the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  update  Update OpenStreetMap data in the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  export  Export vector tiles from the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  serve   Serve vector tiles from the the Postgresql database.</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p- [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">From here, head into <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/getting-started/installing-postgis">Installing PostGIS</a> if you plan to work with vector tiles.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you want to work on <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/geocoding">Geocoding</a> or
+<a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/ip-to-location">IP to location</a>, head directly into the related examples.</p>
+<h3 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl">Windows<span class="nx-absolute -nx-mt-20" id="windows"></span><a href="#windows" class="subheading-anchor" aria-label="Permalink for this section"></a></h3>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you are using Windows, you will need to use <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">mvnw.cmd</code> instead of <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em]  [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/ip-to-location.html b/documentation/developer-manual/ip-to-location.html
new file mode 100644
index 0000000..f36dd31
--- /dev/null
+++ b/documentation/developer-manual/ip-to-location.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>IP to location – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="IP to location – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Using data publicly available from the 5 <a href="https://whatismyipaddress.com/rir" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Regional Internet Registries (RIRs)<span class="nx-sr-only"> (opens in a new tab)</span></a>
+we are able to generate a stream of objects detailing Internet resource allocations. We call these NIC Objects
+(Network Information Centre Objects).</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Here is the list of the 5 RIRs.</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a href="https://www.arin.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">ARIN<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.lacnic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">LACNIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://afrinic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">AFRINIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.ripe.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">RIPE NCC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.apnic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">APNIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Using the list of NIC objects, we extract those that concern IPv4 address ranges (<a href="https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2-descriptions-of-primary-objects/4-2-4-description-of-the-inetnum-object" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">INETNUM<span class="nx-sr-only"> [...]
+, then using the Baremaps Geocoder API, we iterate through the extracted NIC objects to geo-locate each one of them.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The resulting geo-localised IPv4 address ranges are stored in a SQLite database which can be easily queried to geo-locate a specific IP.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">A NIC object contains a list of attributes but these attributes are not consistent between each NIC object.
+We try to use these 4 attributes to query the Geocoder service :</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><em>address</em> contains the address of the NIC Object</li>
+<li class="nx-my-2"><em>descr</em> sometimes contains the address of the NIC Object</li>
+<li class="nx-my-2"><em>country</em> contains the country code in ISO format (ISO 3166) - <a href="https://www.ripe.net/participate/member-support/list-of-members/list-of-country-codes-and-rirs" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">RIPE list of country codes<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><em>geoloc</em> contains the latitude and longitude which can be used directly</li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Some NIC Objects contain a reference to an organisation, and the organisation&#x27;s NIC Object itself contains the
+geo-localisation information. However, we don&#x27;t make use of that for now.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The <a href="https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-documentation/ripe-database-structure" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">structure of the RIPE database<span class="nx-sr-only"> (opens in a new tab)</span></a>
+should be applicable to all the RIRs.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Generating the IP to location database<span class="nx-absolute -nx-mt-20" id="generating-the-ip-to-location-database"></span><a href="#generating-the-ip-to-location-database" class="subheading-anchor" aria-label="Permalink for this [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">A workflow is a directed acyclic graph of steps executed by Baremaps. To download and import the sample OSM data in Postgres, execute the following <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/ip-to-location/workflow.js" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">workflow<span class="nx-sr-only"> (opens in a new tab [...]
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Depending on the size of the OpenStreetMap file, the execution of this command may take some time.
+Eventually, the output produced by the command should look as follows.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-12-08 12:56:06.031 [pool-2-thread-1] DownloadUrl - Downloading https://ftp.ripe.net/ripe/dbase/ripe.db.gz to downloads/ripe.db.gz</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-12-08 12:56:06.031 [pool-2-thread-2] DownloadUrl - Downloading https://download.geonames.org/export/dump/allCountries.zip to downloads/geonames-allcountries.zip</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:21.368 [main] Workflow - Finished executing workflow examples/ip-to-location/workflow.js</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text- [...]
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Code usage<span class="nx-absolute -nx-mt-20" id="code-usage"></span><a href="#code-usage" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In order to generate the SQLite database that contains the geo-localised IP address ranges you must follow a few steps.</p>
+<ol class="nx-mt-6 nx-list-decimal first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">First you need to load/build a Geocoder which will be used to query the addresses contained in the NIC objects.</li>
+</ol>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="java" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-token-constant)">geocoder</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">build</span><span style="color:var(--shiki-color-text)">();</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all activ [...]
+<ol class="nx-mt-6 nx-list-decimal first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6" start="2">
+<li class="nx-my-2">Then you need to generate a Stream of NIC Objects. You can use the Nic Fetcher to automatically download all of the NIC Objects from the 5 RIRs.</li>
+</ol>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="java" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-token-keyword)">Stream</span><span style="color:var(--shiki-color-text)">&lt;</span><span style="color:var(--shiki-token-keyword)">NicObject</span><span style="color:var(--shiki-color-text)">&gt; nicObjectStream </span><span style="color:var(--shiki-token-keyword)">=</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    </span><span style="color:var(--shiki-token-constant)">nicPathsStream</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">flatMap</span><span style="color:var(--shiki-color-text)">(nicPath </span><span style="color:var(--shiki-token-keyword)">-&gt;</span><span style="color:var(--shiki-color-text)"> {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">try</span><span style="color:var(--shiki-color-text)"> {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">            </span><span style="color:var(--shiki-token-keyword)">return</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">NicParser</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">parse</span><span style="color:var(--shiki-color-text)">(</span><span style="color:var(--shiki-token-keyword)">new</span><span  [...]
+<span class="line"><span style="color:var(--shiki-color-text)">        } </span><span style="color:var(--shiki-token-keyword)">catch</span><span style="color:var(--shiki-color-text)"> (</span><span style="color:var(--shiki-token-keyword)">IOException</span><span style="color:var(--shiki-color-text)"> e) {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">            </span><span style="color:var(--shiki-token-constant)">e</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">printStackTrace</span><span style="color:var(--shiki-color-text)">();</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        }</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">return</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">Stream</span><span style="color:var(--shiki-token-punctuation)">.</span><span style="color:var(--shiki-token-function)">empty</span><span style="color:var(--shiki-color-text)">();</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    });</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark:nx-border-white/10 d [...]
+<ol class="nx-mt-6 nx-list-decimal first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6" start="3">
+<li class="nx-my-2">You need to create the IpLoc service, giving the target SQLite database url and the geocoder in the second parameter</li>
+</ol>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="java" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-token-keyword)">IpLoc</span><span style="color:var(--shiki-color-text)"> ipLoc </span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-keyword)">new</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-function)">IpLoc(databaseUrl</span><span style="color:var(--shiki-token-punctuation)">,</span><span sty [...]
+<ol class="nx-mt-6 nx-list-decimal first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6" start="4">
+<li class="nx-my-2">Finally insert the stream of NIC objects in the database with the IpLoc service</li>
+</ol>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="java" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Notes<span class="nx-absolute -nx-mt-20" id="notes"></span><a href="#notes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">There are many improvements that need to be worked on to improve the Iploc module, refer to the Github issues with the
+tag <em>iploc</em> if you want to contribute.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">References<span class="nx-absolute -nx-mt-20" id="references"></span><a href="#references" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a href="https://www.iana.org/numbers" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">https://www.iana.org/numbers<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.irr.net/docs/list.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">https://www.irr.net/docs/list.html<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Geocoder" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray-300 md:nx-text-lg ltr:nx-pr-4 rtl:nx-pl-4" href="/documen [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/project-structure.html b/documentation/developer-manual/project-structure.html
new file mode 100644
index 0000000..26e3f2f
--- /dev/null
+++ b/documentation/developer-manual/project-structure.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Project structure – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Project structure – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The code is structured in a way that makes it easy to understand and to contribute to the project.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Modules<span class="nx-absolute -nx-mt-20" id="modules"></span><a href="#modules" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">TODO</p>
+<h3 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl">Baremaps-core<span class="nx-absolute -nx-mt-20" id="baremaps-core"></span><a href="#baremaps-core" class="subheading-anchor" aria-label="Permalink for this section"></a></h3>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">TODO</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Setup in IntelliJ IDEA" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text [...]
\ No newline at end of file
diff --git a/documentation/developer-manual/setup-in-intellij.html b/documentation/developer-manual/setup-in-intellij.html
new file mode 100644
index 0000000..a236cb7
--- /dev/null
+++ b/documentation/developer-manual/setup-in-intellij.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Set up in IntelliJ IDEA – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Set up in IntelliJ IDEA – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To open the project with IntelliJ, go under file -&gt; open -&gt; ...</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">There are a few pre-created configurations to run the code quickly.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">TODO</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="How to Build with Maven" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-tex [...]
\ No newline at end of file
diff --git a/documentation/examples.html b/documentation/examples.html
new file mode 100644
index 0000000..6f750b3
--- /dev/null
+++ b/documentation/examples.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Examples – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Examples – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The examples will showcase the different uses of the Apache Baremaps toolkits. To run the examples you need to clone or <a href="https://github.com/apache/incubator-baremaps/archive/refs/heads/main.zip" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">download<span class="nx-sr-only"> (opens in a new tab)</span></a> the main
+repository in order to have access to the <a href="https://github.com/apache/incubator-baremaps/blob/main/examples/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">files<span class="nx-sr-only"> (opens in a new tab)</span></a> that have been prepared for the examples.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">You should have completed the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/getting-started/installing-the-cli">Installation Guide</a> before running the examples.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">For the creation of custom vector tiles you can follow these guides:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/import-osm-into-postgis">OpenStreetMap</a> example is a good introduction to Baremaps, it shows how to produce high resolution vector tiles.</li>
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/import-naturalearth-into-postgis">NaturalEarth</a> example shows how to produce low resolution vector tiles.</li>
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/import-contour-into-postgis">Contour</a> example shows how to produce contour lines from a digital elevation model.</li>
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/extrusion">Extrusion</a> example shows how to import OSM data into postgis and use the MVT specification to extrude the vectors into 3d.</li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">For the creation of an IP to location service follow this guide:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/ip-to-location">IP to location</a> example shows how to create and serve an IP to location service in a simple web application.</li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you want to work on Geocoding there is this example:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/geocoding">Geocoding</a> example shows how to create and serve a geocoding service in a simple web application.</li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Developers who want to execute the code, should refer to the developer manual:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual">Developer Manual</a> aims at helping developers to execute the code, understand the structure and contribute to the project.</li>
+</ul><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Installing the CLI" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray-300 md:nx-text-lg ltr:nx-pr-4 rtl:nx-pl-4" href [...]
\ No newline at end of file
diff --git a/documentation/examples/extrusion.html b/documentation/examples/extrusion.html
new file mode 100644
index 0000000..9884527
--- /dev/null
+++ b/documentation/examples/extrusion.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Extrusion of vector tiles from OSM data – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Extrusion of vector tiles from OSM data – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This example builds upon the <a href="https://www.baremaps.com/examples/openstreetmap/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">OpenStreetMap example<span class="nx-sr-only"> (opens in a new tab)</span></a> and shows how 3d
+buildings can be extruded with Maplibre. First, start by downloading the OSM data for London in the current directory.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To import London data in the database.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In the <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/extrusion/tileset.json" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">tileset.json<span class="nx-sr-only"> (opens in a new tab)</span></a>
+file, notice the SQL query associated with the building layer. Here, the number of levels stored in OSM is multiplied by
+3, which rawly corresponds to the height of a level in meters.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="sql" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black [...]
+<span class="line"><span style="color:var(--shiki-color-text)">       tags </span><span style="color:var(--shiki-token-keyword)">||</span><span style="color:var(--shiki-color-text)"> jsonb_build_object(</span><span style="color:var(--shiki-token-string-expression)">&#x27;building:height&#x27;</span><span style="color:var(--shiki-color-text)">, (</span><span style="color:var(--shiki-token-keyword)">CASE</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">                                                          </span><span style="color:var(--shiki-token-keyword)">WHEN</span><span style="color:var(--shiki-color-text)"> tags </span><span style="color:var(--shiki-token-keyword)">-&gt;&gt;</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;building:levels&#x27;</span><span style="color:var(--shiki-color-text)" [...]
+<span class="line"><span style="color:var(--shiki-color-text)">                                                              </span><span style="color:var(--shiki-token-keyword)">THEN</span><span style="color:var(--shiki-color-text)"> tags </span><span style="color:var(--shiki-token-keyword)">-&gt;&gt;</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;building:levels&#x27;</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">                                                          </span><span style="color:var(--shiki-token-keyword)">ELSE</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;1&#x27;</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-keyword)">END</span><span style="color:var(--shiki-color-text)">)::</span><span style="c [...]
+<span class="line"><span style="color:var(--shiki-color-text)">       geom</span></span>
+<span class="line"><span style="color:var(--shiki-token-keyword)">FROM</span><span style="color:var(--shiki-color-text)"> osm_ways</span></span>
+<span class="line"><span style="color:var(--shiki-token-keyword)">WHERE</span><span style="color:var(--shiki-color-text)"> tags ? </span><span style="color:var(--shiki-token-string-expression)">&#x27;building&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/ [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This property is then used in
+the <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/extrusion/style.json" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">style.json<span class="nx-sr-only"> (opens in a new tab)</span></a> file to
+extrude the buildings.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="json" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  ...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-keyword)">&quot;layers&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> [</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;id&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;building&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;type&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;fill-extrusion&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;source&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;baremaps&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;source-layer&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;building&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;paint&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">&quot;fill-extrusion-color&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;rgb(152, 174, 221)&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">&quot;fill-extrusion-height&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> [</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">          </span><span style="color:var(--shiki-token-string-expression)">&quot;get&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">          </span><span style="color:var(--shiki-token-string-expression)">&quot;building:height&quot;</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        ]</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">&quot;fill-extrusion-base&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">0</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        </span><span style="color:var(--shiki-token-keyword)">&quot;fill-extrusion-opacity&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">0.9</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      }</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    }</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  ]</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  ...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">}</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark:nx-border-white/10 dark:nx [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To preview this example, start the tile viewer. Here, the cache directive is
+a <a href="https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/2.2.2/com/github/benmanes/caffeine/cache/CaffeineSpec.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">caffeine specification<span class="nx-sr-only"> (opens in a new tab)</span></a>
+for a 100MB tile cache.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="shell" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-bla [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--database</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--tileset</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;tileset.json&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--style</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;style.json&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-trans [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Well done, a map of London with extruded buildings should now appear in your <a href="http://localhost:9000/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">browser<span class="nx-sr-only"> (opens in a new tab)</span></a>!</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0"><img alt="Tile viewer" loading="lazy" width="1392" height="887" decoding="async" data-nimg="1" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns=&#x27;http%3A//www.w3.org/2000/svg&#x27; viewBox=&#x27;0 0 8 5&#x27;%3E%3Cfilter id=&#x27;b&#x27; color-interpolation-filters=&#x27;sRGB&#x27;%3E%3CfeGaussianBlur stdDeviation [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to import OSM data in PostGIS with a workflow and then use the MVT specification to extrude the vector tiles into a 3d object.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Serve Vector Tiles from PostGIS" class="nx-flex nx-max-w-[50% [...]
\ No newline at end of file
diff --git a/documentation/examples/geoadmin.html b/documentation/examples/geoadmin.html
new file mode 100644
index 0000000..b641ad4
--- /dev/null
+++ b/documentation/examples/geoadmin.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Geoadmin Noise Exposure in Vector Tiles – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Geoadmin Noise Exposure in Vector Tiles – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The Federal Office for the Environment (FOEN) provides a GeoTiff describing the <a href="https://www.bafu.admin.ch/bafu/de/home/zustand/daten/geodaten/laerm--geodaten.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">traffic noise levels<span class="nx-sr-only"> (opens in a new tab)</span></a> in Switzerland.
+Download an uncompress the archive that contains the GeoTiff.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If needed, you can now reproject the geotiff in the desired projection before importing it in the database.
+Start by reprojecting the geotiff (EPSG:2056) from LV95 to WebMercator (EPSG:3857)</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  -s_srs epsg:2056 -t_srs epsg:3857 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -dstnodata 0 -of GTiff -co tiled=yes \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  StrassenLaerm_Tag_LV95.tif \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  StrassenLaerm_Tag_LV95-3857.tif</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">You can now import any GeoTiff DEM as contours in postgis.
+Here, the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-nln</code> argument name the table that contains the data,
+the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-a</code> argument name the column that contains the elevation,
+the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-i</code> argument specifies the interval in meters at which contours are generated.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  StrassenLaerm_Tag_LV95-3857.tif \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -f PostgreSQL \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  &quot;PG:host=localhost user=baremaps password=baremaps dbname=baremaps&quot; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  geoadmin_traffic_noise_day</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following index can now be created to improve performances.
+When available, a smoothing function such as <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">ST_ChaikinSmoothing</code> can be used to improve rendering.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="postgresql" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-b [...]
+<span class="line"><span style="color:var(--shiki-color-text)">CREATE INDEX CONCURRENTLY IF NOT EXISTS geoadmin_traffic_noise_day_gix ON geoadmin_traffic_noise_day USING SPGIST(wkb_geometry);</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-b [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To preview and edit the map in the browser, run the tile server with the following command:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--database</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--config</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;tileset.json&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--style</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;style.json&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-trans [...]
\ No newline at end of file
diff --git a/documentation/examples/geocoding.html b/documentation/examples/geocoding.html
new file mode 100644
index 0000000..3da47ac
--- /dev/null
+++ b/documentation/examples/geocoding.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Create a geocoding web service – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Create a geocoding web service – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we demonstrate how to create a geocoding index and then serve it in a simple web application.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Dataset<span class="nx-absolute -nx-mt-20" id="dataset"></span><a href="#dataset" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The data we will be using comes from <a href="https://geonames.com" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Geonames<span class="nx-sr-only"> (opens in a new tab)</span></a>.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Generate the index<span class="nx-absolute -nx-mt-20" id="generate-the-index"></span><a href="#generate-the-index" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/geocoding/workflow.js" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">workflow<span class="nx-sr-only"> (opens in a new tab)</span></a> will download the Geonames data, decompress it, and finally build the index.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Serve the data<span class="nx-absolute -nx-mt-20" id="serve-the-data"></span><a href="#serve-the-data" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following command will serve the Geonames index over HTTP in a simple web application.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Go to <a href="http://localhost:9000/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">http://localhost:9000/<span class="nx-sr-only"> (opens in a new tab)</span></a> to see it in action.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to create a Geocoding index and serve it in a simple web application.
+This will be very useful in a map application to find places quickly by writing an address in a prompt.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Create an IP to location web service" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-co [...]
\ No newline at end of file
diff --git a/documentation/examples/import-contour-into-postgis.html b/documentation/examples/import-contour-into-postgis.html
new file mode 100644
index 0000000..f7892e8
--- /dev/null
+++ b/documentation/examples/import-contour-into-postgis.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Contour Lines in Vector Tiles – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Contour Lines in Vector Tiles – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Contour lines are a key element in topographic maps, as they allow us to
+visualize the elevation of an area. In this tutorial, we will show you how
+to create contour lines from a digital elevation model (DEM) and display
+them using vector tiles.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Prerequisites<span class="nx-absolute -nx-mt-20" id="prerequisites"></span><a href="#prerequisites" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To follow this tutorial, you will need to have <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">gdal</code> installed on your
+system. If you don&#x27;t have it already, you can install it by running the
+following command:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Reprojecting the GeoTiff<span class="nx-absolute -nx-mt-20" id="reprojecting-the-geotiff"></span><a href="#reprojecting-the-geotiff" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">We will be using the <a href="https://asterweb.jpl.nasa.gov/gdem.asp" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">ASTER<span class="nx-sr-only"> (opens in a new tab)</span></a> dataset
+for this example. The geotiff file provided in this tutorial is already in
+the desired projection (WebMercator), but in case you want to use a different
+geotiff file, you can use the gdalwarp command to reproject it. Here&#x27;s an
+example of how to do it:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  -s_srs epsg:4326 -t_srs epsg:3857 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -dstnodata 0 -of GTiff -co tiled=yes \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  liecthenstein-aster-dem-v2.tif \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  liecthenstein-aster-dem-v2-3857.tif</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-30 [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Generating the Contour Lines<span class="nx-absolute -nx-mt-20" id="generating-the-contour-lines"></span><a href="#generating-the-contour-lines" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Now that we have the GeoTiff in the desired projection,
+we can use the gdal_contour command to generate the contour lines.
+The <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-a</code> argument specifies the column that contains the elevation data,
+the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-i</code> argument specifies the interval at which contours
+should be generated (in this case, we are using 10 meters),
+and the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">-nln</code> argument names the table that will contain the data.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  -a elevation -nln aster_dem -i 10 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -f PostgreSQL \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  liecthenstein-aster-dem-v2-3857.tif &quot;PG:host=localhost user=baremaps password=baremaps dbname=baremaps&quot;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-tex [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Improving Performance with Indexes<span class="nx-absolute -nx-mt-20" id="improving-performance-with-indexes"></span><a href="#improving-performance-with-indexes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To improve the performance of the contour lines,
+we can add some indexes to the database.
+Here&#x27;s an example of how to create a <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">SPGIST</code> index:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="postgresql" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-b [...]
+<span class="line"><span style="color:var(--shiki-color-text)">CREATE INDEX IF NOT EXISTS aster_dem_gix ON aster_dem USING SPGIST(wkb_geometry);</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900  [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Displaying the Contour Lines<span class="nx-absolute -nx-mt-20" id="displaying-the-contour-lines"></span><a href="#displaying-the-contour-lines" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Finally, we can use Baremaps to display the contour lines in a web browser.
+To do this, run the following command:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="bash" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--database</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--tileset</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;tileset.json&#x27;</span><span style="color:var(--shiki-color-text)"> \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-string)">--style</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&#x27;style.json&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-trans [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This will start the tile server and automatically reload the configuration
+files when you make changes. You can then preview the map in your
+web browser.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Optional: Smoothing the Contour Lines<span class="nx-absolute -nx-mt-20" id="optional-smoothing-the-contour-lines"></span><a href="#optional-smoothing-the-contour-lines" class="subheading-anchor" aria-label="Permalink for this sect [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you want to improve the rendering of the contour lines, you can use
+a smoothing function like ST_ChaikinSmoothing. This function takes
+a geometry as input and returns a smoothed version of that geometry.
+Here&#x27;s an example of how you could use it:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="postgresql" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-b [...]
+<span class="line"><span style="color:var(--shiki-color-text)">SET wkb_geometry = ST_ChaikinSmoothing(wkb_geometry, 0.1)</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 d [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Keep in mind that this step is optional and might not be necessary depending
+on the quality of your input data. You can experiment with different
+smoothing parameters to find the best balance between smoothness and
+preservation of original features.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">That&#x27;s it! You now know how to generate and display contour lines from
+a digital elevation model using vector tiles. Happy mapping!</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Import Natural Earth data into PostGIS" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-tex [...]
\ No newline at end of file
diff --git a/documentation/examples/import-naturalearth-into-postgis.html b/documentation/examples/import-naturalearth-into-postgis.html
new file mode 100644
index 0000000..45ffba7
--- /dev/null
+++ b/documentation/examples/import-naturalearth-into-postgis.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Import Natural Earth data into PostGIS – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Import Natural Earth data into PostGIS – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we&#x27;ll learn how to use Baremaps to import Natural Earth data in a PostGIS database.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Notice that the following steps assume that the Apache Baremaps CLI and PostGIS are <a href="https://www.baremaps.com/getting-started/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">installed<span class="nx-sr-only"> (opens in a new tab)</span></a>.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Dataset<span class="nx-absolute -nx-mt-20" id="dataset"></span><a href="#dataset" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0"><a href="https://www.naturalearthdata.com/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Natural Earth<span class="nx-sr-only"> (opens in a new tab)</span></a> is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following workflow will download the Natural Earth data, decompress it, and finally import it in the database.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Working with shapefiles (Optional)<span class="nx-absolute -nx-mt-20" id="working-with-shapefiles-optional"></span><a href="#working-with-shapefiles-optional" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The NaturalEarth dataset is also distributed in the <a href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">shapefile format<span class="nx-sr-only"> (opens in a new tab)</span></a>.
+As demonstrated in the following command, shapefiles can easily be imported in postgis with <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">ogr2ogr</code>.
+Here, notice that the data is reprojected in WebMercator (EPSG:3857) to improve performance at query time.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  -f &quot;PostgreSQL&quot; &quot;PG:host=localhost user=baremaps dbname=baremaps password=baremaps&quot; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  &quot;ne_10m_admin_0_countries.shp&quot; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -lco GEOMETRY_NAME=geom \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -lco FID=gid \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -lco PRECISION=no \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -nlt PROMOTE_TO_MULTI \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -nln ne_10m_admin_0_countries \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -s_srs EPSG:4326 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -t_srs EPSG:3857 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --config OGR_ENABLE_PARTIAL_REPROJECTION TRUE \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -overwrite</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark:nx-border-white [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to import Natural Earth data in PostGIS.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Now that you have inserted the data into the PostGIS database, you can use follow the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/serve-vector-tiles">Serve Vector Tiles from PostGIS</a> example to serve
+your PostGIS data directly as Vector Tiles in a web application with live reload capabilities.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Import OpenStreetMap into PostGIS" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-b [...]
\ No newline at end of file
diff --git a/documentation/examples/import-osm-into-postgis.html b/documentation/examples/import-osm-into-postgis.html
new file mode 100644
index 0000000..59ce3d2
--- /dev/null
+++ b/documentation/examples/import-osm-into-postgis.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Import OSM data into PostGIS – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Import OSM data into PostGIS – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we&#x27;ll learn how to use Baremaps to import contour lines data in a PostGIS database.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Notice that the following steps assume that the Apache Baremaps CLI and PostGIS are <a href="https://www.baremaps.com/getting-started/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">installed<span class="nx-sr-only"> (opens in a new tab)</span></a>.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Also, if you are in a hurry, consider skipping the &quot;Under the Hood&quot; sections.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Dataset<span class="nx-absolute -nx-mt-20" id="dataset"></span><a href="#dataset" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">OpenStreetMap (OSM) is a free and editable map of the world.
+It is maintained by a community of passionate volunteers in a way which is similar to Wikipedia.
+Every week, OpenStreetMap publishes a <a href="https://planet.openstreetmap.org/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">full dump<span class="nx-sr-only"> (opens in a new tab)</span></a> of its data in two flavours: a large XML file of about 90GB and a more compact binary file of about 50GB in the  <a href="https://developers.google.com/protocol-buffers" target="_blank" rel="noreferrer" class= [...]
+As processing such large files can take several hours, <a href="http://www.geofabrik.de/data/download.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Geofabrik<span class="nx-sr-only"> (opens in a new tab)</span></a> regularly publishes smaller extracts of OSM for specific regions.
+In this example we will use a tiny extract of OSM for <a href="https://en.wikipedia.org/wiki/Liechtenstein" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Liechtenstein<span class="nx-sr-only"> (opens in a new tab)</span></a>, which is suitable for fast experiments.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Importing OpenStreetMap Data<span class="nx-absolute -nx-mt-20" id="importing-openstreetmap-data"></span><a href="#importing-openstreetmap-data" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">A workflow is a directed acyclic graph of steps executed by Baremaps.
+To download and import the sample OSM data in Postgres, execute the following <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/openstreetmap/workflow.json" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">workflow<span class="nx-sr-only"> (opens in a new tab)</span></a>.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Depending on the size of the OpenStreetMap file, the execution of this command may take some time.
+Eventually, the output produced by the command should look as follows.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:47:41.208 [pool-2-thread-1] DownloadUrl - Downloading https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf to liechtenstein-latest.osm.pbf</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:14.496 [pool-2-thread-1] DownloadUrl - Finished downloading https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf to liechtenstein-latest.osm.pbf</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:14.497 [pool-2-thread-2] ImportOpenStreetMap - Importing liechtenstein-latest.osm.pbf into jdbc:postgresql://localhost:5432/baremaps?&amp;user=baremaps&amp;password=baremaps</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:14.504 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Starting...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:14.669 [pool-2-thread-2] HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@13d835e3</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:14.671 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Start completed.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.172 [pool-2-thread-2] ImportOpenStreetMap - Finished importing liechtenstein-latest.osm.pbf into jdbc:postgresql://localhost:5432/baremaps?&amp;user=baremaps&amp;password=baremaps</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.172 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Shutdown initiated...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.177 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Shutdown completed.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.178 [pool-2-thread-3] ExecuteSqlFile - Executing indexes.sql into jdbc:postgresql://localhost:5432/baremaps?&amp;user=baremaps&amp;password=baremaps</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.179 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Starting...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.213 [pool-2-thread-3] HikariPool - HikariPool-2 - Added connection org.postgresql.jdbc.PgConnection@25c4ab89</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:19.213 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Start completed.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:21.365 [pool-2-thread-3] ExecuteSqlFile - Finished executing indexes.sql into jdbc:postgresql://localhost:5432/baremaps?&amp;user=baremaps&amp;password=baremaps</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:21.365 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Shutdown initiated...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:21.367 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Shutdown completed.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">[INFO ] 2022-07-26 09:48:21.368 [main] Workflow - Finished executing workflow workflow.json</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text [...]
+<h3 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl">Under the Hood (Optional)<span class="nx-absolute -nx-mt-20" id="under-the-hood-optional"></span><a href="#under-the-hood-optional" class="subheading-anchor" aria-label="Permalink for this section"></a></h3>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">What can we learn from this output?
+First, we notice that Baremaps uses a connection pool to parallelize the import procedure.
+Then it imports the OSM data, populating the tables previously created.
+In our case, the input is a file provided by Geofabrik.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">OSM&#x27;s <a href="https://wiki.openstreetmap.org/wiki/Elements" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">conceptual model<span class="nx-sr-only"> (opens in a new tab)</span></a> builds upon the notions of nodes, ways and relations.
+In this normalized data model, a line (or way) is formed by a sequence of points (nodes) referenced by their id.
+In order to save denormalized geometries in PostGIS (e.g. linestring, polygon, multi-polygon, etc.), Baremaps creates a cache for nodes, ways and relations.
+<a href="https://symas.com/lmdb/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">LMDB<span class="nx-sr-only"> (opens in a new tab)</span></a> is used under the hood to achieve great performance.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">After the creation of the cache, Baremaps can populate the database with geometries.
+The geometries are stored in three tables named after the OSM conceptual model: <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">osm_nodes</code>, <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx [...]
+In order to improve performances at query time, Baremaps also creates indexes for the tags and the geometries.
+The following Figure displays the schema of the PostGIS database created by Baremaps.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0"><img alt="PostGIS database" loading="lazy" width="1121" height="342" decoding="async" data-nimg="1" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns=&#x27;http%3A//www.w3.org/2000/svg&#x27; viewBox=&#x27;0 0 8 2&#x27;%3E%3Cfilter id=&#x27;b&#x27; color-interpolation-filters=&#x27;sRGB&#x27;%3E%3CfeGaussianBlur stdDevi [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to import OpenStreetMap data in PostGIS.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Now that you have inserted the OSM data into the PostGIS database, you can use follow the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/serve-vector-tiles">Serve Vector Tiles from PostGIS</a> example to serve
+your PostGIS data directly as Vector Tiles in a web application with live reload capabilities.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Examples" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx [...]
\ No newline at end of file
diff --git a/documentation/examples/ip-to-location.html b/documentation/examples/ip-to-location.html
new file mode 100644
index 0000000..968b28f
--- /dev/null
+++ b/documentation/examples/ip-to-location.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Create an IP to location web service – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Create an IP to location web service – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we demonstrate how to create an IP to location index and then serve it in a simple web application.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Dataset<span class="nx-absolute -nx-mt-20" id="dataset"></span><a href="#dataset" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The data used to create an IP to location index is publicly available from the 5 <a href="https://whatismyipaddress.com/rir" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Regional Internet Registries (RIRs)<span class="nx-sr-only"> (opens in a new tab)</span></a></p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Here is the list of the 5 RIRs.</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a href="https://www.arin.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">ARIN<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.lacnic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">LACNIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://afrinic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">AFRINIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.ripe.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">RIPE NCC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://www.apnic.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">APNIC<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">These Regional Internet Registries contain records that link IP address ranges to organisations along with some metadata.
+It is not always possible to extract meaningful data from these registries because they are not normalised.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Generate the index<span class="nx-absolute -nx-mt-20" id="generate-the-index"></span><a href="#generate-the-index" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The workflow executed in the following command contains multiple steps.</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2">Download and decompress the data from the RIRs</li>
+<li class="nx-my-2">Download and create a Geocoding index (see the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/geocoding">Geocoding</a> example)</li>
+<li class="nx-my-2">Iterate over every entry in the registries to extract the IP address ranges and the associated metadata to query the Geocoding index and extract a latitude and a longitude.</li>
+</ul>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Serve the data<span class="nx-absolute -nx-mt-20" id="serve-the-data"></span><a href="#serve-the-data" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following command will serve the Geonames index over HTTP in a simple web application.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Go to <a href="http://localhost:9000/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">http://localhost:9000/<span class="nx-sr-only"> (opens in a new tab)</span></a> to see it in action.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to create an IP to location index and serve it in a simple web application.
+IP to location has many uses, one of which is to locate users that connect to a website to generate statistics.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Extrusion of vector tiles from OSM data" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-tr [...]
\ No newline at end of file
diff --git a/documentation/examples/serve-vector-tiles.html b/documentation/examples/serve-vector-tiles.html
new file mode 100644
index 0000000..0bf10cd
--- /dev/null
+++ b/documentation/examples/serve-vector-tiles.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Serve Vector Tiles from PostGIS – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Serve Vector Tiles from PostGIS – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we&#x27;ll learn how to create vector tiles from the data imported into PostGIS.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you have not yet inserted data into your PostGIS database, please follow one of these three guides:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a href="https://baremaps.apache.org/examples/import-osm-into-postgis/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Import OSM data into PostGIS<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://baremaps.apache.org/examples/openstreetmap/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Import Natural Earth data into PostGIS<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://baremaps.apache.org/examples/openstreetmap/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">Import Contour lines from the ASTER dataset into PostGIS<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you are in a hurry, consider skipping the &quot;Under the Hood&quot; sections.</p>
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Creating Vector Tiles<span class="nx-absolute -nx-mt-20" id="creating-vector-tiles"></span><a href="#creating-vector-tiles" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In order to create vector tiles, Apache Baremaps requires JSON configuration files. The two configuration files used are:</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">tileset.json</code> - Defines all the information needed to retrieve the correct vector tile layers at different zoom levels.</li>
+<li class="nx-my-2"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">style.json</code> - Defines the style of the different layers.</li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">For convenience, we have prepared a <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">tileset.json</code> and a <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9e [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Each of these files are available in the main repository of Apache Baremaps inside the examples&#x27; folder.</p>
+<ul class="nx-mt-6 nx-list-disc first:nx-mt-0 ltr:nx-ml-6 rtl:nx-mr-6">
+<li class="nx-my-2"><a href="https://github.com/apache/incubator-baremaps/blob/main/examples/openstreetmap/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">For OpenStreetMap data<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://github.com/apache/incubator-baremaps/blob/main/examples/contour/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">For contour lines data<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+<li class="nx-my-2"><a href="https://github.com/apache/incubator-baremaps/blob/main/examples/naturalearth/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">For Natural Earth data<span class="nx-sr-only"> (opens in a new tab)</span></a></li>
+</ul>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">First <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">cd</code> into one of the example directories that corresponds to the data you inserted inside your PostGIS database.
+Then let&#x27;s preview and edit the map with the sample configuration files by executing the following command in a terminal.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  --database &#x27;jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps&#x27; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --tileset &#x27;tileset.json&#x27; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --style &#x27;style.json&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10  [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Well done, a local development server should have started.
+You can now visualize the vector tiles in your browser (<a href="http://localhost:9000/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">http://localhost:9000/<span class="nx-sr-only"> (opens in a new tab)</span></a>)!
+Notice that the changes in the configuration files are automatically reloaded by the browser.</p>
+<h3 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-8 nx-text-2xl">Under the Hood (Optional)<span class="nx-absolute -nx-mt-20" id="under-the-hood-optional"></span><a href="#under-the-hood-optional" class="subheading-anchor" aria-label="Permalink for this section"></a></h3>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Baremaps extensively rely on the fantastic <a href="https://postgis.net/docs/ST_AsMVT.html" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">ST_AsMVT<span class="nx-sr-only"> (opens in a new tab)</span></a> functions released by the PostGIS team to produce <a href="https://docs.mapbox.com/vector-tiles/specification/" target="_blank" rel="noreferrer" class="nx [...]
+However, in the following excerpt of the json configuration file, none of these concepts appear in the SQL queries.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="json" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  ...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  </span><span style="color:var(--shiki-token-keyword)">&quot;vector_layers&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> [</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;id&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;aeroway&quot;</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      </span><span style="color:var(--shiki-token-keyword)">&quot;queries&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> [</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        {</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">          </span><span style="color:var(--shiki-token-keyword)">&quot;minzoom&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">12</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">          </span><span style="color:var(--shiki-token-keyword)">&quot;maxzoom&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-constant)">20</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">          </span><span style="color:var(--shiki-token-keyword)">&quot;sql&quot;</span><span style="color:var(--shiki-token-punctuation)">:</span><span style="color:var(--shiki-color-text)"> </span><span style="color:var(--shiki-token-string-expression)">&quot;SELECT id, tags, geom FROM osm_nodes WHERE tags ? &#x27;aeroway&#x27;&quot;</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">        ...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">      ]</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">    }</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  ]</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  ...</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">}</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark:nx-border-white/10 dark:nx [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Why don&#x27;t we see these function calls in the configuration?
+Baremaps wants you to focus on the content of the tiles, and relieves you from the burden of writing complex SQL queries.
+In fact, at runtime, Baremaps merges all the queries of the configuration file into a single optimized query that produces vector tiles.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In production, vector tiles are rarely served dynamically. Why is that so?
+First, a large blob store is much cheaper than a relational database to <a href="https://wiki.c2.com/?StorageIsCheap" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">operate<span class="nx-sr-only"> (opens in a new tab)</span></a>.
+Second, content delivery networks (CDNs) greatly improve web performances by caching static content close to the end user.
+Baremaps has been conceived with these lasting trends in mind.
+The following command produces a local directory containing precomputed static tiles.
+These tiles can be served with Apache, Nginx, or Caddy, but also copied in a blob store behind a content delivery network, such as Cloudflare, Stackpath, or Fastly.</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  --database &#x27;jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps&#x27; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --tileset &#x27;tileset.json&#x27; \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --repository &#x27;tiles/&#x27;</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 [...]
+<h2 class="nx-font-semibold nx-tracking-tight nx-text-slate-900 dark:nx-text-slate-100 nx-mt-10 nx-border-b nx-pb-1 nx-text-3xl nx-border-neutral-200/70 contrast-more:nx-border-neutral-400 dark:nx-border-primary-100/10 contrast-more:dark:nx-border-neutral-400">Conclusion<span class="nx-absolute -nx-mt-20" id="conclusion"></span><a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In this tutorial, we learnt how to create vector tiles from PostGIS data with the help of Apache Baremaps.
+Prior to the release of Apache Baremaps, we believe that creating a pipeline for publishing vector tiles from OpenStreetMap data was a rather time-consuming task.
+As shown in this demonstration, Apache Baremaps tries to bring back the fun to creating a web mapping pipeline!</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Contour Lines in Vector Tiles" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-c [...]
\ No newline at end of file
diff --git a/documentation/getting-started.html b/documentation/getting-started.html
new file mode 100644
index 0000000..8320aa1
--- /dev/null
+++ b/documentation/getting-started.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Getting Started – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Getting Started – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This section will get you started with the setup of Apache Baremaps to execute the examples. If you plan on running the
+code directly, or using Apache Baremaps as a library, you should refer to the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/developer-manual">Developer Manual</a>.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">After installing the necessary components, the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples">Examples</a> explain how to use Apache Baremaps to create a vector tileset from an OpenStreetMap extract, create an IP to location web service, and much more.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Now head into <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/getting-started/installing-the-cli">Installing the CLI</a> to see how to set up the Apache Baremaps command line interface on your
+own machine to execute the examples.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx-border-t nx-pt-8 dark:nx-border-neutral-800 contrast-more:nx-border-neutral-400 dark:contrast-more:nx-border-neutral-400 print:nx-hidden"><a title="Introduction" class="nx-flex nx-max-w-[50%] nx-items-center nx-gap-1 nx-py-4 nx-text-base nx-font-medium nx-text-gray-600 nx-transition-colors [word-break:break-word] hover:nx-text-primary-600 dark:nx-text-gray-300 md:nx-text-lg  [...]
\ No newline at end of file
diff --git a/documentation/getting-started/installing-postgis.html b/documentation/getting-started/installing-postgis.html
new file mode 100644
index 0000000..22e2e68
--- /dev/null
+++ b/documentation/getting-started/installing-postgis.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Installing PostGIS – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Installing PostGIS – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">This step is not required if you plan to execute the Geocoding or IP to location examples.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">For the insertion and generation of Vector tiles, you need to set up a <a href="https://postgis.net/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">PostGIS<span class="nx-sr-only"> (opens in a new tab)</span></a> database.
+This database will host all the data required to generate the vector tiles.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">The following docker image will allow you to jump start this installation:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">  --name baremaps \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  --publish 5432:5432 \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -e POSTGRES_DB=baremaps \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -e POSTGRES_USER=baremaps \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -e POSTGRES_PASSWORD=baremaps \</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  -d postgis/postgis:latest</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark: [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">You can then stop and start the container with the following commands:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">docker start baremaps</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300/10 dark:nx-bor [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">From there you can go to the <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples">Examples</a> section. The <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/openstreetmap">Import OSM data into PostGIS</a> example is the first step to produce custom high resolution vector tiles.</p><div class="nx-mt-16"></d [...]
\ No newline at end of file
diff --git a/documentation/getting-started/installing-the-cli.html b/documentation/getting-started/installing-the-cli.html
new file mode 100644
index 0000000..fc13b09
--- /dev/null
+++ b/documentation/getting-started/installing-the-cli.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Installing the CLI – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Installing the CLI – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">In order to run Apache Baremaps, you first need to install Java 17 or a later version.
+<a href="https://sdkman.io/" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">SDKMAN<span class="nx-sr-only"> (opens in a new tab)</span></a> provides a convenient Command Line Interface (CLI) to install and upgrade Java.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">To install Apache Baremaps, download and unzip the latest <a href="https://github.com/apache/incubator-baremaps/releases/latest" target="_blank" rel="noreferrer" class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]">release<span class="nx-sr-only"> (opens in a new tab)</span></a>.
+Then, add the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">/bin</code> folder to your <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">PATH</c [...]
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">unzip baremaps.zip</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">export PATH=$PATH:`pwd`/baremaps/bin</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p-1.5 dark:nx-bg-primary-300 [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">Calling the <code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-black nx-break-words nx-rounded-md nx-border nx-py-0.5 nx-px-[.25em] nx-text-[.9em] dark:nx-border-white/10 dark:nx-bg-white/10  " dir="ltr">baremaps</code> command should now result in an output similar to the following:</p>
+<div class="nextra-code-block nx-relative nx-mt-6 first:nx-mt-0"><pre class="nx-bg-primary-700/5 nx-mb-4 nx-overflow-x-auto nx-rounded-xl nx-font-medium nx-subpixel-antialiased dark:nx-bg-primary-300/10 nx-text-[.9em] contrast-more:nx-border contrast-more:nx-border-primary-900/20 contrast-more:nx-contrast-150 contrast-more:dark:nx-border-primary-100/40 nx-py-4 " data-language="text" data-theme="default"><code class="nx-border-black nx-border-opacity-[0.04] nx-bg-opacity-[0.03] nx-bg-blac [...]
+<span class="line"><span style="color:var(--shiki-color-text)">A toolkit for producing vector tiles.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">Commands:</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  import  Import OpenStreetMap data in the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  update  Update OpenStreetMap data in the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  export  Export vector tiles from the Postgresql database.</span></span>
+<span class="line"><span style="color:var(--shiki-color-text)">  serve   Serve vector tiles from the the Postgresql database.</span></span></code></pre><div class="nx-opacity-0 nx-transition [div:hover&gt;&amp;]:nx-opacity-100 focus-within:nx-opacity-100 nx-flex nx-gap-1 nx-absolute nx-m-[11px] nx-right-0 nx-top-0"><button class="nextra-button nx-transition-all active:nx-opacity-50 nx-bg-primary-700/5 nx-border nx-border-black/5 nx-text-gray-600 hover:nx-text-gray-900 nx-rounded-md nx-p- [...]
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">From there, head into <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/getting-started/installing-postgis">Installing PostGIS</a> if you plan to work with vector tiles.</p>
+<p class="nx-mt-6 nx-leading-7 first:nx-mt-0">If you want to work on <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/geocoding">Geocoding</a> or <a class="nx-text-primary-600 nx-underline nx-decoration-from-font [text-underline-position:from-font]" href="/examples/ip-to-location">IP to location</a>, head directly into the related examples.</p><div class="nx-mt-16"></div><div class="nx-mb-8 nx-flex nx-items-center nx- [...]
\ No newline at end of file
diff --git a/examples/contour/index.md b/examples/contour/index.md
deleted file mode 100644
index a1fbba8..0000000
--- a/examples/contour/index.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-layout: default
-title: Contour Lines in Vector Tiles
----
-
-# Contour Lines in Vector Tiles
-
-This example demonstrates how to produce contours from a digital elevation model (DEM) and how to display them with vector tiles.
-
-The approach consists in using the [`gdal_contour`](https://gdal.org/programs/gdal_contour.html) command.
-Therefore, start by installing `gdal`:
-
-```bash
-sudo apt-get install gdal-bin
-```
-
-The geotiff present in this directory comes from the [ASTER](https://asterweb.jpl.nasa.gov/gdem.asp) dataset.
-We used the following command to reproject the geotiff in the desired projection (e.g. WebMercator) before importing it in the database.
-
-```
-gdalwarp -rc \
-  -s_srs epsg:4326 -t_srs epsg:3857 \
-  -dstnodata 0 -of GTiff -co tiled=yes \
-  liecthenstein-aster-dem-v2.tif \
-  liecthenstein-aster-dem-v2-3857.tif
-```
-
-You can now import any GeoTiff DEM as contours in postgis. 
-In the following command, the `-nln` argument name the table that contains the data, 
-the `-a` argument name the column that contains the elevation, 
-the `-i` argument specifies the interval in meters at which contours are generated. 
-
-```
-gdal_contour \
-  -a elevation -nln aster_dem -i 10 \
-  -f PostgreSQL \
-  liecthenstein-aster-dem-v2-3857.tif "PG:host=localhost user=baremaps password=baremaps dbname=baremaps"
-```
-
-Some index can now be added to the database to improve performances. 
-When available, a smoothing function such as `ST_ChaikinSmoothing` can be used to improve rendering of the contours. 
-
-```postgresql
-DROP INDEX IF EXISTS aster_dem_gix;
-CREATE INDEX CONCURRENTLY IF NOT EXISTS aster_dem_gix ON aster_dem USING SPGIST(wkb_geometry);
-```
-
-Finally, to preview the map in the browser, run the tile server with the following command. 
-Your changes to the configuration files will be automatically reloaded by the browser.
-
-```bash
-baremaps map dev \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --tileset 'tileset.json' \
-  --style 'style.json'
-```
diff --git a/examples/contour/liecthenstein-aster-dem-v2-3857.tif b/examples/contour/liecthenstein-aster-dem-v2-3857.tif
deleted file mode 100644
index 93f78b7..0000000
Binary files a/examples/contour/liecthenstein-aster-dem-v2-3857.tif and /dev/null differ
diff --git a/examples/contour/liecthenstein-aster-dem-v2.tif b/examples/contour/liecthenstein-aster-dem-v2.tif
deleted file mode 100644
index e9e705c..0000000
Binary files a/examples/contour/liecthenstein-aster-dem-v2.tif and /dev/null differ
diff --git a/examples/contour/style.json b/examples/contour/style.json
deleted file mode 100644
index 1604741..0000000
--- a/examples/contour/style.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers" : [ {
-    "id" : "background",
-    "type" : "background",
-    "maxzoom" : 24,
-    "paint" : {
-      "background-color" : "rgba(255, 255, 255, 1)"
-    }
-  }, {
-    "id" : "aster_dem",
-    "type" : "line",
-    "source" : "baremaps",
-    "source-layer" : "aster_dem",
-    "layout" : {
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-color" : "rgba(181, 169, 152, 1)"
-    }
-  } ],
-  "center" : [ 9.5554, 47.166 ],
-  "zoom" : 14
-}
\ No newline at end of file
diff --git a/examples/contour/tileset.json b/examples/contour/tileset.json
deleted file mode 100644
index 7999eb5..0000000
--- a/examples/contour/tileset.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "tilejson": "2.1.0",
-  "center": [
-    9.5554,
-    47.166,
-    14.0
-  ],
-  "bounds": [
-    9.471078,
-    47.04774,
-    9.636217,
-    47.27128
-  ],
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt"
-  ],
-  "vector_layers": [
-    {
-      "id": "aster_dem",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 20,
-          "sql": "SELECT ogc_fid, jsonb_build_object('elevation', elevation::text), wkb_geometry FROM aster_dem"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/extrusion/index.md b/examples/extrusion/index.md
deleted file mode 100644
index 2993161..0000000
--- a/examples/extrusion/index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-layout: default 
-title: Extrusion Example
----
-
-# Extrusion Example
-
-This example builds upon the [OpenStreetMap example](https://www.baremaps.com/examples/openstreetmap/) and shows how 3d
-buildings can be extruded with Maplibre. First, start by downloading the OSM data for London in the current directory.
-
-To import London data in the database.
-
-```
-baremaps workflow execute --file workflow.json
-```
-
-In the [tileset.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/extrusion/tileset.json)
-file, notice the SQL query associated with the building layer. Here, the number of levels stored in OSM is multiplied by
-3, which rawly corresponds to the height of a level in meters.
-
-```sql
-SELECT id,
-       tags || jsonb_build_object('building:height', (CASE
-                                                          WHEN tags ->> 'building:levels' ~ '^[0-9\\.]+$'
-                                                              THEN tags ->> 'building:levels'
-                                                          ELSE '1' END)::real * 3),
-       geom
-FROM osm_ways
-WHERE tags ? 'building'
-```
-
-This property is then used in
-the [style.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/extrusion/style.json) file to
-extrude the buildings.
-
-```json
-{
-  ...
-  "layers": [
-    {
-      "id": "building",
-      "type": "fill-extrusion",
-      "source": "baremaps",
-      "source-layer": "building",
-      "paint": {
-        "fill-extrusion-color": "rgb(152, 174, 221)",
-        "fill-extrusion-height": [
-          "get",
-          "building:height"
-        ],
-        "fill-extrusion-base": 0,
-        "fill-extrusion-opacity": 0.9
-      }
-    }
-  ],
-  ...
-}
-```
-
-To preview this example, start the tile viewer. Here, the cache directive is
-a [caffeine specification](https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/2.2.2/com/github/benmanes/caffeine/cache/CaffeineSpec.html)
-for a 100MB tile cache.
-
-```shell
-baremaps map dev \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --tileset 'tileset.json' \
-  --style 'style.json'
-```
-
-Well done, a map of London with extruded buildings should now appear in your [browser](http://localhost:9000/)!
-
-![Tile viewer](screenshot.png)
-
diff --git a/examples/extrusion/indexes.sql b/examples/extrusion/indexes.sql
deleted file mode 100644
index 6990e7b..0000000
--- a/examples/extrusion/indexes.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_ways_gin ON osm_ways USING gin (nodes);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_relations_gin ON osm_relations USING gin (member_refs);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_nodes_gix ON osm_nodes USING GIST (geom);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_ways_gix ON osm_ways USING GIST (geom);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_relations_gix ON osm_relations USING GIST (geom);
\ No newline at end of file
diff --git a/examples/extrusion/style.json b/examples/extrusion/style.json
deleted file mode 100644
index 2189120..0000000
--- a/examples/extrusion/style.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "version": 8,
-  "center": [
-    0.1278,
-    51.5074
-  ],
-  "zoom": 14,
-  "sources": {
-    "baremaps": {
-      "type": "vector",
-      "url": "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers": [
-    {
-      "id": "building",
-      "type": "fill-extrusion",
-      "source": "baremaps",
-      "source-layer": "building",
-      "paint": {
-        "fill-extrusion-color": "rgb(152, 174, 221)",
-        "fill-extrusion-height": [
-          "get",
-          "building:height"
-        ],
-        "fill-extrusion-base": 0,
-        "fill-extrusion-opacity": 0.9
-      }
-    }
-  ]
-}
\ No newline at end of file
diff --git a/examples/extrusion/tileset.json b/examples/extrusion/tileset.json
deleted file mode 100644
index e5a4695..0000000
--- a/examples/extrusion/tileset.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "tilejson": "2.2.0",
-  "center": [
-    0.1278,
-    51.5074,
-    14.0
-  ],
-  "bounds": [
-    -0.511482,
-    51.28554,
-    0.335437,
-    51.69344
-  ],
-  "minzoom": 12.0,
-  "maxzoom": 14.0,
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt"
-  ],
-  "vector_layers": [
-    {
-      "id": "building",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags || jsonb_build_object('building:height', (CASE WHEN tags ->> 'building:levels' ~ '^[0-9\\\\.]+$' THEN tags ->> 'building:levels' ELSE '1' END)::real * 3), geom FROM osm_ways WHERE tags ? 'building'"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/extrusion/workflow.json b/examples/extrusion/workflow.json
deleted file mode 100644
index de11af5..0000000
--- a/examples/extrusion/workflow.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "steps": [
-    {
-      "id": "download",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": "https://download.geofabrik.de/europe/great-britain/england/greater-london-latest.osm.pbf",
-          "path": "greater-london-latest.osm.pbf"
-        }
-      ]
-    },
-    {
-      "id": "import",
-      "needs": [
-        "download"
-      ],
-      "tasks": [
-        {
-          "type": "ImportOpenStreetMap",
-          "file": "greater-london-latest.osm.pbf",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "databaseSrid": 3857
-        }
-      ]
-    },
-    {
-      "id": "index",
-      "needs": [
-        "import"
-      ],
-      "tasks": [
-        {
-          "type": "ExecuteSql",
-          "file": "indexes.sql",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/geoadmin/index.md b/examples/geoadmin/index.md
deleted file mode 100644
index c20f6b5..0000000
--- a/examples/geoadmin/index.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-layout: default
-title: Geoadmin Noise Exposure in Vector Tiles
----
-
-# Geoadmin noise exposure in vector tiles
-
-The Federal Office for the Environment (FOEN) provides a GeoTiff describing the [traffic noise levels](https://www.bafu.admin.ch/bafu/de/home/zustand/daten/geodaten/laerm--geodaten.html) in Switzerland.
-Download an uncompress the archive that contains the GeoTiff.
-
-If needed, you can now reproject the geotiff in the desired projection before importing it in the database.
-Start by reprojecting the geotiff (EPSG:2056) from LV95 to WebMercator (EPSG:3857)
-
-```
-gdalwarp -rc \
-  -s_srs epsg:2056 -t_srs epsg:3857 \
-  -dstnodata 0 -of GTiff -co tiled=yes \
-  StrassenLaerm_Tag_LV95.tif \
-  StrassenLaerm_Tag_LV95-3857.tif
-```
-
-You can now import any GeoTiff DEM as contours in postgis.
-Here, the `-nln` argument name the table that contains the data,
-the `-a` argument name the column that contains the elevation,
-the `-i` argument specifies the interval in meters at which contours are generated.
-
-```
-gdal_polygonize.py \
-  StrassenLaerm_Tag_LV95-3857.tif \
-  -f PostgreSQL \
-  "PG:host=localhost user=baremaps password=baremaps dbname=baremaps" \
-  geoadmin_traffic_noise_day
-```
-
-The following index can now be created to improve performances.
-When available, a smoothing function such as `ST_ChaikinSmoothing` can be used to improve rendering.
-
-```postgresql
-DROP INDEX IF EXISTS geoadmin_traffic_noise_day_gix;
-CREATE INDEX CONCURRENTLY IF NOT EXISTS geoadmin_traffic_noise_day_gix ON geoadmin_traffic_noise_day USING SPGIST(wkb_geometry);
-```
-
-To preview and edit the map in the browser, run the tile server with the following command:
-
-```bash
-baremaps map dev \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --config 'tileset.json' \
-  --style 'style.json'
-```
diff --git a/examples/geoadmin/style.json b/examples/geoadmin/style.json
deleted file mode 100644
index af13470..0000000
--- a/examples/geoadmin/style.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers" : [ {
-    "id" : "background",
-    "type" : "background",
-    "maxzoom" : 24,
-    "paint" : {
-      "background-color" : "rgba(255, 255, 255, 1)"
-    }
-  }, {
-    "id" : "geoadmin_traffic_noise_day",
-    "type" : "line",
-    "source" : "baremaps",
-    "source-layer" : "geoadmin_traffic_noise_day",
-    "layout" : {
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-color" : "rgba(181, 169, 152, 1)"
-    }
-  } ],
-  "center" : [ 9.5554, 47.166 ],
-  "zoom" : 14
-}
\ No newline at end of file
diff --git a/examples/geoadmin/tileset.json b/examples/geoadmin/tileset.json
deleted file mode 100644
index 167cff1..0000000
--- a/examples/geoadmin/tileset.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "tilejson": "2.1.0",
-  "center": [
-    6.5743,
-    46.5189,
-    14.0
-  ],
-  "bounds": [
-    9.471078,
-    47.04774,
-    9.636217,
-    47.27128
-  ],
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt"
-  ],
-  "vector_layers": [
-    {
-      "id": "geoadmin_traffic_noise_day",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 20,
-          "sql": "SELECT ogc_fid, ('{level:' || dn::text || '}') as tags, wkb_geometry as geom FROM geoadmin_traffic_noise_day"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/geoadmin/tileset.yaml b/examples/geoadmin/tileset.yaml
deleted file mode 100644
index b21d19c..0000000
--- a/examples/geoadmin/tileset.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-id: 'contour'
-center:
-  lon: 6.5743
-  lat: 46.5189
-  zoom: 14
-bounds:
-  minLon: 5.8358
-  minLat: 45.6591
-  maxLon: 10.9794
-  maxLat: 47.8700
-  minZoom: 10
-  maxZoom: 20
-layers:
-  - id: 'geoadmin_traffic_noise_day'
-    type: 'geometry'
-    queries:
-      - minZoom: 12
-        maxZoom: 20
-        sql: SELECT ogc_fid, ('{level:' || dn::text || '}') as tags, wkb_geometry as geom FROM geoadmin_traffic_noise_day
diff --git a/examples/index.md b/examples/index.md
deleted file mode 100644
index 771bd8f..0000000
--- a/examples/index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: default
-title: Examples
-permalink: /examples/
----
-
-# Examples
-
-Several examples illustrate how to import datasets in postgis in order to produce vector tiles:
-- The [OpenStreetMap](/examples/openstreetmap/) example is a good introduction to Baremaps, it shows how to produce high resolution vector tiles.
-- The [Extrusion](/examples/openstreetmap/) builds upon the OpenStreetMap example and shows how to extrude buildings.
-- The [NaturalEarth](/examples/naturalearth/) example shows how to produce low resolution vector tiles.
-- The [Contour](/examples/contour/) example shows how to produce contour lines from a digital elevation model.
-
-The [OpenStreetMap Vecto](/stylesheet/) repository shows how to build a more advanced configuration and stylesheet for Baremaps.
\ No newline at end of file
diff --git a/examples/naturalearth/index.md b/examples/naturalearth/index.md
deleted file mode 100644
index cd33cb5..0000000
--- a/examples/naturalearth/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-layout: default
-title: NaturalEarth Example
----
-
-# NaturalEarth Example
-
-[Natural Earth](https://www.naturalearthdata.com/) is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales.
-This example shows how to create vector tiles from the Natural Earth dataset.
-
-The first step consists in downloading the Natural Earth data, decompressing it, and importing it in the database. 
-The following workflow will allow you to achieve this result.
-
-```
-baremaps workflow execute --file workflow.json
-```
-
-To preview and edit the map in the browser, run the tile server with the following command:
-
-```
-baremaps map dev \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --tileset 'tileset.json' \
-  --style 'style.json'
-```
-
-## Working with shapefiles
-
-The NaturalEarth dataset is also distributed in the [shapefile format](https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip).
-As demonstrated in the following command, shapefiles can easily be imported in postgis with `ogr2ogr`.
-Here, notice that the data is reprojected in WebMercator (EPSG:3857) to improve performance at query time.
-
-```
-ogr2ogr \
-  -f "PostgreSQL" "PG:host=localhost user=baremaps dbname=baremaps password=baremaps" \
-  "ne_10m_admin_0_countries.shp" \
-  -lco GEOMETRY_NAME=geom \
-  -lco FID=gid \
-  -lco PRECISION=no \
-  -nlt PROMOTE_TO_MULTI \
-  -nln ne_10m_admin_0_countries \
-  -s_srs EPSG:4326 \
-  -t_srs EPSG:3857 \
-  --config OGR_ENABLE_PARTIAL_REPROJECTION TRUE \
-  -overwrite
-```
diff --git a/examples/naturalearth/indexes.sql b/examples/naturalearth/indexes.sql
deleted file mode 100644
index 109077c..0000000
--- a/examples/naturalearth/indexes.sql
+++ /dev/null
@@ -1,135 +0,0 @@
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_antarctic_claim_limit_lines_gix ON ne_10m_admin_0_antarctic_claim_limit_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_antarctic_claims_gix ON ne_10m_admin_0_antarctic_claims USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_boundary_lines_disputed_areas_gix ON ne_10m_admin_0_boundary_lines_disputed_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_boundary_lines_land_gix ON ne_10m_admin_0_boundary_lines_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_boundary_lines_map_units_gix ON ne_10m_admin_0_boundary_lines_map_units USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_boundary_lines_maritime_indicator_gix ON ne_10m_admin_0_boundary_lines_maritime_indicator USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_countries_gix ON ne_10m_admin_0_countries USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_countries_lakes_gix ON ne_10m_admin_0_countries_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_disputed_areas_gix ON ne_10m_admin_0_disputed_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_disputed_areas_scale_rank_minor_islands_gix ON ne_10m_admin_0_disputed_areas_scale_rank_minor_islands USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_label_points_gix ON ne_10m_admin_0_label_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_map_subunits_gix ON ne_10m_admin_0_map_subunits USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_map_units_gix ON ne_10m_admin_0_map_units USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_pacific_groupings_gix ON ne_10m_admin_0_pacific_groupings USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_scale_rank_gix ON ne_10m_admin_0_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_scale_rank_minor_islands_gix ON ne_10m_admin_0_scale_rank_minor_islands USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_seams_gix ON ne_10m_admin_0_seams USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_0_sovereignty_gix ON ne_10m_admin_0_sovereignty USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_label_points_details_gix ON ne_10m_admin_1_label_points_details USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_label_points_gix ON ne_10m_admin_1_label_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_seams_gix ON ne_10m_admin_1_seams USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_states_provinces_gix ON ne_10m_admin_1_states_provinces USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_states_provinces_lakes_gix ON ne_10m_admin_1_states_provinces_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_states_provinces_lines_gix ON ne_10m_admin_1_states_provinces_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_states_provinces_scale_rank_gix ON ne_10m_admin_1_states_provinces_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_admin_1_states_provinces_scale_rank_minor_islands_gix ON ne_10m_admin_1_states_provinces_scale_rank_minor_islands USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_airports_gix ON ne_10m_airports USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_antarctic_ice_shelves_lines_gix ON ne_10m_antarctic_ice_shelves_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_antarctic_ice_shelves_polys_gix ON ne_10m_antarctic_ice_shelves_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_coastline_gix ON ne_10m_coastline USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_geographic_lines_gix ON ne_10m_geographic_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_geography_marine_polys_gix ON ne_10m_geography_marine_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_geography_regions_elevation_points_gix ON ne_10m_geography_regions_elevation_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_geography_regions_points_gix ON ne_10m_geography_regions_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_geography_regions_polys_gix ON ne_10m_geography_regions_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_glaciated_areas_gix ON ne_10m_glaciated_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_lakes_europe_gix ON ne_10m_lakes_europe USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_lakes_gix ON ne_10m_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_lakes_historic_gix ON ne_10m_lakes_historic USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_lakes_north_america_gix ON ne_10m_lakes_north_america USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_lakes_pluvial_gix ON ne_10m_lakes_pluvial USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_land_gix ON ne_10m_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_land_ocean_label_points_gix ON ne_10m_land_ocean_label_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_land_ocean_seams_gix ON ne_10m_land_ocean_seams USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_land_scale_rank_gix ON ne_10m_land_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_minor_islands_coastline_gix ON ne_10m_minor_islands_coastline USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_minor_islands_gix ON ne_10m_minor_islands USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_minor_islands_label_points_gix ON ne_10m_minor_islands_label_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_ocean_gix ON ne_10m_ocean USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_ocean_scale_rank_gix ON ne_10m_ocean_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_parks_and_protected_lands_area_gix ON ne_10m_parks_and_protected_lands_area USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_parks_and_protected_lands_line_gix ON ne_10m_parks_and_protected_lands_line USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_parks_and_protected_lands_point_gix ON ne_10m_parks_and_protected_lands_point USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_parks_and_protected_lands_scale_rank_gix ON ne_10m_parks_and_protected_lands_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_playas_gix ON ne_10m_playas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_populated_places_gix ON ne_10m_populated_places USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_populated_places_simple_gix ON ne_10m_populated_places_simple USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_ports_gix ON ne_10m_ports USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_railroads_gix ON ne_10m_railroads USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_railroads_north_america_gix ON ne_10m_railroads_north_america USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_reefs_gix ON ne_10m_reefs USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_rivers_europe_gix ON ne_10m_rivers_europe USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_rivers_lake_centerlines_gix ON ne_10m_rivers_lake_centerlines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_rivers_lake_centerlines_scale_rank_gix ON ne_10m_rivers_lake_centerlines_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_rivers_north_america_gix ON ne_10m_rivers_north_america USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_roads_gix ON ne_10m_roads USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_roads_north_america_gix ON ne_10m_roads_north_america USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_time_zones_gix ON ne_10m_time_zones USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_urban_areas_gix ON ne_10m_urban_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_10m_urban_areas_landscan_gix ON ne_10m_urban_areas_landscan USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_boundary_lines_land_gix ON ne_110m_admin_0_boundary_lines_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_countries_gix ON ne_110m_admin_0_countries USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_countries_lakes_gix ON ne_110m_admin_0_countries_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_map_units_gix ON ne_110m_admin_0_map_units USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_pacific_groupings_gix ON ne_110m_admin_0_pacific_groupings USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_scale_rank_gix ON ne_110m_admin_0_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_sovereignty_gix ON ne_110m_admin_0_sovereignty USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_0_tiny_countries_gix ON ne_110m_admin_0_tiny_countries USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_1_states_provinces_gix ON ne_110m_admin_1_states_provinces USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_1_states_provinces_lakes_gix ON ne_110m_admin_1_states_provinces_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_1_states_provinces_lines_gix ON ne_110m_admin_1_states_provinces_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_admin_1_states_provinces_scale_rank_gix ON ne_110m_admin_1_states_provinces_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_coastline_gix ON ne_110m_coastline USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_geographic_lines_gix ON ne_110m_geographic_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_geography_marine_polys_gix ON ne_110m_geography_marine_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_geography_regions_elevation_points_gix ON ne_110m_geography_regions_elevation_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_geography_regions_points_gix ON ne_110m_geography_regions_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_geography_regions_polys_gix ON ne_110m_geography_regions_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_glaciated_areas_gix ON ne_110m_glaciated_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_lakes_gix ON ne_110m_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_land_gix ON ne_110m_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_ocean_gix ON ne_110m_ocean USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_populated_places_gix ON ne_110m_populated_places USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_populated_places_simple_gix ON ne_110m_populated_places_simple USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_110m_rivers_lake_centerlines_gix ON ne_110m_rivers_lake_centerlines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_boundary_lines_disputed_areas_gix ON ne_50m_admin_0_boundary_lines_disputed_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_boundary_lines_land_gix ON ne_50m_admin_0_boundary_lines_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_boundary_lines_maritime_indicator_gix ON ne_50m_admin_0_boundary_lines_maritime_indicator USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_boundary_map_units_gix ON ne_50m_admin_0_boundary_map_units USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_breakaway_disputed_areas_gix ON ne_50m_admin_0_breakaway_disputed_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_breakaway_disputed_areas_scale_rank_gix ON ne_50m_admin_0_breakaway_disputed_areas_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_countries_gix ON ne_50m_admin_0_countries USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_countries_lakes_gix ON ne_50m_admin_0_countries_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_map_subunits_gix ON ne_50m_admin_0_map_subunits USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_map_units_gix ON ne_50m_admin_0_map_units USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_pacific_groupings_gix ON ne_50m_admin_0_pacific_groupings USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_scale_rank_gix ON ne_50m_admin_0_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_sovereignty_gix ON ne_50m_admin_0_sovereignty USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_tiny_countries_gix ON ne_50m_admin_0_tiny_countries USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_0_tiny_countries_scale_rank_gix ON ne_50m_admin_0_tiny_countries_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_1_states_provinces_gix ON ne_50m_admin_1_states_provinces USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_1_states_provinces_lakes_gix ON ne_50m_admin_1_states_provinces_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_1_states_provinces_lines_gix ON ne_50m_admin_1_states_provinces_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_admin_1_states_provinces_scale_rank_gix ON ne_50m_admin_1_states_provinces_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_airports_gix ON ne_50m_airports USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_antarctic_ice_shelves_lines_gix ON ne_50m_antarctic_ice_shelves_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_antarctic_ice_shelves_polys_gix ON ne_50m_antarctic_ice_shelves_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_coastline_gix ON ne_50m_coastline USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_geographic_lines_gix ON ne_50m_geographic_lines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_geography_marine_polys_gix ON ne_50m_geography_marine_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_geography_regions_elevation_points_gix ON ne_50m_geography_regions_elevation_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_geography_regions_points_gix ON ne_50m_geography_regions_points USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_geography_regions_polys_gix ON ne_50m_geography_regions_polys USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_glaciated_areas_gix ON ne_50m_glaciated_areas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_lakes_gix ON ne_50m_lakes USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_lakes_historic_gix ON ne_50m_lakes_historic USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_land_gix ON ne_50m_land USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_ocean_gix ON ne_50m_ocean USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_playas_gix ON ne_50m_playas USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_populated_places_gix ON ne_50m_populated_places USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_populated_places_simple_gix ON ne_50m_populated_places_simple USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_ports_gix ON ne_50m_ports USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_rivers_lake_centerlines_gix ON ne_50m_rivers_lake_centerlines USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_rivers_lake_centerlines_scale_rank_gix ON ne_50m_rivers_lake_centerlines_scale_rank USING SPGIST(geom);
-CREATE INDEX IF NOT EXISTS ne_50m_urban_areas_gix ON ne_50m_urban_areas USING SPGIST(geom);
diff --git a/examples/naturalearth/style.json b/examples/naturalearth/style.json
deleted file mode 100644
index 2fa41fd..0000000
--- a/examples/naturalearth/style.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers" : [ {
-    "id" : "ne_50m_admin_0_countries",
-    "type" : "fill",
-    "source" : "baremaps",
-    "source-layer" : "ne_50m_admin_0_countries",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgba(125, 105, 105, 1)",
-      "fill-outline-color" : "rgba(0, 0, 0, 1)"
-    }
-  }, {
-    "id" : "ne_10m_admin_0_countries",
-    "type" : "fill",
-    "source" : "baremaps",
-    "source-layer" : "ne_10m_admin_0_countries",
-    "paint" : {
-      "fill-color" : "rgba(125, 105, 105, 1)",
-      "fill-outline-color" : "rgba(0, 0, 0, 1)"
-    }
-  } ],
-  "center" : [ 0, 0 ],
-  "zoom" : 4
-}
\ No newline at end of file
diff --git a/examples/naturalearth/tileset.json b/examples/naturalearth/tileset.json
deleted file mode 100644
index 7616459..0000000
--- a/examples/naturalearth/tileset.json
+++ /dev/null
@@ -1,1360 +0,0 @@
-{
-  "tilejson": "2.2.0",
-  "minzoom": 0,
-  "maxzoom": 12,
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt"
-  ],
-  "vector_layers": [
-    {
-      "id": "ne_110m_admin_0_boundary_lines_land",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_boundary_lines_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_countries",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_countries AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_countries_lakes",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_countries_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_map_units",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_map_units AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_pacific_groupings",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_pacific_groupings AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_scale_rank",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_sovereignty",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_sovereignty AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_0_tiny_countries",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_0_tiny_countries AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_1_states_provinces",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_1_states_provinces AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_1_states_provinces_lakes",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_1_states_provinces_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_1_states_provinces_lines",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_1_states_provinces_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_admin_1_states_provinces_scale_rank",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_admin_1_states_provinces_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_coastline",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_coastline AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_geographic_lines",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_geographic_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_geography_marine_polys",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_geography_marine_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_geography_regions_elevation_points",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_geography_regions_elevation_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_geography_regions_points",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_geography_regions_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_geography_regions_polys",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_geography_regions_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_glaciated_areas",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_glaciated_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_lakes",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_land",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_ocean",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_ocean AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_populated_places",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_populated_places AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_populated_places_simple",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_populated_places_simple AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_110m_rivers_lake_centerlines",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 2,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_110m_rivers_lake_centerlines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_boundary_lines_disputed_areas",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_boundary_lines_disputed_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_boundary_lines_land",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_boundary_lines_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_boundary_lines_maritime_indicator",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_boundary_lines_maritime_indicator AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_boundary_map_units",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_boundary_map_units AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_breakaway_disputed_areas",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_breakaway_disputed_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_breakaway_disputed_areas_scale_rank",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_breakaway_disputed_areas_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_countries",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_countries AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_countries_lakes",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_countries_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_map_subunits",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_map_subunits AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_map_units",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_map_units AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_pacific_groupings",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_pacific_groupings AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_scale_rank",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_sovereignty",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_sovereignty AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_tiny_countries",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_tiny_countries AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_0_tiny_countries_scale_rank",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_0_tiny_countries_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_1_states_provinces",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_1_states_provinces AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_1_states_provinces_lakes",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_1_states_provinces_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_1_states_provinces_lines",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_1_states_provinces_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_admin_1_states_provinces_scale_rank",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_admin_1_states_provinces_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_airports",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_airports AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_antarctic_ice_shelves_lines",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_antarctic_ice_shelves_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_antarctic_ice_shelves_polys",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_antarctic_ice_shelves_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_coastline",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_coastline AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_geographic_lines",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_geographic_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_geography_marine_polys",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_geography_marine_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_geography_regions_elevation_points",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_geography_regions_elevation_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_geography_regions_points",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_geography_regions_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_geography_regions_polys",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_geography_regions_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_glaciated_areas",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_glaciated_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_lakes",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_lakes_historic",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_lakes_historic AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_land",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_ocean",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_ocean AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_playas",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_playas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_populated_places",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_populated_places AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_populated_places_simple",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_populated_places_simple AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_ports",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_ports AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_rivers_lake_centerlines",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_rivers_lake_centerlines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_rivers_lake_centerlines_scale_rank",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_rivers_lake_centerlines_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_50m_urban_areas",
-      "queries": [
-        {
-          "minzoom": 2,
-          "maxzoom": 5,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_50m_urban_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_antarctic_claim_limit_lines",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_antarctic_claim_limit_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_antarctic_claims",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_antarctic_claims AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_boundary_lines_disputed_areas",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_boundary_lines_disputed_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_boundary_lines_land",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_boundary_lines_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_boundary_lines_map_units",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_boundary_lines_map_units AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_boundary_lines_maritime_indicator",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_boundary_lines_maritime_indicator AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_countries",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_countries AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_countries_lakes",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_countries_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_disputed_areas",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_disputed_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_disputed_areas_scale_rank_minor_islands",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_disputed_areas_scale_rank_minor_islands AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_label_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_label_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_map_subunits",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_map_subunits AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_map_units",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_map_units AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_pacific_groupings",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_pacific_groupings AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_scale_rank_minor_islands",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_scale_rank_minor_islands AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_seams",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_seams AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_0_sovereignty",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_0_sovereignty AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_label_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_label_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_label_points_details",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_label_points_details AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_seams",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_seams AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_states_provinces",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_states_provinces AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_states_provinces_lakes",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_states_provinces_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_states_provinces_lines",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_states_provinces_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_states_provinces_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_states_provinces_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_admin_1_states_provinces_scale_rank_minor_islands",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_admin_1_states_provinces_scale_rank_minor_islands AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_airports",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_airports AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_antarctic_ice_shelves_lines",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_antarctic_ice_shelves_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_antarctic_ice_shelves_polys",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_antarctic_ice_shelves_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_coastline",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_coastline AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_geographic_lines",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_geographic_lines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_geography_marine_polys",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_geography_marine_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_geography_regions_elevation_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_geography_regions_elevation_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_geography_regions_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_geography_regions_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_geography_regions_polys",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_geography_regions_polys AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_glaciated_areas",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_glaciated_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_lakes",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_lakes AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_lakes_europe",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_lakes_europe AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_lakes_historic",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_lakes_historic AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_lakes_north_america",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_lakes_north_america AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_lakes_pluvial",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_lakes_pluvial AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_land",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_land AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_land_ocean_label_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_land_ocean_label_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_land_ocean_seams",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_land_ocean_seams AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_land_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_land_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_minor_islands",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_minor_islands AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_minor_islands_coastline",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_minor_islands_coastline AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_minor_islands_label_points",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_minor_islands_label_points AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_ocean",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_ocean AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_ocean_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_ocean_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_parks_and_protected_lands_area",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_parks_and_protected_lands_area AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_parks_and_protected_lands_line",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_parks_and_protected_lands_line AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_parks_and_protected_lands_point",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_parks_and_protected_lands_point AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_parks_and_protected_lands_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_parks_and_protected_lands_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_playas",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_playas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_populated_places",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_populated_places AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_populated_places_simple",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_populated_places_simple AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_ports",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_ports AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_railroads",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_railroads AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_railroads_north_america",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_railroads_north_america AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_reefs",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_reefs AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_rivers_europe",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_rivers_europe AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_rivers_lake_centerlines",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_rivers_lake_centerlines AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_rivers_lake_centerlines_scale_rank",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_rivers_lake_centerlines_scale_rank AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_rivers_north_america",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_rivers_north_america AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_roads",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_roads AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_roads_north_america",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_roads_north_america AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_time_zones",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_time_zones AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_urban_areas",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_urban_areas AS t"
-        }
-      ]
-    },
-    {
-      "id": "ne_10m_urban_areas_landscan",
-      "queries": [
-        {
-          "minzoom": 5,
-          "maxzoom": 12,
-          "sql": "SELECT fid as id, '{}'::jsonb as tags, geom FROM ne_10m_urban_areas_landscan AS t"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/naturalearth/workflow.json b/examples/naturalearth/workflow.json
deleted file mode 100644
index bd9d644..0000000
--- a/examples/naturalearth/workflow.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "steps": [
-    {
-      "id": "natural_earth_vector",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": "https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip",
-          "path": "natural_earth_vector.gpkg.zip"
-        },
-        {
-          "type": "UnzipFile",
-          "file": "natural_earth_vector.gpkg.zip",
-          "directory": "natural_earth_vector"
-        },
-        {
-          "type": "ImportGeoPackage",
-          "file": "natural_earth_vector/packages/natural_earth_vector.gpkg",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "sourceSRID": 4326,
-          "targetSRID": 3857
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "indexes.sql",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/openstreetmap/index.md b/examples/openstreetmap/index.md
deleted file mode 100644
index 630cadb..0000000
--- a/examples/openstreetmap/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-layout: default
-title: OpenStreetMap Example
----
-
-# OpenStreetMap Example
-
-Baremaps aims at being the most productive toolkit for creating custom vector tiles from OpenStreetMap data.
-
-In this tutorial, we'll learn how to use Baremaps to import OpenStreetMap data in a Postgis database and how to create vector tiles from this data.
-Notice that the following steps assume that Baremaps and Postgis are [installed](https://www.baremaps.com/installation/).
-Also, if you are in a hurry, consider skipping the "Under the Hood" sections.
-
-## Dataset
-
-OpenStreetMap (OSM) is a free and editable map of the world.
-It is maintained by a community of passionate volunteers in a way which is similar to Wikipedia.
-Every week, OpenStreetMap publishes a [full dump](https://planet.openstreetmap.org/) of its data in two flavours: a large XML file of about 90GB and a more compact binary file of about 50GB in the  [Protocol Buffer Format](https://developers.google.com/protocol-buffers) (PBF).
-As processing such large files can take several hours, [Geofabrik](http://www.geofabrik.de/data/download.html) regularly publishes smaller extracts of OSM for specific regions.
-In this example we will use a tiny extract of OSM for [Liechtenstein](https://en.wikipedia.org/wiki/Liechtenstein), which is suitable for fast experiments.
-
-## Importing OpenStreetMap Data
-
-A workflow is a directed acyclic graph of steps executed by Baremaps. 
-To download and import the sample OSM data in Postgres, execute the following [workflow](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/openstreetmap/workflow.json). 
-
-```
-baremaps workflow execute --file workflow.json
-```
-
-Depending on the size of the OpenStreetMap file, the execution of this command may take some time.
-Eventually, the output produced by the command should look as follows.
-
-```
-[INFO ] 2022-07-26 09:47:40.906 [main] Workflow - Executing workflow workflow.json
-[INFO ] 2022-07-26 09:47:41.208 [pool-2-thread-1] DownloadUrl - Downloading https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf to liechtenstein-latest.osm.pbf
-[INFO ] 2022-07-26 09:48:14.496 [pool-2-thread-1] DownloadUrl - Finished downloading https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf to liechtenstein-latest.osm.pbf
-[INFO ] 2022-07-26 09:48:14.497 [pool-2-thread-2] ImportOpenStreetMap - Importing liechtenstein-latest.osm.pbf into jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps
-[INFO ] 2022-07-26 09:48:14.504 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Starting...
-[INFO ] 2022-07-26 09:48:14.669 [pool-2-thread-2] HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@13d835e3
-[INFO ] 2022-07-26 09:48:14.671 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Start completed.
-[INFO ] 2022-07-26 09:48:19.172 [pool-2-thread-2] ImportOpenStreetMap - Finished importing liechtenstein-latest.osm.pbf into jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps
-[INFO ] 2022-07-26 09:48:19.172 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Shutdown initiated...
-[INFO ] 2022-07-26 09:48:19.177 [pool-2-thread-2] HikariDataSource - HikariPool-1 - Shutdown completed.
-[INFO ] 2022-07-26 09:48:19.178 [pool-2-thread-3] ExecuteSqlFile - Executing indexes.sql into jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps
-[INFO ] 2022-07-26 09:48:19.179 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Starting...
-[INFO ] 2022-07-26 09:48:19.213 [pool-2-thread-3] HikariPool - HikariPool-2 - Added connection org.postgresql.jdbc.PgConnection@25c4ab89
-[INFO ] 2022-07-26 09:48:19.213 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Start completed.
-[INFO ] 2022-07-26 09:48:21.365 [pool-2-thread-3] ExecuteSqlFile - Finished executing indexes.sql into jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps
-[INFO ] 2022-07-26 09:48:21.365 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Shutdown initiated...
-[INFO ] 2022-07-26 09:48:21.367 [pool-2-thread-3] HikariDataSource - HikariPool-2 - Shutdown completed.
-[INFO ] 2022-07-26 09:48:21.368 [main] Workflow - Finished executing workflow workflow.json
-```
-
-### Under the Hood (Optional)
-
-What can we learn from this output?
-First, we notice that Baremaps uses a connection pool to parallelize the import procedure.
-Then it imports the OSM data, populating the tables previously created.
-In our case, the input is a file provided by Geofabrik.
-
-OSM's [conceptual model](https://wiki.openstreetmap.org/wiki/Elements) builds upon the notions of nodes, ways and relations.
-In this normalized data model, a line (or way) is formed by a sequence of points (nodes) referenced by their id.
-In order to save denormalized geometries in Postgis (e.g. linestring, polygon, multi-polygon, etc.), Baremaps creates a cache for nodes, ways and relations.
-[LMDB](https://symas.com/lmdb/) is used under the hood to achieve great performance.
-
-After the creation of the cache, Baremaps can populate the database with geometries.
-The geometries are stored in three tables named after the OSM conceptual model: `osm_nodes`, `osm_ways`, and `osm_relations`.
-In order to improve performances at query time, Baremaps also creates indexes for the tags and the geometries.
-The following Figure displays the schema of the Postgis database created by Baremaps.
-
-![Postgis database](database.png)
-
-## Creating Vector Tiles
-
-In order to create vector tiles, Baremaps uses JSON configuration files.
-You can obtain a copy of the [tileset.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/openstreetmap/tileset.json) and [style.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/openstreetmap/style.json) file in the repository.
-The [tileset.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/openstreetmap/tileset.json) is loosely based on the [TileJSON](https://github.com/mapbox/tilejson-spec) specification. 
-It defines general tileset properties and lists layers containing SQL queries to be executed by Postgis.
-The [style.json](https://raw.githubusercontent.com/baremaps/baremaps/main/docs/examples/openstreetmap/style.json) file is a [Maplibre Style](https://maplibre.org/maplibre-gl-js-docs/api/).
-It defines general style and rendering properties. 
-
-Let's preview and edit the map with the sample configuration files by executing the following command in a terminal.
-
-```
-baremaps map dev \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --tileset 'tileset.json' \
-  --style 'style.json'
-```
-
-Well done, a local development server should have started. 
-You can now visualize a map of Liechtenstein in your browser ([http://localhost:9000/](http://localhost:9000/))!
-Notice that the changes in the configuration files are automatically reloaded by the browser.
-
-### Under the Hood (Optional)
-
-Baremaps extensively rely on the fantastic [ST_AsMVT](https://postgis.net/docs/ST_AsMVT.html) functions released by the Postgis team to produce [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/).
-However, in the following excerpt of the json configuration file, none of these concepts appear in the SQL queries.
-
-```json
-{
-  ...
-  "vector_layers": [
-    {
-      "id": "aeroway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'aeroway'"
-        },
-        ...
-      ]
-    },
-  ],
-  ...
-}
-```
-
-Why don't we see these function calls in the configuration?
-Baremaps wants you to focus on the content of the tiles, and relieves you from the burden of writing complex SQL queries.
-In fact, at runtime, Baremaps merges all the queries of the configuration file into a single optimized query that produces vector tiles.
-
-In production, vector tiles are rarely served dynamically. Why is that so?
-First, a large blob store is much cheaper than a relational database to [operate](https://wiki.c2.com/?StorageIsCheap).
-Second, content delivery networks (CDNs) greatly improve web performances by caching static content close to the end user.
-Baremaps has been conceived with these lasting trends in mind.
-The following command produces a local directory containing precomputed static tiles.
-These tiles can be served with Apache, Nginx, or Caddy, but also copied in a blob store behind a content delivery network, such as Cloudflare, Stackpath, or Fastly.
-
-```
-baremaps map export \
-  --database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
-  --tileset 'tileset.json' \
-  --repository 'tiles/'
-```
-
-## Conclusion
-
-In this tutorial, we learnt how to import OpenStreetMap data in Postgis and how to create vector tiles with Baremaps.
-Prior to the release of Baremaps, we believe that creating a pipeline for publishing vector tiles from OpenStreetMap data was a rather time consuming task.
-As shown in this demonstration, Baremaps literally brings back the fun to creating a web mapping pipeline!
diff --git a/examples/openstreetmap/indexes.sql b/examples/openstreetmap/indexes.sql
deleted file mode 100644
index 6990e7b..0000000
--- a/examples/openstreetmap/indexes.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_ways_gin ON osm_ways USING gin (nodes);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_relations_gin ON osm_relations USING gin (member_refs);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_nodes_gix ON osm_nodes USING GIST (geom);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_ways_gix ON osm_ways USING GIST (geom);
-CREATE INDEX CONCURRENTLY IF NOT EXISTS osm_relations_gix ON osm_relations USING GIST (geom);
\ No newline at end of file
diff --git a/examples/openstreetmap/liechtenstein-latest.osm.pbf b/examples/openstreetmap/liechtenstein-latest.osm.pbf
deleted file mode 100644
index 591fd91..0000000
Binary files a/examples/openstreetmap/liechtenstein-latest.osm.pbf and /dev/null differ
diff --git a/examples/openstreetmap/screenshot.png b/examples/openstreetmap/screenshot.png
deleted file mode 100644
index 3121c6e..0000000
Binary files a/examples/openstreetmap/screenshot.png and /dev/null differ
diff --git a/examples/openstreetmap/style.js b/examples/openstreetmap/style.js
deleted file mode 100644
index 127ae1a..0000000
--- a/examples/openstreetmap/style.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export default {
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers" : [ {
-    "id" : "building",
-    "type" : "fill",
-    "source" : "baremaps",
-    "source-layer" : "building",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgba(255, 0, 0, 1)"
-    }
-  } ],
-  "center" : [ 9.5554, 47.166 ],
-  "metadata" : {
-    "maputnik:renderer" : "mbgljs"
-  },
-  "zoom" : 14
-};
\ No newline at end of file
diff --git a/examples/openstreetmap/style.json b/examples/openstreetmap/style.json
deleted file mode 100644
index f64b679..0000000
--- a/examples/openstreetmap/style.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json"
-    }
-  },
-  "layers" : [ {
-    "id" : "building",
-    "type" : "fill",
-    "source" : "baremaps",
-    "source-layer" : "building",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgba(255, 0, 0, 1)"
-    }
-  } ],
-  "center" : [ 9.5554, 47.166 ],
-  "metadata" : {
-    "maputnik:renderer" : "mbgljs"
-  },
-  "zoom" : 14
-}
\ No newline at end of file
diff --git a/examples/openstreetmap/tileset.json b/examples/openstreetmap/tileset.json
deleted file mode 100644
index b714ed8..0000000
--- a/examples/openstreetmap/tileset.json
+++ /dev/null
@@ -1,521 +0,0 @@
-{
-  "tilejson": "2.2.0",
-  "center": [
-    9.5554,
-    47.166,
-    14.0
-  ],
-  "bounds": [
-    9.471078,
-    47.04774,
-    9.636217,
-    47.27128
-  ],
-  "minzoom": 12.0,
-  "maxzoom": 14.0,
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt"
-  ],
-  "vector_layers": [
-    {
-      "id": "aeroway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'aeroway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'aeroway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'aeroway' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "waterway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'waterway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'waterway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'waterway' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "landuse",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'landuse'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'landuse'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'landuse' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "railway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'railway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'railway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'railway' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "highway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'highway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'highway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'highway' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "public_transport",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'public_transport'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'public_transport'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'public_transport' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "aerialway",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'aerialway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'aerialway'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'aerialway' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "geological",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'geological'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'geological'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'geological' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "building",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'building'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'building'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'building' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "amenity",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'amenity'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'amenity'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'amenity' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "craft",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'craft'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'craft'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'craft' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "emergency",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'emergency'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'emergency'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'emergency' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "historic",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'historic'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'historic'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'historic' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "leisure",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'leisure'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'leisure'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'leisure' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "man_made",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'man_made'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'man_made'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'man_made' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "military",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'military'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'military'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'military' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "natural",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'natural'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'natural'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'natural' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "office",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'office'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'office'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'office' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "place",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'place'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'place'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'place' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "power",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'power'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'power'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'power' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "route",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'route'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'route'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'route' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "shop",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'shop'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'shop'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'shop' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "sport",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'sport'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'sport'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'sport' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "telecom",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'telecom'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'telecom'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'telecom' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    },
-    {
-      "id": "tourism",
-      "queries": [
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_nodes WHERE tags ? 'tourism'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_ways WHERE tags ? 'tourism'"
-        },
-        {
-          "minzoom": 12,
-          "maxzoom": 20,
-          "sql": "SELECT id, tags, geom FROM osm_relations WHERE tags ? 'tourism' AND tags ->> 'type' = 'multipolygon'"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/examples/openstreetmap/workflow.json b/examples/openstreetmap/workflow.json
deleted file mode 100644
index 9ebd677..0000000
--- a/examples/openstreetmap/workflow.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "steps": [
-    {
-      "id": "download",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": "https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf",
-          "path": "liechtenstein-latest.osm.pbf"
-        }
-      ]
-    },
-    {
-      "id": "import",
-      "needs": [
-        "download"
-      ],
-      "tasks": [
-        {
-          "type": "ImportOpenStreetMap",
-          "file": "liechtenstein-latest.osm.pbf",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "databaseSrid": 3857
-        }
-      ]
-    },
-    {
-      "id": "index",
-      "needs": [
-        "import"
-      ],
-      "tasks": [
-        {
-          "type": "ExecuteSql",
-          "file": "indexes.sql",
-          "database": "jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps"
-        }
-      ]
-    }
-  ]
-}
diff --git a/examples/serving-vector-tiles.md b/examples/serving-vector-tiles.md
deleted file mode 100644
index f607174..0000000
--- a/examples/serving-vector-tiles.md
+++ /dev/null
@@ -1,151 +0,0 @@
-# Serving Vector Tiles
-
-In this tutorial, we’ll learn how to serve precomputed vector tiles using Python and Nginx.
-
-In production, vector tiles are rarely served dynamically. Why is that so? First, a large blob store is much cheaper than a relational database to operate. Second, content delivery networks (CDNs) greatly improve web performances by caching static content close to the end user. Baremaps has been conceived with these lasting trends in mind. The following command produces a local directory containing precomputed static tiles. 
-
-```
-baremaps export \
---database 'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&password=baremaps' \
---tileset 'tiles.json' \
---repository 'tiles/'
-```
-
-These tiles can be served with Apache, Nginx, or Python, but also copied in a blob store behind a content delivery network, such as Cloudflare, Stackpath, or Fastly.
-
-## Serve with Python
-
-Mapbox vector tiles should be served with the following headers.
-
-```
-content-encoding: gzip
-content-type: application/vnd.mapbox-vector-tile
-```
-Sample python code to server vector tiles with python built-in webserver
-
-```
-#server.py
-
-try:
-    from http import server # Python 3
-except ImportError:
-    import SimpleHTTPServer as server # Python 2
-
-class MyHTTPRequestHandler(server.SimpleHTTPRequestHandler):
-    def end_headers(self):
-        self.send_my_headers()
-
-        server.SimpleHTTPRequestHandler.end_headers(self)
-
-    def send_my_headers(self):
-        self.send_header("Access-Control-Allow-Origin", "*")
-        self.send_header("content-encoding", "gzip")
-        self.send_header("content-type", "application/vnd.mapbox-vector-tile")
-
-
-if __name__ == '__main__':
-    server.test(HandlerClass=MyHTTPRequestHandler, port=9001)
-```
-Run the following command in a terminal, where you saved the static tiles directory;
-
-`
-$ python server.py
-`
-
-and your tiles should be serving;
-
-`
-Serving HTTP on 0.0.0.0 port 9001 (http://0.0.0.0:9001/) ...
-`
-
-Now you can access the tiles through a url like this, depending upon your directory structure;
-
-http://localhost:9001/tiles/{z}/{x}/{y}.mvt
-
-OR
-
-http://yourip:9001/tiles/{z}/{x}/{y}.mvt
-
-## Serve with Nginx
-
-I asume that you already have nginx installed on your system. By default it is not configured to serve vector tiles and to do that you need to edit the nginx configuration file. Open a terminal and run the following command;
-
-```
-# vi /etc/nginx/sites-enabled/default  [On Debian/Ubuntu]
-# vi /etc/nginx/nginx.conf             [On CentOS/RHEL]
-```
-
-Default server configuration
-
-```
-server {
-        listen 80 default_server;
-        listen [::]:80 default_server;
-
-        root /var/www/html;
-
-        # Add index.php to the list if you are using PHP
-        index index.html index.htm index.nginx-debian.html;
-
-        server_name _;
-
-        location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
-          }
-       }
-```
-
-Add the following lines to the configuration file;
-
-```
-location ~* \.mvt$ {
-    include proxy_params;
-    add_header Access-Control-Allow-Origin *;
-    add_header Content-Encoding gzip;
-    add_header Content-Type application/vnd.mapbox-vector-tile;
-  }
-```
-
-Your final nginx configuration should look like this;
-
-```
-server {
-        listen 80 default_server;
-        listen [::]:80 default_server;
-
-        root /var/www/html;
-
-        # Add index.php to the list if you are using PHP
-        index index.html index.htm index.nginx-debian.html;
-
-        server_name _;
-
-        location / {
-            # First attempt to serve request as file, then
-            # as directory, then fall back to displaying a 404.
-            try_files $uri $uri/ =404;
-        }
-        
-        # Add support for serving pbf files
-        location ~* \.mvt$ {
-            include proxy_params;
-            add_header Access-Control-Allow-Origin *;
-            add_header Content-Encoding gzip;
-            add_header Content-Type application/vnd.mapbox-vector-tile;
-        }
-        }
-```
-
-Copy the tiles folder into nginx root directory i.e. `/var/www/html`
-
-and you should be now able to access the tiles with a url like this;
-
-http://localhost:80/tiles/{z}/{x}/{y}.mvt
-
-OR
-
-http://yourip:80/tiles/{z}/{x}/{y}.mvt
-
-
diff --git a/output/examples/import-osm-into-postgis/database.png b/images/database.png
similarity index 100%
rename from output/examples/import-osm-into-postgis/database.png
rename to images/database.png
diff --git a/output/examples/extrusion/screenshot.png b/images/extrusion.png
similarity index 100%
rename from output/examples/extrusion/screenshot.png
rename to images/extrusion.png
diff --git a/output/assets/screenshot.jpg b/images/screenshot.jpg
similarity index 100%
rename from output/assets/screenshot.jpg
rename to images/screenshot.jpg
diff --git a/index.html b/index.html
index 76cbe1d..57d5907 100644
--- a/index.html
+++ b/index.html
@@ -1,29 +1,18 @@
----
-layout: home
-title: Custom Vector Tiles
----
-<div class="home">
-  <header>
-    <h1><i class="far fa-map"></i> {{ site.title }}</h1>
-  </header>
-  <nav>
-    <p>
-      {% for item in site.data.menu.items %}
-      {% if item != site.data.menu.items[0] %} | {% endif %} <a href="{{ item.url }}">{{ item.page }}</a>
-      {% endfor %}
-    </p>
-  </nav>
-  <section>
-    <p>{{ site.description }}</p>
-    <p>
-      <a class="github-button" href="https://github.com/baremaps/baremaps" data-size="large" data-show-count="true"
-         aria-label="Star baremaps/baremaps on GitHub">Star</a>
-      <a class="github-button" href="https://github.com/baremaps/baremaps/releases/latest"
-         data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-         aria-label="Download baremaps/baremaps on GitHub">Download</a>
-    </p>
-    <a href="/assets/demo.html"><img src="/assets/screenshot.jpg" alt="screenshot"></a>
-    <p><a class="edit" href="{{site.github.repository_url}}/edit/main/docs/{{page.path}}"><i class="fas fa-edit"></i> Edit this page</a></p>
-  </section>
-  
-</div>
\ No newline at end of file
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>Apache Baremaps - Mapping Infrastructure Made Easy – Nextra</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Apache Baremaps - Mapping Infrastructure Made Easy – Nextra"/><meta name="theme-color" content="#111" media="(prefers-color-scheme: dark)"/><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/><style>
+        :root {
+          --nextra-primary-hue: 212deg;
+          --nextra-navbar-height: 4rem;
+          --nextra-menu-height: 3.75rem;
+          --nextra-banner-height: 2.5rem;
+        }
+        
+        .dark {
+          --nextra-primary-hue: 204deg;
+        }
+      </style><meta name="msapplication-TileColor" content="#fff"/><meta http-equiv="Content-Language" content="en"/><meta name="description" content="Nextra: the next docs builder"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@shuding_"/><meta property="og:title" content="Nextra: the next docs builder"/><meta property="og:description" content="Nextra: the next docs builder"/><meta name="apple-mobile-web-app-title" content="Nextra"/><meta n [...]
+Baremaps supports several popular formats such as OsmPbf, ShapeFile, GeoPackage, and FlatGeoBuf, allowing you to seamlessly integrate with your existing workflows.</p></p></div><div class="style_feature__aEu2F" style="opacity:0"><h3 class="jsx-14678e9ada7debc2">Vector Tiles</h3><p class="jsx-14678e9ada7debc2"><p>Baremaps allows you to easily serve and publish custom vector tiles from PostGIS.
+Whether you need to create maps for web or mobile applications, Baremaps makes it simple and efficient.
+Additionally, we are continuously working on developing a high-quality base map.</p></p></div><div class="style_feature__aEu2F" style="opacity:0"><h3 class="jsx-14678e9ada7debc2">Contributing</h3><p class="jsx-14678e9ada7debc2"><p>Whether you&#x27;re an experienced or just getting started, there are many ways to get involved.
+We are experimenting with a range of new components, including IP to location, 3D Tiles Next, and geocoding, and would love your help.
+Let&#x27;s create something amazing together!</p></p></div></div></div></div></div>
+</div></div><footer class="nx-bg-gray-100 nx-pb-[env(safe-area-inset-bottom)] dark:nx-bg-neutral-900 print:nx-bg-transparent"><div class="nx-mx-auto nx-flex nx-max-w-[90rem] nx-gap-2 nx-py-2 nx-px-4 nx-flex"><div class="nx-relative"><button title="Change theme" class="nx-h-7 nx-rounded-md nx-px-2 nx-text-left nx-text-xs nx-font-medium nx-text-gray-600 nx-transition-colors dark:nx-text-gray-400 hover:nx-bg-gray-100 hover:nx-text-gray-900 dark:hover:nx-bg-primary-100/5 dark:hover:nx-text-g [...]
\ No newline at end of file
diff --git a/installation.md b/installation.md
deleted file mode 100644
index 3407486..0000000
--- a/installation.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-layout: default
-title: Installation
-permalink: /installation/
----
-
-# Installation
-
-In order to run Baremaps, you first need to install Java 8 or a later version. 
-[SDKMAN](https://sdkman.io/) provides a convenient Command Line Interface (CLI) to install and upgrade Java.
-
-To install baremaps, download and unzip the latest [release](https://github.com/baremaps/baremaps/releases/latest). 
-Then, add the `/bin` folder to your `PATH` variable:
-
-```
-wget https://github.com/baremaps/baremaps/releases/latest/download/baremaps.zip
-unzip baremaps.zip
-export PATH=$PATH:`pwd`/baremaps/bin
-```
-
-Calling the `baremaps` command should now result in an output similar to the following:
-
-```
-Usage: baremaps [COMMAND]
-A toolkit for producing vector tiles.
-Commands:
-  import  Import OpenStreetMap data in the Postgresql database.
-  update  Update OpenStreetMap data in the Postgresql database.
-  export  Export vector tiles from the Postgresql database.
-  serve   Serve vector tiles from the the Postgresql database.
-```
-
-In order to run Baremaps, you need to setup a [postgis](https://postgis.net/) database.
-The following docker image will allow you to jump start this installation:
-
-```
-docker run \
-  --name baremaps \
-  --publish 5432:5432 \
-  -e POSTGRES_DB=baremaps \
-  -e POSTGRES_USER=baremaps \
-  -e POSTGRES_PASSWORD=baremaps \
-  -d postgis/postgis:latest
-```
-
-You can then stop and start the container with the following commands:
-
-```
-docker stop baremaps
-docker start baremaps
-```
-
-From there, the [OpenStreetMap](/examples/openstreetmap/) example is a good introduction to Baremaps, it shows how to produce high resolution vector tiles.
diff --git a/notes/java-nio.md b/notes/java-nio.md
deleted file mode 100644
index b180378..0000000
--- a/notes/java-nio.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# JAVA NIO
-
-- https://stackoverflow.com/questions/14011919/when-changing-the-file-length-do-i-need-to-remap-all-associated-mappedbytebuffer
\ No newline at end of file
diff --git a/notes/postgis.md b/notes/postgis.md
deleted file mode 100644
index 105a2cc..0000000
--- a/notes/postgis.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Postgis
-
-- https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server
\ No newline at end of file
diff --git a/output/CNAME b/output/CNAME
deleted file mode 100644
index d0af0f3..0000000
--- a/output/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-baremaps.apache.org
diff --git a/output/README.md b/output/README.md
deleted file mode 100644
index a8d662d..0000000
--- a/output/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Apache Baremaps Website
----
-
-This repository holds the content of the [baremaps.apache.org](https://baremaps.apache.org/) website.
-
-The website is generated using [Jekyll](https://jekyllrb.com/),
-as configured by the [.asf.yaml file](https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features#Git.asf.yamlfeatures-JekyllCMS)
-
-Changes to the `main` branch should be live within a few minutes.
-
-The website builds can be followed on [ci2.apache.org](https://ci2.apache.org/), the `jekyll_websites``
-builder can be found at https://ci2.apache.org/#/builders/7 as I write this.
-
-The Baremaps source code is at https://github.com/apache/incubator-baremaps
-
-## How to stage changes
-TODO, clarify the `.asf.yaml` setup for this.
-
-## How to test the website locally
-
-There are many ways to do this, including
-
-    docker run -p 4000:4000 -v $(pwd):/site bretfisher/jekyll-serve
diff --git a/output/about/index.html b/output/about/index.html
deleted file mode 100644
index 02a9790..0000000
--- a/output/about/index.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>About - Apache Baremaps</title>
-    <meta name="description" content="Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.">
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="about">About</h1>
-
-<p>Apache Baremaps is an  <a href="https://github.com/apache/incubator-baremaps/blob/main/LICENSE">open source</a> toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources. It offers live reload capabilities that allow cartographers to customize the content and the style of a map. It includes an attribution-free map schema and style that stimulates derived  [...]
-
-<p><a href="/assets/demo.html"><img src="/assets/screenshot.jpg" alt="State of the map" /></a></p>
-
-<p>Apache Baremaps is inspired by <a href="https://github.com/openstreetmap/osmosis">Osmosis</a>, but it comes with additional features, such as the ability to:</p>
-
-<ul>
-  <li>Process data in parallel with the <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html">Stream API</a> introduced in Java 8</li>
-  <li>Import data faster with the <a href="https://www.postgresql.org/docs/11/sql-copy.html">COPY API</a> of Postgresql</li>
-  <li>Create postgis geometries on the fly with <a href="https://github.com/locationtech/jts">JTS</a></li>
-  <li>Create and serve customized <a href="https://docs.mapbox.com/vector-tiles/specification/">Vector Tiles</a></li>
-</ul>
-
-<p>On the longer run, the project aims to work with a variety of data sources in order to create highly specialized and customized maps.</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/about.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/assets/css/main.css b/output/assets/css/main.css
deleted file mode 100644
index c87ac22..0000000
--- a/output/assets/css/main.css
+++ /dev/null
@@ -1,886 +0,0 @@
-@charset "UTF-8";
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- *    user zoom.
- */
-html {
-  font-family: sans-serif;
-  /* 1 */
-  -ms-text-size-adjust: 100%;
-  /* 2 */
-  -webkit-text-size-adjust: 100%;
-  /* 2 */ }
-
-/**
- * Remove default margin.
- */
-body {
-  margin: 0; }
-
-/* HTML5 display definitions
-   ========================================================================== */
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block; }
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  /* 1 */
-  vertical-align: baseline;
-  /* 2 */ }
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-audio:not([controls]) {
-  display: none;
-  height: 0; }
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-[hidden],
-template {
-  display: none; }
-
-/* Links
-   ========================================================================== */
-/**
- * Remove the gray background color from active links in IE 10.
- */
-a {
-  background-color: transparent; }
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-a:active,
-a:hover {
-  outline: 0; }
-
-/* Text-level semantics
-   ========================================================================== */
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-abbr[title] {
-  border-bottom: 1px dotted; }
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-b,
-strong {
-  font-weight: bold; }
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-dfn {
-  font-style: italic; }
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0; }
-
-/**
- * Address styling not present in IE 8/9.
- */
-mark {
-  background: #ff0;
-  color: #000; }
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-small {
-  font-size: 80%; }
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline; }
-
-sup {
-  top: -0.5em; }
-
-sub {
-  bottom: -0.25em; }
-
-/* Embedded content
-   ========================================================================== */
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-img {
-  border: 0; }
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-svg:not(:root) {
-  overflow: hidden; }
-
-/* Grouping content
-   ========================================================================== */
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-figure {
-  margin: 1em 40px; }
-
-/**
- * Address differences between Firefox and other browsers.
- */
-hr {
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  height: 0; }
-
-/**
- * Contain overflow in all browsers.
- */
-pre {
-  overflow: auto; }
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em; }
-
-/* Forms
-   ========================================================================== */
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-/**
- * 1. Correct color not being inherited.
- *    Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  /* 1 */
-  font: inherit;
-  /* 2 */
-  margin: 0;
-  /* 3 */ }
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-button {
-  overflow: visible; }
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-button,
-select {
-  text-transform: none; }
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- *    and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- *    `input` and others.
- */
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  /* 2 */
-  cursor: pointer;
-  /* 3 */ }
-
-/**
- * Re-set default cursor for disabled elements.
- */
-button[disabled],
-html input[disabled] {
-  cursor: default; }
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0; }
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-input {
-  line-height: normal; }
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  /* 1 */
-  padding: 0;
-  /* 2 */ }
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto; }
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- *    (include `-moz` to future-proof).
- */
-input[type="search"] {
-  -webkit-appearance: textfield;
-  /* 1 */
-  -moz-box-sizing: content-box;
-  -webkit-box-sizing: content-box;
-  /* 2 */
-  box-sizing: content-box; }
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none; }
-
-/**
- * Define consistent border, margin, and padding.
- */
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em; }
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-legend {
-  border: 0;
-  /* 1 */
-  padding: 0;
-  /* 2 */ }
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-textarea {
-  overflow: auto; }
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-optgroup {
-  font-weight: bold; }
-
-/* Tables
-   ========================================================================== */
-/**
- * Remove most spacing between table cells.
- */
-table {
-  border-collapse: collapse;
-  border-spacing: 0; }
-
-td,
-th {
-  padding: 0; }
-
-/*
-* Skeleton V2.0.4
-* Copyright 2014, Dave Gamache
-* www.getskeleton.com
-* Free to use under the MIT license.
-* http://www.opensource.org/licenses/mit-license.php
-* 12/29/2014
-*/
-/* Table of contents
-––––––––––––––––––––––––––––––––––––––––––––––––––
-- Grid
-- Base Styles
-- Typography
-- Links
-- Buttons
-- Forms
-- Lists
-- Code
-- Tables
-- Spacing
-- Utilities
-- Clearing
-- Media Queries
-*/
-/* Grid
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.container {
-  position: relative;
-  width: 100%;
-  max-width: 960px;
-  margin: 0 auto;
-  padding: 0 20px;
-  box-sizing: border-box; }
-
-.column,
-.columns {
-  width: 100%;
-  float: left;
-  box-sizing: border-box; }
-
-/* For devices larger than 400px */
-@media (min-width: 400px) {
-  .container {
-    width: 85%;
-    padding: 0; } }
-/* For devices larger than 550px */
-@media (min-width: 550px) {
-  .container {
-    width: 80%; }
-
-  .column,
-  .columns {
-    margin-left: 4%; }
-
-  .column:first-child,
-  .columns:first-child {
-    margin-left: 0; }
-
-  .one.column,
-  .one.columns {
-    width: 4.66666666667%; }
-
-  .two.columns {
-    width: 13.3333333333%; }
-
-  .three.columns {
-    width: 22%; }
-
-  .four.columns {
-    width: 30.6666666667%; }
-
-  .five.columns {
-    width: 39.3333333333%; }
-
-  .six.columns {
-    width: 48%; }
-
-  .seven.columns {
-    width: 56.6666666667%; }
-
-  .eight.columns {
-    width: 65.3333333333%; }
-
-  .nine.columns {
-    width: 74.0%; }
-
-  .ten.columns {
-    width: 82.6666666667%; }
-
-  .eleven.columns {
-    width: 91.3333333333%; }
-
-  .twelve.columns {
-    width: 100%;
-    margin-left: 0; }
-
-  .one-third.column {
-    width: 30.6666666667%; }
-
-  .two-thirds.column {
-    width: 65.3333333333%; }
-
-  .one-half.column {
-    width: 48%; }
-
-  /* Offsets */
-  .offset-by-one.column,
-  .offset-by-one.columns {
-    margin-left: 8.66666666667%; }
-
-  .offset-by-two.column,
-  .offset-by-two.columns {
-    margin-left: 17.3333333333%; }
-
-  .offset-by-three.column,
-  .offset-by-three.columns {
-    margin-left: 26%; }
-
-  .offset-by-four.column,
-  .offset-by-four.columns {
-    margin-left: 34.6666666667%; }
-
-  .offset-by-five.column,
-  .offset-by-five.columns {
-    margin-left: 43.3333333333%; }
-
-  .offset-by-six.column,
-  .offset-by-six.columns {
-    margin-left: 52%; }
-
-  .offset-by-seven.column,
-  .offset-by-seven.columns {
-    margin-left: 60.6666666667%; }
-
-  .offset-by-eight.column,
-  .offset-by-eight.columns {
-    margin-left: 69.3333333333%; }
-
-  .offset-by-nine.column,
-  .offset-by-nine.columns {
-    margin-left: 78.0%; }
-
-  .offset-by-ten.column,
-  .offset-by-ten.columns {
-    margin-left: 86.6666666667%; }
-
-  .offset-by-eleven.column,
-  .offset-by-eleven.columns {
-    margin-left: 95.3333333333%; }
-
-  .offset-by-one-third.column,
-  .offset-by-one-third.columns {
-    margin-left: 34.6666666667%; }
-
-  .offset-by-two-thirds.column,
-  .offset-by-two-thirds.columns {
-    margin-left: 69.3333333333%; }
-
-  .offset-by-one-half.column,
-  .offset-by-one-half.columns {
-    margin-left: 52%; } }
-/* Base Styles
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/* NOTE
-html is set to 62.5% so that all the REM measurements throughout Skeleton
-are based on 10px sizing. So basically 1.5rem = 15px :) */
-html {
-  font-size: 62.5%; }
-
-body {
-  font-size: 1.5em;
-  /* currently ems cause chrome bug misinterpreting rems on body element */
-  line-height: 1.6;
-  font-weight: 400;
-  font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  color: #222; }
-
-/* Typography
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 0;
-  margin-bottom: 2rem;
-  font-weight: 300; }
-
-h1 {
-  font-size: 4.0rem;
-  line-height: 1.2;
-  letter-spacing: -.1rem; }
-
-h2 {
-  font-size: 3.6rem;
-  line-height: 1.25;
-  letter-spacing: -.1rem; }
-
-h3 {
-  font-size: 3.0rem;
-  line-height: 1.3;
-  letter-spacing: -.1rem; }
-
-h4 {
-  font-size: 2.4rem;
-  line-height: 1.35;
-  letter-spacing: -.08rem; }
-
-h5 {
-  font-size: 1.8rem;
-  line-height: 1.5;
-  letter-spacing: -.05rem; }
-
-h6 {
-  font-size: 1.5rem;
-  line-height: 1.6;
-  letter-spacing: 0; }
-
-/* Larger than phablet */
-@media (min-width: 550px) {
-  h1 {
-    font-size: 5.0rem; }
-
-  h2 {
-    font-size: 4.2rem; }
-
-  h3 {
-    font-size: 3.6rem; }
-
-  h4 {
-    font-size: 3.0rem; }
-
-  h5 {
-    font-size: 2.4rem; }
-
-  h6 {
-    font-size: 1.5rem; } }
-p {
-  margin-top: 0; }
-
-/* Links
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-a {
-  color: #1EAEDB; }
-
-a:hover {
-  color: #0FA0CE; }
-
-/* Buttons
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.button,
-button,
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  display: inline-block;
-  height: 38px;
-  padding: 0 30px;
-  color: #555;
-  text-align: center;
-  font-size: 11px;
-  font-weight: 600;
-  line-height: 38px;
-  letter-spacing: .1rem;
-  text-transform: uppercase;
-  text-decoration: none;
-  white-space: nowrap;
-  background-color: transparent;
-  border-radius: 4px;
-  border: 1px solid #bbb;
-  cursor: pointer;
-  box-sizing: border-box; }
-
-.button:hover,
-button:hover,
-input[type="submit"]:hover,
-input[type="reset"]:hover,
-input[type="button"]:hover,
-.button:focus,
-button:focus,
-input[type="submit"]:focus,
-input[type="reset"]:focus,
-input[type="button"]:focus {
-  color: #333;
-  border-color: #888;
-  outline: 0; }
-
-.button.button-primary,
-button.button-primary,
-input[type="submit"].button-primary,
-input[type="reset"].button-primary,
-input[type="button"].button-primary {
-  color: #FFF;
-  background-color: #33C3F0;
-  border-color: #33C3F0; }
-
-.button.button-primary:hover,
-button.button-primary:hover,
-input[type="submit"].button-primary:hover,
-input[type="reset"].button-primary:hover,
-input[type="button"].button-primary:hover,
-.button.button-primary:focus,
-button.button-primary:focus,
-input[type="submit"].button-primary:focus,
-input[type="reset"].button-primary:focus,
-input[type="button"].button-primary:focus {
-  color: #FFF;
-  background-color: #1EAEDB;
-  border-color: #1EAEDB; }
-
-/* Forms
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea,
-select {
-  height: 38px;
-  padding: 6px 10px;
-  /* The 6px vertically centers text on FF, ignored by Webkit */
-  background-color: #fff;
-  border: 1px solid #D1D1D1;
-  border-radius: 4px;
-  box-shadow: none;
-  box-sizing: border-box; }
-
-/* Removes awkward default styles on some inputs for iOS */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none; }
-
-textarea {
-  min-height: 65px;
-  padding-top: 6px;
-  padding-bottom: 6px; }
-
-input[type="email"]:focus,
-input[type="number"]:focus,
-input[type="search"]:focus,
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="url"]:focus,
-input[type="password"]:focus,
-textarea:focus,
-select:focus {
-  border: 1px solid #33C3F0;
-  outline: 0; }
-
-label,
-legend {
-  display: block;
-  margin-bottom: .5rem;
-  font-weight: 600; }
-
-fieldset {
-  padding: 0;
-  border-width: 0; }
-
-input[type="checkbox"],
-input[type="radio"] {
-  display: inline; }
-
-label > .label-body {
-  display: inline-block;
-  margin-left: .5rem;
-  font-weight: normal; }
-
-/* Lists
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-ul {
-  list-style: circle outside; }
-
-ol {
-  list-style: decimal outside; }
-
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  padding-left: 0;
-  margin: 1.5rem 0 1.5rem 3rem;
-  font-size: 90%; }
-
-nav > ul {
-  margin-left: 0;
-  padding-left: 0; }
-
-li {
-  margin-bottom: 1rem; }
-
-li ul {
-  margin-top: 1rem; }
-
-/* Code
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-code {
-  padding: .2rem .5rem;
-  margin: 0 .2rem;
-  font-size: 90%;
-  white-space: nowrap;
-  background: #F1F1F1;
-  border: 1px solid #E1E1E1;
-  border-radius: 4px; }
-
-pre > code {
-  display: block;
-  padding: 1rem 1.5rem;
-  white-space: pre; }
-
-/* Tables
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-th,
-td {
-  padding: 12px 15px;
-  text-align: left;
-  border-bottom: 1px solid #E1E1E1; }
-
-th:first-child,
-td:first-child {
-  padding-left: 0; }
-
-th:last-child,
-td:last-child {
-  padding-right: 0; }
-
-/* Spacing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-button,
-.button {
-  margin-bottom: 1rem; }
-
-input,
-textarea,
-select,
-fieldset {
-  margin-bottom: 1.5rem; }
-
-pre,
-blockquote,
-dl,
-figure,
-table,
-p,
-ul,
-ol,
-form {
-  margin-bottom: 2.5rem; }
-
-/* Utilities
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.u-full-width {
-  width: 100%;
-  box-sizing: border-box; }
-
-.u-max-full-width {
-  max-width: 100%;
-  box-sizing: border-box; }
-
-.u-pull-right {
-  float: right; }
-
-.u-pull-left {
-  float: left; }
-
-/* Misc
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-hr {
-  margin-top: 3rem;
-  margin-bottom: 3.5rem;
-  border-width: 0;
-  border-top: 1px solid #E1E1E1; }
-
-/* Clearing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/* Self Clearing Goodness */
-.container:after,
-.row:after,
-.u-cf {
-  content: "";
-  display: table;
-  clear: both; }
-
-/* Media Queries
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/*
-Note: The best way to structure the use of media queries is to create the queries
-near the relevant code. For example, if you wanted to change the styles for buttons
-on small devices, paste the mobile query code up in the buttons section and style it
-there.
-*/
-/* Larger than mobile */
-/* Larger than phablet (also point when grid becomes active) */
-/* Larger than tablet */
-/* Larger than desktop */
-/* Larger than Desktop HD */
-body {
-  margin: 60px 0; }
-
-img {
-  width: 100%; }
-
-.logo a {
-  color: black; }
-
-.logo a, nav a {
-  text-decoration: none; }
-
-.home {
-  text-align: center; }
-
-nav > ul > li {
-  list-style: none; }
-
-section li {
-  padding-left: 1.28571429em;
-  text-indent: -1.28571429em; }
-
-#map {
-  border: 0; }
diff --git a/output/assets/style.json b/output/assets/style.json
deleted file mode 100644
index 1554fb4..0000000
--- a/output/assets/style.json
+++ /dev/null
@@ -1,1517 +0,0 @@
-{
-  "id" : "baremaps",
-  "version" : 8,
-  "sprite" : "",
-  "glyphs" : "https://tiles.baremaps.com/fonts/{fontstack}/{range}.pbf",
-  "sources" : {
-    "baremaps" : {
-      "bounds" : [ 5.8358, 45.6591, 10.9794, 47.87 ],
-      "maxZoom" : 14.0,
-      "minZoom" : 6.0,
-      "tiles" : [ "https://tiles.baremaps.com/2021-01-03/{z}/{x}/{y}.pbf" ],
-      "type" : "vector"
-    }
-  },
-  "layers" : [ {
-    "id" : "background",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "background-color" : "rgb(242, 239, 233)"
-    },
-    "source" : "baremaps",
-    "type" : "background"
-  }, {
-    "filter" : [ "any", [ "==", "amenity", "kindergarten" ], [ "==", "amenity", "school" ], [ "==", "amenity", "college" ], [ "==", "amenity", "university" ] ],
-    "id" : "amenity_education",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(255, 255, 228)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "amenity",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "village_green" ] ],
-    "id" : "landuse_village_green",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(205, 235, 176)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "salt_pond" ] ],
-    "id" : "landuse_salt_pond",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 211, 223)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "reservoir" ] ],
-    "id" : "landuse_reservoir",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 211, 223)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "religious" ] ],
-    "id" : "landuse_religious",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(205, 204, 201)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "recreation_ground" ] ],
-    "id" : "landuse_recreation_ground",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(223, 252, 226)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "railway" ] ],
-    "id" : "landuse_railway",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(236, 218, 233)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "quarry" ] ],
-    "id" : "landuse_quarry",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(195, 194, 194)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "plant_nursery" ] ],
-    "id" : "landuse_plant_nursery",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(174, 223, 162)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "military" ] ],
-    "id" : "landuse_military",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(242, 228, 221)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "landfill" ] ],
-    "id" : "landuse_landfill",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(182, 182, 144)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "greenhouse_horticulture" ] ],
-    "id" : "landuse_greenhouse_horticulture",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(237, 240, 214)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "greenfield" ] ],
-    "id" : "landuse_greenfield",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(242, 238, 232)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "grass" ] ],
-    "id" : "landuse_grass",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(207, 237, 165)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "garages" ] ],
-    "id" : "landuse_garages",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(222, 221, 204)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "cemetery" ] ],
-    "id" : "landuse_cemetery",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 203, 175)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "brownfield" ] ],
-    "id" : "landuse_brownfield",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(182, 182, 144)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "basin" ] ],
-    "id" : "landuse_basin",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 211, 223)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "vineyard" ] ],
-    "id" : "landuse_vineyard",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(172, 225, 161)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "orchard" ] ],
-    "id" : "landuse_orchard",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(172, 225, 161)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "meadow" ] ],
-    "id" : "landuse_meadow",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(205, 235, 176)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "farmyard" ] ],
-    "id" : "landuse_farmyard",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(238, 213, 179)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "farmland" ] ],
-    "id" : "landuse_farmland",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(237, 240, 214)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "allotments" ] ],
-    "id" : "landuse_allotments",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(202, 224, 191)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "retail" ] ],
-    "id" : "landuse_retail",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(254, 213, 208)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "residential" ] ],
-    "id" : "landuse_residential",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(225, 225, 225)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "construction" ] ],
-    "id" : "landuse_construction",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(199, 199, 180)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "commercial" ] ],
-    "id" : "landuse_commercial",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(242, 216, 217)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "highway", "pedestrian" ] ],
-    "id" : "landuse_pedestrian",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(221, 221, 233)",
-      "fill-outline-color" : "rgb(184, 183, 182)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "natural", "sand" ] ],
-    "id" : "natural_sand",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(240, 229, 196)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "shingle" ] ],
-    "id" : "natural_shingle",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(232, 223, 216)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "scree" ] ],
-    "id" : "natural_scree",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(232, 223, 216)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "bare_rock" ] ],
-    "id" : "natural_bare_rock",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(217, 212, 206)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "grassland" ] ],
-    "id" : "natural_grassland",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(207, 236, 177)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "heath" ] ],
-    "id" : "natural_heath",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(214, 217, 159)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "scrub" ] ],
-    "id" : "natural_scrub",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(201, 216, 173)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "wood" ] ],
-    "id" : "natural_wood",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(157, 202, 138)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "glacier" ] ],
-    "id" : "natural_glacier",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(221, 236, 236)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "track" ] ],
-    "id" : "leisure_track",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(196, 224, 203)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "swimming_pool" ] ],
-    "id" : "leisure_swimming_pool",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 211, 223)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(120, 183, 202)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "stadium" ] ],
-    "id" : "leisure_stadium",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(223, 252, 226)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "sports_centre" ] ],
-    "id" : "leisure_sports_centre",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(223, 252, 226)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "leisure", "pitch" ], [ "==", "leisure", "track" ] ],
-    "id" : "leisure_pitch",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 224, 203)",
-      "fill-outline-color" : "rgb(147, 210, 185)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "nature_reserve" ] ],
-    "id" : "leisure_nature_reserve",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "line-width" : 5,
-      "line-color" : "rgba(230, 233, 222, 0.5)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "line"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "miniature_golf" ] ],
-    "id" : "leisure_miniature_golf",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(181, 226, 181)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "marina" ] ],
-    "id" : "leisure_marina",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(181, 208, 208)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(164, 187, 212)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "ice_rink" ] ],
-    "id" : "leisure_ice_rink",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(221, 236, 236)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(140, 220, 189)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "golf_course" ] ],
-    "id" : "leisure_golf_course",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(181, 226, 181)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "garden" ] ],
-    "id" : "leisure_garden",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(205, 235, 176)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "dog_park" ] ],
-    "id" : "leisure_dog_park",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(224, 252, 227)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "park" ] ],
-    "id" : "leisure_park",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(200, 250, 204)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "leisure", "playground" ] ],
-    "id" : "leisure_playground",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(223, 252, 226)",
-      "fill-outline-color" : "rgb(164, 221, 169)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "leisure",
-    "type" : "fill"
-  }, {
-    "id" : "aerialway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(177, 177, 175)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "aerialway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "natural", "beach" ] ],
-    "id" : "natural_beach",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(255, 241, 186)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "natural",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "amenity", "grave_yard" ] ],
-    "id" : "amenity_grave_yard",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 203, 175)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "amenity",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "amenity", "parking" ], [ "==", "amenity", "motorcycle_parking" ] ],
-    "id" : "amenity_parking",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(238, 238, 238)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(222, 214, 214)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "amenity",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "industrial" ] ],
-    "id" : "landuse_industrial",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(236, 218, 233)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "==", "landuse", "forest" ] ],
-    "id" : "landuse_forest",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(171, 210, 156)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "type" : "fill"
-  }, {
-    "id" : "water",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(170, 211, 223)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(170, 211, 223)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "water",
-    "type" : "fill"
-  }, {
-    "id" : "waterway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(170, 211, 223)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "waterway",
-    "type" : "line"
-  }, {
-    "id" : "building",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(216, 208, 201)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(199, 185, 174)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "building",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "bridleway" ] ],
-    "id" : "highway_bridleway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(68, 159, 66)",
-      "line-dasharray" : [ 2, 2 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "all", [ "has", "area" ], [ "any", [ "==", "highway", "footway" ], [ "==", "highway", "path" ], [ "==", "highway", "sidewalk" ], [ "==", "highway", "crossing" ], [ "==", "highway", "steps" ] ] ],
-    "id" : "highway_path_area",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(221, 221, 231)",
-      "fill-outline-color" : "rgb(168, 181, 171)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "!has", "area" ], [ "any", [ "==", "highway", "footway" ], [ "==", "highway", "path" ], [ "==", "highway", "sidewalk" ], [ "==", "highway", "crossing" ], [ "==", "highway", "steps" ] ] ],
-    "id" : "highway_path",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(250, 132, 117)",
-      "line-dasharray" : [ 2, 2 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "raceway" ] ],
-    "id" : "highway_raceway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 4,
-      "line-color" : "rgb(254, 192, 202)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "bus_guideway" ] ],
-    "id" : "highway_bus_guideway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 4,
-      "line-color" : "rgb(102, 102, 255)",
-      "line-dasharray" : [ 4, 2 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "track" ] ],
-    "id" : "highway_track",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(173, 132, 39)",
-      "line-dasharray" : [ 4, 2, 2, 2 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "all", [ "has", "area" ], [ "==", "highway", "pedestrian" ] ],
-    "id" : "highway_pedestrian_area",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(221, 221, 231)",
-      "fill-outline-color" : "rgb(183, 183, 186)",
-      "fill-antialias" : true
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "fill"
-  }, {
-    "filter" : [ "all", [ "!has", "area" ], [ "==", "highway", "pedestrian" ] ],
-    "id" : "highway_pedestrian_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(184, 183, 182)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "all", [ "!has", "area" ], [ "==", "highway", "pedestrian" ] ],
-    "id" : "highway_pedestrian",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(221, 221, 231)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "road" ] ],
-    "id" : "highway_road_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(201, 201, 200)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "road" ] ],
-    "id" : "highway_road",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(221, 221, 221)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "service" ] ],
-    "id" : "highway_service_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(213, 211, 211)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "service" ] ],
-    "id" : "highway_service",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(254, 254, 254)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "living_street" ] ],
-    "id" : "highway_living_street_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(207, 207, 207)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "living_street" ] ],
-    "id" : "highway_living_street",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(237, 237, 237)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "residential" ] ],
-    "id" : "highway_residential_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(211, 207, 206)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "residential" ] ],
-    "id" : "highway_residential",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(254, 254, 254)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "unclassified" ] ],
-    "id" : "highway_unclassified_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(211, 207, 206)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "unclassified" ] ],
-    "id" : "highway_unclassified",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(254, 254, 254)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "tertiary" ], [ "==", "highway", "tertiary_link" ] ],
-    "id" : "highway_tertiary_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(190, 189, 188)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "tertiary" ], [ "==", "highway", "tertiary_link" ] ],
-    "id" : "highway_tertiary",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(254, 254, 254)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "secondary" ], [ "==", "highway", "secondary_link" ] ],
-    "id" : "highway_secondary_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(154, 166, 67)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "secondary" ], [ "==", "highway", "secondary_link" ] ],
-    "id" : "highway_secondary",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(248, 250, 202)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "primary" ], [ "==", "highway", "primary_link" ] ],
-    "id" : "highway_primary_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 16 ] ]
-      },
-      "line-color" : "rgb(192, 147, 62)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "primary" ], [ "==", "highway", "primary_link" ] ],
-    "id" : "highway_primary",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(253, 221, 179)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "trunk" ], [ "==", "highway", "trunk_link" ] ],
-    "id" : "highway_trunk_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 16 ] ]
-      },
-      "line-color" : "rgb(217, 111, 78)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "trunk" ], [ "==", "highway", "trunk_link" ] ],
-    "id" : "highway_trunk",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(250, 193, 172)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "motorway" ], [ "==", "highway", "motorway_link" ] ],
-    "id" : "highway_motorway_casing",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 16 ] ]
-      },
-      "line-color" : "rgb(227, 82, 126)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "highway", "motorway" ], [ "==", "highway", "motorway_link" ] ],
-    "id" : "highway_motorway",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 12 ] ]
-      },
-      "line-color" : "rgb(233, 144, 161)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "highway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "bridge", "yes" ] ],
-    "id" : "railway_bridge",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 24 ] ]
-      },
-      "line-color" : "rgb(197, 197, 196)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "railway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "railway", "rail" ], [ "==", "railway", "funicular" ], [ "==", "railway", "light_rail" ], [ "==", "railway", "monorail" ], [ "==", "railway", "tram" ], [ "==", "railway", "subway" ] ],
-    "id" : "railway_rail_offset",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 8 ] ]
-      },
-      "line-color" : "rgb(112, 112, 112)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "railway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "railway", "rail" ], [ "==", "railway", "funicular" ] ],
-    "id" : "railway_rail",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 6 ] ]
-      },
-      "line-color" : "rgb(255, 255, 255)",
-      "line-dasharray" : [ 2, 4 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "railway",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "railway", "miniature" ], [ "==", "railway", "narrow_gauge" ], [ "==", "railway", "preserved" ], [ "==", "railway", "turntable" ] ],
-    "id" : "railway_light_rail",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(102, 102, 102)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "railway",
-    "type" : "line"
-  }, {
-    "id" : "route_ferry",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(102, 102, 255)",
-      "line-dasharray" : [ 4, 4 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "route",
-    "type" : "line"
-  }, {
-    "id" : "boundary",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : 1,
-      "line-color" : "rgb(207, 155, 203)",
-      "line-dasharray" : [ 8, 2, 2, 2 ]
-    },
-    "source" : "baremaps",
-    "source-layer" : "boundary",
-    "type" : "line"
-  }, {
-    "filter" : [ "any", [ "==", "power", "tower" ], [ "==", "power", "pole" ], [ "==", "power", "portal" ], [ "==", "power", "catenary_mast" ] ],
-    "id" : "power_tower",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "circle-color" : "rgb(171, 171, 171)",
-      "circle-opacity" : 1,
-      "circle-radius" : {
-        "stops" : [ [ 13, 1 ], [ 14, 2 ], [ 15, 3 ], [ 16, 4 ], [ 17, 5 ], [ 18, 6 ] ]
-      }
-    },
-    "source" : "baremaps",
-    "source-layer" : "points",
-    "type" : "circle"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "tree" ] ],
-    "id" : "natural_tree",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "circle-color" : "rgb(113, 205, 111)",
-      "circle-opacity" : 1,
-      "circle-radius" : {
-        "stops" : [ [ 14, 0.75 ], [ 15, 1.5 ], [ 16, 3 ], [ 17, 6 ], [ 18, 12 ] ]
-      }
-    },
-    "source" : "baremaps",
-    "source-layer" : "points",
-    "type" : "circle"
-  }, {
-    "filter" : [ "all", [ "==", "natural", "tree" ] ],
-    "id" : "natural_trunk",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "circle-color" : "rgb(129, 94, 39)",
-      "circle-opacity" : 1,
-      "circle-radius" : {
-        "stops" : [ [ 14, 0.25 ], [ 15, 0.5 ], [ 16, 1 ], [ 17, 2 ], [ 18, 4 ] ]
-      }
-    },
-    "source" : "baremaps",
-    "source-layer" : "points",
-    "type" : "circle"
-  }, {
-    "filter" : [ "any", [ "==", "power", "plant" ], [ "==", "power", "substation" ] ],
-    "id" : "power_station",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgb(226, 203, 222)",
-      "fill-antialias" : true,
-      "fill-outline-color" : "rgb(171, 171, 171)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "power",
-    "type" : "fill"
-  }, {
-    "filter" : [ "any", [ "==", "power", "cable" ], [ "==", "power", "line" ] ],
-    "id" : "power_cable_line",
-    "layout" : {
-      "visibility" : "visible",
-      "line-cap" : "round",
-      "line-join" : "round"
-    },
-    "paint" : {
-      "line-width" : {
-        "base" : 1.2,
-        "stops" : [ [ 4, 0 ], [ 20, 4 ] ]
-      },
-      "line-color" : "rgb(171, 171, 171)"
-    },
-    "source" : "baremaps",
-    "source-layer" : "power",
-    "type" : "line"
-  } ]
-}
\ No newline at end of file
diff --git a/output/developer-manual/geocoder/index.html b/output/developer-manual/geocoder/index.html
deleted file mode 100644
index cbe4c6c..0000000
--- a/output/developer-manual/geocoder/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Geocoder - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="geocoder">Geocoder</h1>
-
-<p>TODO</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/geocoder/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/how-to-build-with-maven/index.html b/output/developer-manual/how-to-build-with-maven/index.html
deleted file mode 100644
index b8ba3e4..0000000
--- a/output/developer-manual/how-to-build-with-maven/index.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>How to build with Maven - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="how-to-build-with-maven">How to Build with Maven</h1>
-
-<p>This guide describes the basics of compiling Baremaps from source. In order to run Apache Baremaps, you first need to install Java 17 or a later version.
-<a href="https://sdkman.io/" target="_blank">SDKMAN</a> provides a convenient Command Line Interface (CLI) to install and upgrade Java. We also suggest you use the most recent version of Maven
-to compile <a href="https://maven.apache.org/download.cgi" target="_blank">(at least 3.x.x)</a>.</p>
-
-<h3 id="linux-or-osx">Linux or OSX</h3>
-
-<p>To start you can run the command <code class="language-plaintext highlighter-rouge">mvn clean package</code> from the root folder of the Baremaps project.  Upon successful
-compilation you should see something similar to the following output in your terminal.</p>
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO] Building zip: /path-to-project/baremaps/baremaps-cli/target/baremaps.zip
-[INFO] ------------------------------------------------------------------------
-[INFO] Reactor Summary for baremaps 0.7.1-SNAPSHOT:
-[INFO] 
-[INFO] baremaps ........................................... SUCCESS [  4.172 s]
-[INFO] baremaps-core ...................................... SUCCESS [ 59.018 s]
-[INFO] baremaps-benchmark ................................. SUCCESS [  1.775 s]
-[INFO] baremaps-ogcapi .................................... SUCCESS [  9.796 s]
-[INFO] baremaps-server .................................... SUCCESS [  0.787 s]
-[INFO] baremaps-cli ....................................... SUCCESS [ 20.687 s]
-[INFO] ------------------------------------------------------------------------
-</code></pre></div></div>
-
-<p>It is important to note the first line in the output above that notes where the location of the <code class="language-plaintext highlighter-rouge">baremaps.zip</code> file resides.
-Referencing the location of the <code class="language-plaintext highlighter-rouge">baremaps.zip</code> file, you can run the following to unzip 
-and place Baremaps into your <code class="language-plaintext highlighter-rouge">PATH</code></p>
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ unzip /path-to-project/baremaps/baremaps-cli/target/baremaps.zip
-$ export PATH=$PATH:`pwd`/baremaps/bin
-</code></pre></div></div>
-
-<p>Executing the <code class="language-plaintext highlighter-rouge">baremaps</code> command should now result in an output similar to the following:</p>
-
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Usage: baremaps [COMMAND]
-A toolkit for producing vector tiles.
-Commands:
-  import  Import OpenStreetMap data in the Postgresql database.
-  update  Update OpenStreetMap data in the Postgresql database.
-  export  Export vector tiles from the Postgresql database.
-  serve   Serve vector tiles from the the Postgresql database.
-</code></pre></div></div>
-
-<p>From here, head into <a href="/getting-started/installing-postgis/">Installing PostGIS</a> if you plan to work with vector tiles.</p>
-
-<p>If you want to work on <a href="/examples/geocoding/">Geocoding</a> or
-<a href="/examples/ip-to-location/">IP to location</a>, head directly into the related examples.</p>
-
-<h3 id="windows">Windows</h3>
-
-<p>If you are using Windows, you will need to use <code class="language-plaintext highlighter-rouge">mvnw.cmd</code> instead of <code class="language-plaintext highlighter-rouge">./mvnw</code> and use set instead of export to set the environment variable.</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/how-to-build-with-maven/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/index.html b/output/developer-manual/index.html
deleted file mode 100644
index 103d31b..0000000
--- a/output/developer-manual/index.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Developer Manual - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="developer-manual">Developer Manual</h1>
-
-<p>The Developer Manual aims at helping developers to execute the code, understand the structure and contribute to the project.</p>
-
-<p>Go into the relevant sections to find out more about Apache Baremaps.</p>
-
-<ul>
-  <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-  <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-  <li><a href="/developer-manual/setup-with-intellij/">Set up in IntelliJ IDEA</a></li>
-  <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-  <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-  <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-</ul>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/ip-to-location/index.html b/output/developer-manual/ip-to-location/index.html
deleted file mode 100644
index 8d80f72..0000000
--- a/output/developer-manual/ip-to-location/index.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>IP to location - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="ip-to-location">IP to location</h1>
-
-<p>Using data publicly available from the 5 <a href="https://whatismyipaddress.com/rir">Regional Internet Registries (RIRs)</a> 
-we are able to generate a stream of objects detailing Internet resource allocations. We call these NIC Objects 
-(Network Information Centre Objects).</p>
-
-<p>Here is the list of the 5 RIRs.</p>
-
-<ul>
-  <li><a href="https://www.arin.net/">ARIN</a></li>
-  <li><a href="https://www.lacnic.net/">LACNIC</a></li>
-  <li><a href="https://afrinic.net/">AFRINIC</a></li>
-  <li><a href="https://www.ripe.net/">RIPE NCC</a></li>
-  <li><a href="https://www.apnic.net/">APNIC</a></li>
-</ul>
-
-<p>Using the list of NIC objects, we extract those that concern IPv4 address ranges (<a href="https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2-descriptions-of-primary-objects/4-2-4-description-of-the-inetnum-object">INETNUM</a>)
-, then using the Baremaps Geocoder API, we iterate through the extracted NIC objects to geo-locate each one of them.</p>
-
-<p>The resulting geo-localised IPv4 address ranges are stored in a SQLite database which can be easily queried to geo-locate a specific IP.</p>
-
-<p>A NIC object contains a list of attributes but these attributes are not consistent between each NIC object. 
-We try to use these 4 attributes to query the Geocoder service :</p>
-
-<ul>
-  <li><em>address</em> contains the address of the NIC Object</li>
-  <li><em>descr</em> sometimes contains the address of the NIC Object</li>
-  <li><em>country</em> contains the country code in ISO format (ISO 3166) - <a href="https://www.ripe.net/participate/member-support/list-of-members/list-of-country-codes-and-rirs">RIPE list of country codes</a></li>
-  <li><em>geoloc</em> contains the latitude and longitude which can be used directly</li>
-</ul>
-
-<p>Some NIC Objects contain a reference to an organisation, and the organisation’s NIC Object itself contains the 
-geo-localisation information. However, we don’t make use of that for now.</p>
-
-<p>The <a href="https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-documentation/ripe-database-structure">structure of the RIPE database</a>
-should be applicable to all the RIRs.</p>
-
-<h2 id="generating-the-ip-to-location-database">Generating the IP to location database</h2>
-
-<p>A workflow is a directed acyclic graph of steps executed by Baremaps. To download and import the sample OSM data in Postgres, execute the following <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/ip-to-location/workflow.js">workflow</a>.</p>
-
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>baremaps workflow execute --file examples/ip-to-location/workflow.js
-</code></pre></div></div>
-
-<p>Depending on the size of the OpenStreetMap file, the execution of this command may take some time.
-Eventually, the output produced by the command should look as follows.</p>
-
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[INFO ] 2022-12-08 12:56:05.417 [main] Execute - Executing the workflow examples/ip-to-location/workflow.js
-[INFO ] 2022-12-08 12:56:06.031 [pool-2-thread-1] DownloadUrl - Downloading https://ftp.ripe.net/ripe/dbase/ripe.db.gz to downloads/ripe.db.gz
-[INFO ] 2022-12-08 12:56:06.031 [pool-2-thread-2] DownloadUrl - Downloading https://download.geonames.org/export/dump/allCountries.zip to downloads/geonames-allcountries.zip
-...
-...
-...
-[INFO ] 2022-07-26 09:48:21.368 [main] Workflow - Finished executing workflow examples/ip-to-location/workflow.js
-</code></pre></div></div>
-
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>iploc serve --database iploc.db --port 3000
-</code></pre></div></div>
-
-<h2 id="code-usage">Code usage</h2>
-
-<p>In order to generate the SQLite database that contains the geo-localised IP address ranges you must follow a few steps.</p>
-
-<p>1) First you need to load/build a Geocoder which will be used to query the addresses contained in the NIC objects.</p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Geocoder</span> <span class="n">geocoder</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">GeonamesGeocoder</span><span class="o">(</span><span class="n">indexPath</span><span class="o">,</span> <span class="n">dataUri</span><span class="o">);</span>
-<span class="n">geocoder</span><span class="o">.</span><span class="na">build</span><span class="o">();</span>
-</code></pre></div></div>
-
-<p>2) Then you need to generate a Stream of NIC Objects. You can use the Nic Fetcher to automatically download all of the NIC Objects from the 5 RIRs.</p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Stream</span><span class="o">&lt;</span><span class="nc">Path</span><span class="o">&gt;</span> <span class="n">nicPathsStream</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">NicFetcher</span><span class="o">().</span><span class="na">fetch</span><span class="o">();</span>
-<span class="nc">Stream</span><span class="o">&lt;</span><span class="nc">NicObject</span><span class="o">&gt;</span> <span class="n">nicObjectStream</span> <span class="o">=</span>
-    <span class="n">nicPathsStream</span><span class="o">.</span><span class="na">flatMap</span><span class="o">(</span><span class="n">nicPath</span> <span class="o">-&gt;</span> <span class="o">{</span>
-        <span class="k">try</span> <span class="o">{</span>
-            <span class="k">return</span> <span class="nc">NicParser</span><span class="o">.</span><span class="na">parse</span><span class="o">(</span><span class="k">new</span> <span class="nc">BufferedInputStream</span><span class="o">(</span><span class="nc">Files</span><span class="o">.</span><span class="na">newInputStream</span><span class="o">(</span><span class="n">nicPath</span><span class="o">)));</span>
-        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">IOException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
-            <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
-        <span class="o">}</span>
-        <span class="k">return</span> <span class="nc">Stream</span><span class="o">.</span><span class="na">empty</span><span class="o">();</span>
-    <span class="o">});</span>
-</code></pre></div></div>
-
-<p>3) You need to create the IpLoc service, giving the target SQLite database url and the geocoder in the second parameter</p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">SqliteUtils</span><span class="o">.</span><span class="na">executeResource</span><span class="o">(</span><span class="n">databaseUrl</span><span class="o">,</span> <span class="s">"iploc_init.sql"</span><span class="o">);</span> <span class="c1">// Init the SQLite database</span>
-<span class="nc">IpLoc</span> <span class="n">ipLoc</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IpLoc</span><span class="o">(</span><span class="n">databaseUrl</span><span class="o">,</span> <span class="n">geocoder</span><span class="o">);</span>
-</code></pre></div></div>
-
-<p>4) Finally insert the stream of NIC objects in the database with the IpLoc service</p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ipLoc</span><span class="o">.</span><span class="na">insertNicObjects</span><span class="o">(</span><span class="n">nicObjects</span><span class="o">.</span><span class="na">stream</span><span class="o">());</span>
-</code></pre></div></div>
-
-<h2 id="notes">Notes</h2>
-
-<p>There are many improvements that need to be worked on to improve the Iploc module, refer to the Github issues with the
-tag <em>iploc</em> if you want to contribute.</p>
-
-<h2 id="references">References</h2>
-<ul>
-  <li><a href="https://www.iana.org/numbers">https://www.iana.org/numbers</a></li>
-  <li><a href="https://www.irr.net/docs/list.html">https://www.irr.net/docs/list.html</a></li>
-</ul>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/ip-to-location/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/project-structure/index.html b/output/developer-manual/project-structure/index.html
deleted file mode 100644
index c6c4cd5..0000000
--- a/output/developer-manual/project-structure/index.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Project structure - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="project-structure">Project structure</h1>
-
-<p>The code is structured in a way that makes it easy to understand and to contribute to the project.</p>
-
-<h2 id="modules">Modules</h2>
-
-<p>TODO</p>
-
-<h3 id="baremaps-core">Baremaps-core</h3>
-
-<p>TODO</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/project-structure/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/setup-in-intellij/index.html b/output/developer-manual/setup-in-intellij/index.html
deleted file mode 100644
index 7e9ec76..0000000
--- a/output/developer-manual/setup-in-intellij/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Set up in IntelliJ IDEA - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="set-up-in-intellij-idea">Set up in IntelliJ IDEA</h1>
-
-<p>To open the project with IntelliJ, go under file -&gt; open -&gt; …</p>
-
-<p>There are a few pre-created configurations to run the code quickly.</p>
-
-<p>TODO</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/setup-in-intellij/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/developer-manual/stylesheet/index.html b/output/developer-manual/stylesheet/index.html
deleted file mode 100644
index 63af16d..0000000
--- a/output/developer-manual/stylesheet/index.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Stylesheet - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="stylesheet">Stylesheet</h1>
-
-<p>Baremaps comes with a 
-<a href="https://github.com/apache/incubator-baremaps/tree/main/basemap">default tileset and stylesheet</a> 
-that can be used to generate vector tiles. The stylesheet is based on the
-<a href="https://github.com/gravitystorm/openstreetmap-carto">OpenStreetMap Carto</a>
-style.</p>
-
-<p><a href="https://demo.baremaps.com/"><img src="/assets/screenshot.jpg" alt="State of the map" /></a></p>
-
-<p>It is an ongoing effort to create an attribution-free map style.
-Your contributions are welcome.</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/developer-manual/stylesheet/stylesheet.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
-  </body>
-</html>
diff --git a/output/examples/extrusion/index.html b/output/examples/extrusion/index.html
deleted file mode 100644
index b89f7e4..0000000
--- a/output/examples/extrusion/index.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<!DOCTYPE html>
-<html lang="en-US">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Extrusion of vector tiles from OSM data - Apache Baremaps</title>
-    
-    <link rel="stylesheet" href="/assets/css/main.css">
-  </head>
-  <body>
-    <div class="container">
-      <div class="row">
-          <div class="four columns">
-            <header>
-              <h2 class="logo"><a href="/"><i class="far fa-map"></i> Apache Baremaps</a></h2>
-              <p>Apache Baremaps is a toolkit and a set of infrastructure components for creating, publishing, and operating online maps. It provides a data pipeline enabling developers to build maps with different data sources with live reload capabilities. It provides other services commonly used in online maps, such as location search and IP to location.</p>
-              <p>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps" data-size="large" data-show-count="true"
-                   aria-label="Star apache/incubator-baremaps on GitHub">Star</a>
-                <a class="github-button" href="https://github.com/apache/incubator-baremaps/releases/latest"
-                   data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large"
-                   aria-label="Download apache/incubator-baremaps on GitHub">Download</a>
-              </p>
-            </header>
-            <nav>
-              <ul>
-                
-                <li>
-                  <a href="/about/"><i class="fas fa-info-circle"></i> About</a>
-                  
-                </li>
-                
-                <li>
-                  <a href="/getting-started/"><i class="fas fa-rocket"></i> Getting Started</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/getting-started/installing-the-cli/">Installing the CLI</a></li>
-                    
-                    <li><a href="/getting-started/installing-postgis/">Installation PostGIS</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/examples/"><i class="fas fa-vial"></i> Examples</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/examples/import-osm-into-postgis/">Import OSM data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-naturalearth-into-postgis/">Import Natural Earth data into PostGIS</a></li>
-                    
-                    <li><a href="/examples/import-contour-into-postgis/">Import contour lines into PostGIS</a></li>
-                    
-                    <li><a href="/examples/serve-vector-tiles/">Serve vector tiles from PostGIS</a></li>
-                    
-                    <li><a href="/examples/extrusion/">Extrusion of vector tiles from OSM data</a></li>
-                    
-                    <li><a href="/examples/ip-to-location/">Create an IP to location web service</a></li>
-                    
-                    <li><a href="/examples/geocoding/">Create a geocoding web service</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="/developer-manual/"><i class="fas fa-code"></i> Developer Manual</a>
-                  
-                  <ul>
-                    
-                    <li><a href="/developer-manual/project-structure/">Project structure</a></li>
-                    
-                    <li><a href="/developer-manual/how-to-build-with-maven/">How to build with Maven</a></li>
-                    
-                    <li><a href="/developer-manual/setup-in-intellij/">Set up in IntelliJ IDEA</a></li>
-                    
-                    <li><a href="/developer-manual/geocoder/">Geocoder</a></li>
-                    
-                    <li><a href="/developer-manual/ip-to-location/">IP to location</a></li>
-                    
-                    <li><a href="/developer-manual/stylesheet/">Stylesheet</a></li>
-                    
-                  </ul>
-                  
-                </li>
-                
-                <li>
-                  <a href="https://demo.baremaps.com/"><i class="fas fa-map"></i> Demo</a>
-                  
-                </li>
-                
-              </ul>
-            </nav>
-          </div>
-          <article class="eight columns">
-            <h1 id="extrusion-of-vector-tiles-from-osm-data">Extrusion of vector tiles from OSM data</h1>
-
-<p>This example builds upon the <a href="https://www.baremaps.com/examples/openstreetmap/">OpenStreetMap example</a> and shows how 3d
-buildings can be extruded with Maplibre. First, start by downloading the OSM data for London in the current directory.</p>
-
-<p>To import London data in the database.</p>
-
-<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>baremaps workflow execute --file examples/extrusion/workflow.json
-</code></pre></div></div>
-
-<p>In the <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/extrusion/tileset.json">tileset.json</a>
-file, notice the SQL query associated with the building layer. Here, the number of levels stored in OSM is multiplied by
-3, which rawly corresponds to the height of a level in meters.</p>
-
-<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">id</span><span class="p">,</span>
-       <span class="n">tags</span> <span class="o">||</span> <span class="n">jsonb_build_object</span><span class="p">(</span><span class="s1">'building:height'</span><span class="p">,</span> <span class="p">(</span><span class="k">CASE</span>
-                                                          <span class="k">WHEN</span> <span class="n">tags</span> <span class="o">-&gt;&gt;</span> <span class="s1">'building:levels'</span> <span class="o">~</span> <span class="s1">'^[0-9</span><span class="se">\\</span><span class="s1">.]+$'</span>
-                                                              <span class="k">THEN</span> <span class="n">tags</span> <span class="o">-&gt;&gt;</span> <span class="s1">'building:levels'</span>
-                                                          <span class="k">ELSE</span> <span class="s1">'1'</span> <span class="k">END</span><span class="p">)::</span><span class="nb">real</span> <span class="o">*</span> <span class="mi">3</span><span class="p">),</span>
-       <span class="n">geom</span>
-<span class="k">FROM</span> <span class="n">osm_ways</span>
-<span class="k">WHERE</span> <span class="n">tags</span> <span class="o">?</span> <span class="s1">'building'</span>
-</code></pre></div></div>
-
-<p>This property is then used in
-the <a href="https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/extrusion/style.json">style.json</a> file to
-extrude the buildings.</p>
-
-<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
-  </span><span class="err">...</span><span class="w">
-  </span><span class="nl">"layers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
-    </span><span class="p">{</span><span class="w">
-      </span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"building"</span><span class="p">,</span><span class="w">
-      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fill-extrusion"</span><span class="p">,</span><span class="w">
-      </span><span class="nl">"source"</span><span class="p">:</span><span class="w"> </span><span class="s2">"baremaps"</span><span class="p">,</span><span class="w">
-      </span><span class="nl">"source-layer"</span><span class="p">:</span><span class="w"> </span><span class="s2">"building"</span><span class="p">,</span><span class="w">
-      </span><span class="nl">"paint"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
-        </span><span class="nl">"fill-extrusion-color"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rgb(152, 174, 221)"</span><span class="p">,</span><span class="w">
-        </span><span class="nl">"fill-extrusion-height"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
-          </span><span class="s2">"get"</span><span class="p">,</span><span class="w">
-          </span><span class="s2">"building:height"</span><span class="w">
-        </span><span class="p">],</span><span class="w">
-        </span><span class="nl">"fill-extrusion-base"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
-        </span><span class="nl">"fill-extrusion-opacity"</span><span class="p">:</span><span class="w"> </span><span class="mf">0.9</span><span class="w">
-      </span><span class="p">}</span><span class="w">
-    </span><span class="p">}</span><span class="w">
-  </span><span class="p">],</span><span class="w">
-  </span><span class="err">...</span><span class="w">
-</span><span class="p">}</span><span class="w">
-</span></code></pre></div></div>
-
-<p>To preview this example, start the tile viewer. Here, the cache directive is
-a <a href="https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/2.2.2/com/github/benmanes/caffeine/cache/CaffeineSpec.html">caffeine specification</a>
-for a 100MB tile cache.</p>
-
-<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>baremaps map dev <span class="se">\</span>
-  <span class="nt">--database</span> <span class="s1">'jdbc:postgresql://localhost:5432/baremaps?user=baremaps&amp;password=baremaps'</span> <span class="se">\</span>
-  <span class="nt">--tileset</span> <span class="s1">'tileset.json'</span> <span class="se">\</span>
-  <span class="nt">--style</span> <span class="s1">'style.json'</span>
-</code></pre></div></div>
-
-<p>Well done, a map of London with extruded buildings should now appear in your <a href="http://localhost:9000/">browser</a>!</p>
-
-<p><img src="screenshot.png" alt="Tile viewer" /></p>
-
-<h2 id="conclusion">Conclusion</h2>
-
-<p>In this tutorial, we learnt how to import OSM data in PostGIS with a workflow and then use the MVT specification to extrude the vector tiles into a 3d object.</p>
-
-            <p><a class="edit" href="https://github.com/apache/incubator-baremaps-site/edit/main/examples/extrusion/index.md"><i class="fas fa-edit"></i> Improve this page</a></p>
-          </article>
-      </div>
-    </div>
-    <script async defer src="https://kit.fontawesome.com/14dcd5fdfb.js" crossorigin="anonymous"></script>
-    <script async defer src="https://buttons.github.io/buttons.js" crossorigin="anonymous"></script>
... 2153 lines suppressed ...