diff --git a/build-docs.sh b/build-docs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c1dcfdd030969b1980322b0458f4b10c51083a41
--- /dev/null
+++ b/build-docs.sh
@@ -0,0 +1 @@
+sphinx-build -b html -t drawio docs/source docs/build
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..179980657be2f6306b303ad11ca949ad8f0ef4ef
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1 @@
+openapi.json
diff --git a/docs/Makefile b/docs/Makefile
index d4bb2cbb9eddb1bb1b4f366623044af8e4830919..d0c3cbf1020d5c292abdedf27627c6abe25e2293 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -5,8 +5,8 @@
 # from the environment for the first two.
 SPHINXOPTS    ?=
 SPHINXBUILD   ?= sphinx-build
-SOURCEDIR     = .
-BUILDDIR      = _build
+SOURCEDIR     = source
+BUILDDIR      = build
 
 # Put it first so that "make" without argument is like "make help".
 help:
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index 1e02268407e1934d0304fbb2bbcf72c522670138..0000000000000000000000000000000000000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-import os
-import sys
-sys.path.insert(0, os.path.abspath("../mapping_provider"))
-# -- Project information -----------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
-
-project = 'Mapping Provider'
-copyright = '2025, GÉANT'
-author = 'GÉANT'
-release = '0.1'
-
-# -- General configuration ---------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
-
-extensions = ['sphinx.ext.autodoc']
-
-templates_path = ['_templates']
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-
-
-
-# -- Options for HTML output -------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
-
-html_theme = 'alabaster'
-html_static_path = ['_static']
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644
index 314d233f32b9d009a7e92f21a2d0615807ac5982..0000000000000000000000000000000000000000
--- a/docs/index.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. Mapping Provider documentation master file, created by
-   sphinx-quickstart on Fri Apr 11 11:07:12 2025.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-Mapping Provider documentation
-==============================
-
-Add your content using ``reStructuredText`` syntax. See the
-`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
-documentation for details.
-
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Contents:
-
diff --git a/docs/make.bat b/docs/make.bat
deleted file mode 100644
index 954237b9b9f2b248bb1397a15c055c0af1cad03e..0000000000000000000000000000000000000000
--- a/docs/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=.
-set BUILDDIR=_build
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
-	echo.
-	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
-	echo.installed, then set the SPHINXBUILD environment variable to point
-	echo.to the full path of the 'sphinx-build' executable. Alternatively you
-	echo.may add the Sphinx directory to PATH.
-	echo.
-	echo.If you don't have Sphinx installed, grab it from
-	echo.https://www.sphinx-doc.org/
-	exit /b 1
-)
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd
diff --git a/docs/source/api.rst b/docs/source/api.rst
new file mode 100644
index 0000000000000000000000000000000000000000..6c371d1539eaad942457b6aac075269c016a187c
--- /dev/null
+++ b/docs/source/api.rst
@@ -0,0 +1,8 @@
+API specification
+==================
+
+Generated by openapi.json file obtained from fastapi.
+Docs are also available at the /docs route of a running server.
+
+
+.. openapi:: ./openapi.json
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..d52fe2040888b5fcd07aa1b3c59ca5e1e0f15b6b
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,59 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+from datetime import datetime
+import json
+import os
+import sys
+
+sys.path.insert(
+    0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
+)
+
+from mapping_provider import create_app
+
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+project = 'GÉANT Mapping Provider'
+copyright = f"{datetime.now().year}, GÉANT"
+author = 'swd@geant.org'
+release = '0.0'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = [
+    "sphinx_rtd_theme",
+    # "sphinx.ext.autodoc",
+    "sphinx.ext.coverage",
+    "sphinxcontrib.plantuml",
+    "sphinxcontrib.openapi",
+]
+
+# tags is injected by sphinx into conf.py
+# toggle this by running ``sphinx-build -t drawio``
+if tags.has("drawio"):  # noqa F821
+    extensions.append("sphinxcontrib.drawio")
+
+templates_path = ['_templates']
+exclude_patterns = []
+
+plantuml = f'java -jar {os.path.expanduser("~/bin/plantuml.jar")}'
+
+
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = 'sphinx_rtd_theme'
+html_static_path = ['_static']
+
+
+api_schema = create_app().openapi()
+openapi_filename = os.path.join(os.path.dirname(__file__), "openapi.json")
+with open(openapi_filename, 'w') as f:
+    json.dump(api_schema, f, indent=4)
diff --git a/docs/source/diagrams.drawio b/docs/source/diagrams.drawio
new file mode 100644
index 0000000000000000000000000000000000000000..2fa3e7478218d57f4fed3e4baeeff9734c38630d
--- /dev/null
+++ b/docs/source/diagrams.drawio
@@ -0,0 +1,122 @@
+<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9">
+  <diagram name="hl-arch" id="52Qc7nEq3IphXZwXqFKS">
+    <mxGraphModel dx="1579" dy="543" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-1" value="mapping provider" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1">
+          <mxGeometry x="110" y="30" width="240" height="240" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-2" value="map web server" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=bottom;align=right;spacingRight=5;" vertex="1" parent="1">
+          <mxGeometry x="-230" y="70" width="270" height="260" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-3" value="processor&lt;div&gt;web&lt;/div&gt;&lt;div&gt;service&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="-120" y="170" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-4" value="mapping-provider" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="170" y="170" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-5" value="GSO" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="460" y="50" width="110" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-4">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="110" y="260" as="sourcePoint" />
+            <mxPoint x="160" y="210" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-7" value="REST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
+          <mxGeometry x="50" y="175" width="60" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-8" value="template" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;dashed=1;dashPattern=1 2;" vertex="1" parent="1">
+          <mxGeometry x="-100" y="270" width="80" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-8" target="qRnl4kCob0Xuz_cL3leS-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="110" y="280" as="sourcePoint" />
+            <mxPoint x="160" y="230" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-10" value="Client" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
+          <mxGeometry x="-400" y="105" width="30" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-11" value="map/gui" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=12;" vertex="1" parent="1">
+          <mxGeometry x="-210" y="120" width="80" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=80;entryDy=21;entryPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-3" target="qRnl4kCob0Xuz_cL3leS-11">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="30" y="270" as="sourcePoint" />
+            <mxPoint x="80" y="220" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="-60" y="141" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-11" target="qRnl4kCob0Xuz_cL3leS-10">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="30" y="250" as="sourcePoint" />
+            <mxPoint x="80" y="200" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-14" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-5" target="qRnl4kCob0Xuz_cL3leS-4">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="170" y="230" as="sourcePoint" />
+            <mxPoint x="480" y="200" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="420" y="80" />
+              <mxPoint x="420" y="200" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-15" value="Inventory Provider" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="460" y="130" width="110" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-16" value="Dashboard" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="460" y="205" width="110" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-17" value="BRIAN (InfluxDB)" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+          <mxGeometry x="460" y="280" width="110" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-17" target="qRnl4kCob0Xuz_cL3leS-4">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="470" y="90" as="sourcePoint" />
+            <mxPoint x="300" y="210" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="420" y="310" />
+              <mxPoint x="420" y="200" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-19" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-15" target="qRnl4kCob0Xuz_cL3leS-4">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="470" y="90" as="sourcePoint" />
+            <mxPoint x="300" y="210" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="420" y="160" />
+              <mxPoint x="420" y="200" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-20" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-16" target="qRnl4kCob0Xuz_cL3leS-4">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="470" y="170" as="sourcePoint" />
+            <mxPoint x="300" y="210" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="420" y="235" />
+              <mxPoint x="420" y="200" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-21" value="cache/state" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
+          <mxGeometry x="170" y="50" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="qRnl4kCob0Xuz_cL3leS-22" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=3;fillColor=#0050ef;strokeColor=#001DBC;" edge="1" parent="1" source="qRnl4kCob0Xuz_cL3leS-4" target="qRnl4kCob0Xuz_cL3leS-21">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="170" y="190" as="sourcePoint" />
+            <mxPoint x="220" y="140" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9c2aca8206114c6708ef485b1ba1de22cf9cf27e
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,16 @@
+.. GÉANT Mapping Provider documentation master file, created by
+   sphinx-quickstart on Mon Apr 14 11:36:42 2025.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+GÉANT Mapping Provider documentation
+====================================
+
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
+   api
+   planning
+
diff --git a/docs/mapping_provider.rst b/docs/source/mapping_provider.rst
similarity index 99%
rename from docs/mapping_provider.rst
rename to docs/source/mapping_provider.rst
index be150b11e5f4b4038ef45b09484e7e5faea138a6..dad01fb843acad3b5ee1364bea300af8dc375ecd 100644
--- a/docs/mapping_provider.rst
+++ b/docs/source/mapping_provider.rst
@@ -19,3 +19,4 @@ Module contents
    :members:
    :undoc-members:
    :show-inheritance:
+
diff --git a/docs/modules.rst b/docs/source/modules.rst
similarity index 98%
rename from docs/modules.rst
rename to docs/source/modules.rst
index abfd948826a632a075d4eafc015d5d4973940e56..823c103fbb5633a3b8f2ac6452ff7ab5c1c8d67d 100644
--- a/docs/modules.rst
+++ b/docs/source/modules.rst
@@ -5,3 +5,4 @@ mapping_provider
    :maxdepth: 4
 
    mapping_provider
+
diff --git a/docs/source/nren-maps.html b/docs/source/nren-maps.html
new file mode 100644
index 0000000000000000000000000000000000000000..6d9530c5f45511a64dcd159f755d42d30c9827c6
--- /dev/null
+++ b/docs/source/nren-maps.html
@@ -0,0 +1,242 @@
+.. raw:: html
+
+    <table border="1">
+        <thead>
+            <tr>
+                <th>NREN</th>
+                <th>Static Network Map Image</th>
+                <th>Interactive Network Map</th>
+                <th>Comment</th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr>
+                <td>ACOnet</td>
+                <td>https://www.aco.net/topologie.html?L=1</td>
+            </tr>
+            <tr>
+                <td>AMRES</td>
+                <td>https://www.amres.ac.rs/amres/amres-infrastruktura</td>
+                <td>https://www.amres.ac.rs/amres/amres-infrastruktura</td>
+            </tr>
+            <tr>
+                <td>ARNES</td>
+                <td>https://www.arnes.si/en/infrastructure/</td>
+            </tr>
+            <tr>
+                <td>ASNET-AM</td>
+                <td>https://asnet.am/images/skhema1.jpg</td>
+            </tr>
+            <tr>
+                <td>AzScienceNet</td>
+                <td>https://azsciencenet.az/uploads/AzScienceNet_schem.png</td>
+            </tr>
+            <tr>
+                <td>Belnet</td>
+                <td>https://www.belnet.be/en/networks/belnet-network</td>
+            </tr>
+            <tr>
+                <td>BASNET</td>
+            </tr>
+
+            <tr>
+                <td>BREN</td>
+            </tr>
+
+            <tr>
+                <td>CARNET</td>
+            </tr>
+
+            <tr>
+                <td>CESNET</td>
+                <td>https://photonics.cesnet.cz/cs/topologie</td>
+                <td>https://netreport.cesnet.cz/netreport/</td>
+            </tr>
+
+            <tr>
+                <td>CSC</td>
+                <td></td>
+                <td>https://netmap.funet.fi/</td>
+                <td>closest to our requirement in terms of overlay and grafana</td>
+            </tr>
+
+            <tr>
+                <td>CYNET</td>
+            </tr>
+
+            <tr>
+                <td>DeiC</td>
+                <td>https://www.deic.dk/en/research-network</td>
+            </tr>
+
+            <tr>
+                <td>DFN</td>
+                <td></td>
+                <td>https://www.dfn.de/netz/</td>
+                <td>not very informative</td>
+            </tr>
+
+            <tr>
+                <td>EENet</td>
+                <td>https://www.eenet.ee/EENet/magistraalvork</td>
+            </tr>
+
+            <tr>
+                <td>FCCN</td>
+                <td>https://www.fccn.pt/media/2022/04/Mapa-de-Rede-Fibra-2022.pdf</td>
+            </tr>
+
+            <tr>
+                <td>GARR</td>
+                <td>https://www.garr.it/en/infrastructures/network-infrastructure/our-network</td>
+                <td>https://gins.garr.it/xhome_weathermaps.php</td>
+                <td>interactive map seems good way to breakdown</td>
+            </tr>
+
+            <tr>
+                <td>GRENA</td>
+                <td>https://netview.grena.ge/</td>
+                <td></td>
+                <td>login required</td>
+            </tr>
+
+            <tr>
+                <td>GRNET</td>
+                <td>
+                    <p>https://grnet.gr/infrastructure/network-and-topology/</p>
+                    <p>https://mon.grnet.gr/networkmap/?type=network&raw=True</p>
+                    <p>https://mon.grnet.gr/networkmap/</p>
+                </td>https://mon.grnet.gr/pops/</td>
+                <td>good starting point from site </td>
+            </tr>
+
+            <tr>
+                <td>HEAnet</td>
+                <td>https://www.heanet.ie/the-network</td>
+                <td>https://www.hea.net/</td>
+                <td>map an service is separately represented</td>
+            </tr>
+
+            <tr>
+                <td>IUCC</td>
+            </tr>
+
+            <tr>
+                <td>KIFU</td>
+                <td>https://kifu.gov.hu/infrastructure/</td>
+            </tr>
+
+            <tr>
+                <td>KREN</td>
+            </tr>
+
+            <tr>
+                <td>LAT</td>
+            </tr>
+
+            <tr>
+                <td>LITNET</td>
+                <td>https://litnet.lt/</td>
+            </tr>
+
+            <tr>
+                <td>MARnet</td>
+                <td>https://ukim.edu.mk/megjunarodna-sorabotka/internacionalizacija/chlenstvo-vo-akademski-mrezhi/</td>
+            </tr>
+
+            <tr>
+                <td>MREN</td>
+                <td></td>
+                <td>https://netmon.ucg.ac.me/mantra/</td>
+                <td>no map overlay</td>
+            </tr>
+
+            <tr>
+                <td>PSNC</td>
+                <td>https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier</td>
+                <td>neat representation on side panel</td>
+            </tr>
+
+            <tr>
+                <td>RARE</td>
+                <td></td>
+                <td>https://gfn-gp4l-rare.public.nmaas.eu/dashboards/f/ddyhkm9cflc74c/gp4l</td>
+            </tr>
+
+            <tr>
+                <td>RASH</td>
+                <td>https://www.rash.al/media/filer_public_thumbnails/filer_public/bc/a7/bca70fbc-295c-4a4b-9873-92a4a64791b3/rrjeti_i_skeme_i_geant.jpg__1280x736_q85_subsampling-2.jpg
+                </td>
+            </tr>
+
+            <tr>
+                <td>RedIRIS</td>
+                <td>https://www.rediris.es/lared/mapa.html</td>
+            </tr>
+
+            <tr>
+                <td>RENAM</td>
+            </tr>
+
+            <tr>
+                <td>RENATER</td>
+                <td>
+                    <p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/metropole/</p>
+                    <p>https://www.renater.fr/documentation/ressources-multimedia/weathermap/weathermap_domtom/</p>
+                </td>
+            </tr>
+
+            <tr>
+                <td>Restena</td>
+                <td>https://www.restena.lu/en/network</td>
+            </tr>
+
+            <tr>
+                <td>RHnet</td>
+            </tr>
+
+            <tr>
+                <td>RoEdunet</td>
+            </tr>
+
+            <tr>
+                <td>SANET</td>
+                <td>https://www.sanet.sk/?page_id=2388</td>
+            </tr>
+
+            <tr>
+                <td>Sikt</td>
+                <td>https://stats.uninett.no/stat-q/load-map/uninett,,traffic,peak</td>
+            </tr>
+
+            <tr>
+                <td>SUNET</td>
+                <td>http://stats.sunet.se/stat-q/load-map/SunetC-univ,,traffic,peak</td>
+            </tr>
+
+            <tr>
+                <td>SURF</td>
+                <td></td>
+                <td>https://netwerkdashboard.surfnet.nl/</td>
+                <td>inaccesible</td>
+            </tr>
+
+            <tr>
+                <td>SWITCH</td>
+                <td>https://static.www.switch.ch/sites/default/files/styles/hero_large_16_9/public/2024-10/omg.png?itok=gDXPFCmI
+                </td>
+            </tr>
+
+            <tr>
+                <td>ULAKBIM</td>
+                <td>https://stat.ulakbim.gov.tr/ulaknet/</td>
+                <td>small size poor network direction but has integration with data speed info</td>
+            </tr>
+
+            <tr>
+                <td>URAN</td>
+                <td>https://uran.ua/~eng/net-ukraine.htm</td>
+            </tr>
+
+        </tbody>
+    </table>
\ No newline at end of file
diff --git a/docs/source/planning.rst b/docs/source/planning.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9b8be646e58b65e90260a07234704a78c168f85f
--- /dev/null
+++ b/docs/source/planning.rst
@@ -0,0 +1,141 @@
+Planning, Design, etc
+=====================================
+
+.. contents:: Contents
+   :depth: 4
+   :local:
+
+
+Nominal Use Cases/Requirements
+------------------------------
+
+- replace intermapper/heat map
+
+   - availability
+   - capacity
+   - utilisation
+   - etc.
+
+- integrate with connectivity map
+
+   - visualize geant-owned data-driven info on the same map with static (manually input/managed) non-geant data
+
+- monitoring
+
+   - health of nodes/edges
+   - alarms/link state edge heat map
+
+- grid-based for fixed (e.g. our) networks
+- handle overlapping edges
+
+
+Ideas
+-----
+
+- For the Geant-managed heat maps: maybe nice to agree upon a simple grid-locked geo-node/edge approach
+
+Some R&E Samples
+----------------
+
+- ESNet - Netsage
+
+  - https://portal.netsage.global
+  - https://www.netsage.global
+  - https://github.com/GlobalNOC/globalnoc-networkmap-panel
+  - https://grafana.com/grafana/plugins/esnet-networkmap-panel/
+  - https://github.com/esnet/grafana-esnet-networkmap-panel/tree/main
+
+- Jisc - Netsight3
+
+  - https://www.jisc.ac.uk/netsight
+  - https://netsight3.ja.net/help/
+
+- SURF Netwerk Dashboard
+
+  - https://netwerkdashboard.surfnet.nl/
+
+- Reannz weathermap:
+
+  - https://weathermap.reannz.co.nz/
+
+- Funet network load map:
+
+  - https://netmap.funet.fi/
+
+- NORDUnet:
+
+  - https://stats.nordu.net/stat-q/load-map/ndn-map,,traffic,peak
+
+- Pionier/PSNC:
+
+  - https://pionier.net.pl/en/about-pionier/#interaktywna_mapa_sieci_pionier
+
+- Timemap (WP6, mainly GARR)
+
+  - https://timemap.geant.org/
+  - https://gitlab.geant.org/fabio.farina/timemap (New link https://gitlab.software.geant.org/fabio.farina/timemap )
+
+Misc Internal things
+--------------------
+
+- IS/IS-driven: http://netdash.geant.net:8080/static/isis/geantISIS.svg
+- Intermapper
+
+  - https://weathermap.geant.org/g59bce200/document/_/!index.html?REFRESH=10+Seconds
+
+- ULAKBIM
+
+  - https://stat.ulakbim.gov.tr/ulaknet/
+
+
+NRENS with their network info
+------------------------------
+
+.. include:: nren-maps.html
+
+
+FrontEnd Technologies worth exploring
+--------------------------------------
+
+- Openlayers : https://openlayers.org/
+- Leaflet : https://leafletjs.com/
+- GeoJson : https://geojson.io/#map=3.53/43.52/6.81
+
+
+High-Level Architecture
+-------------------------
+
+.. only:: drawio
+
+   .. drawio-image:: diagrams.drawio
+      :page-name: hl-arch
+
+Design/Edit concerns for subway map
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- rendered end-user maps are static (i.e. end-user can't move map elements around)
+- designers need some way of customizing maps
+
+   - draw.io?
+   - can we support full design control?  i.e. artists drawing shapes/effects
+   - some styles are ok with draw.io
+
+
+- Designer input
+
+   - how should we handle errors in designer input?
+
+      - should we have a validation step when designers return their modifications?
+
+   - should we keep the design template completely outside of mapping provider?  or some metadata (e.g. lists of nodes/edges) in mapping provider?
+
+   - Discussion with Andrea:
+
+      - Andrea can produce svg's, with some unique id in the id attribute
+      - front end will update svg based on mapping-provider overlay data
+
+
+
+
+
+
diff --git a/requirements.txt b/requirements.txt
index e6911e139c290806f815a36209d8a9d869d17e5b..8cedf04a6b774601a712430bfb7494d302f9fb80 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,13 @@
 fastapi
 uvicorn[standard]
+
 sphinx
+sphinx-rtd-theme
+sphinxcontrib-plantuml
+sphinxcontrib-drawio
+sphinxcontrib-openapi
+
 ruff
 mypy
 tox
-pre-commit
\ No newline at end of file
+pre-commit