diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..cf80b4e9c2873ce12f3779f6bc215180ec698efc
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
diff --git a/scripts/a.py b/scripts/a.py
new file mode 100644
index 0000000000000000000000000000000000000000..b142953085527fdd947a475a1897721907dd9793
--- /dev/null
+++ b/scripts/a.py
@@ -0,0 +1,277 @@
+import matplotlib.pyplot as plt
+import numpy as np
+import networkx as nx
+from shapely.geometry import Polygon
+
+# Points
+points = np.array([[2488912.0, 1115153.0],
+ [2488979.0, 1114141.0],
+ [2498627.0, 1117834.0],
+ [2499819.0, 1119645.0],
+ [2498359.0, 1113540.0],
+ [2487828.0, 1112948.0],
+ [2494806.0, 1114873.0],
+ [2499616.0, 1116520.0],
+ [2499281.0, 1116589.0],
+ [2497915.0, 1115857.0],
+ [2499975.0, 1117114.0],
+ [2497142.0, 1119572.0],
+ [2488745.0, 1114763.0],
+ [2494041.0, 1114769.0],
+ [2496242.0, 1119699.0],
+ [2499648.0, 1118428.0],
+ [2499369.0, 1115509.0],
+ [2500332.0, 1118330.0],
+ [2490359.0, 1113416.0],
+ [2486535.0, 1112032.0],
+ [2498295.0, 1113913.0],
+ [2495333.0, 1121462.0],
+ [2493597.0, 1114661.0],
+ [2500656.0, 1117699.0],
+ [2497225.0, 1120644.0],
+ [2500321.0, 1117673.0],
+ [2493237.0, 1113488.0],
+ [2487515.0, 1117697.0],
+ [2491775.0, 1119342.0],
+ [2494041.0, 1119836.0],
+ [2500154.0, 1119824.0],
+ [2500402.0, 1119186.0],
+ [2488553.0, 1116943.0],
+ [2499469.0, 1117097.0],
+ [2496829.0, 1120305.0],
+ [2493423.0, 1113262.0],
+ [2500527.0, 1118645.0],
+ [2499736.0, 1119816.0],
+ [2499326.0, 1118992.0],
+ [2500050.0, 1118238.0],
+ [2499270.0, 1117680.0],
+ [2500753.0, 1117527.0],
+ [2493940.0, 1117414.0],
+ [2499788.0, 1117456.0],
+ [2493571.0, 1120018.0],
+ [2496388.0, 1119533.0],
+ [2494533.0, 1120651.0],
+ [2493600.0, 1114365.0],
+ [2496207.0, 1115659.0],
+ [2498573.0, 1115793.0],
+ [2491553.0, 1119000.0],
+ [2495600.0, 1119250.0],
+ [2499399.0, 1115714.0],
+ [2488894.0, 1115135.0],
+ [2496696.0, 1116410.0],
+ [2493296.0, 1117149.0],
+ [2499150.0, 1114693.0],
+ [2494349.0, 1113299.0],
+ [2499288.0, 1118655.0],
+ [2496912.0, 1116287.0],
+ [2499171.0, 1117949.0],
+ [2496914.0, 1116506.0],
+ [2498148.0, 1116295.0],
+ [2499432.0, 1116312.0],
+ [2500161.0, 1119935.0],
+ [2498783.0, 1115972.0],
+ [2500234.0, 1119555.0],
+ [2495049.0, 1120436.0],
+ [2495735.0, 1115435.0],
+ [2493038.0, 1119778.0],
+ [2487792.0, 1117521.0],
+ [2496227.0, 1115259.0],
+ [2491729.0, 1118587.0],
+ [2496939.0, 1119488.0],
+ [2499177.0, 1117785.0],
+ [2499620.0, 1118736.0],
+ [2498385.0, 1116858.0],
+ [2495817.0, 1115035.0],
+ [2498234.0, 1115355.0],
+ [2491799.0, 1117508.0],
+ [2491873.0, 1119074.0],
+ [2489551.0, 1115765.0],
+ [2497425.0, 1116548.0],
+ [2494090.0, 1119794.0],
+ [2488723.0, 1116564.0],
+ [2500400.0, 1119982.0],
+ [2499890.0, 1119190.0],
+ [2489269.0, 1113883.0],
+ [2491891.0, 1119053.0],
+ [2499662.0, 1119484.0],
+ [2498414.0, 1114352.0],
+ [2497453.0, 1118044.0],
+ [2488583.0, 1113987.0],
+ [2494934.0, 1119901.0],
+ [2498647.0, 1119026.0],
+ [2498507.0, 1116671.0],
+ [2497518.0, 1119428.0],
+ [2494566.0, 1115021.0],
+ [2497776.0, 1114515.0],
+ [2497093.0, 1118740.0],
+ [2486202.0, 1111405.0],
+ [2499571.0, 1117311.0],
+ [2501814.0, 1117463.0],
+ [2499731.0, 1119167.0],
+ [2498822.0, 1117871.0],
+ [2495823.0, 1119383.0],
+ [2485792.0, 1111318.0],
+ [2500942.0, 1123625.0],
+ [2498100.0, 1119190.0],
+ [2500314.0, 1118144.0],
+ [2495263.0, 1120814.0],
+ [2496503.0, 1119828.0],
+ [2495100.0, 1119282.0],
+ [2494946.0, 1119906.0],
+ [2499986.0, 1117599.0],
+ [2492476.0, 1116165.0],
+ [2494240.0, 1120766.0],
+ [2491082.0, 1118374.0],
+ [2499967.0, 1118415.0],
+ [2494570.0, 1114688.0],
+ [2500646.0, 1119188.0],
+ [2498553.0, 1116033.0],
+ [2495024.0, 1121099.0],
+ [2494822.0, 1118597.0],
+ [2495246.0, 1115119.0],
+ [2493771.0, 1120441.0],
+ [2493906.0, 1114511.0],
+ [2499944.0, 1118161.0],
+ [2500086.0, 1117464.0],
+ [2495947.0, 1115729.0],
+ [2499600.0, 1115100.0],
+ [2495085.0, 1118827.0],
+ [2498910.0, 1114429.0],
+ [2499880.0, 1118772.0],
+ [2494925.0, 1119605.0],
+ [2499120.0, 1118319.0],
+ [2498890.0, 1116913.0],
+ [2500364.0, 1122923.0],
+ [2499929.0, 1116547.0],
+ [2496997.0, 1115960.0],
+ [2489986.0, 1116227.0],
+ [2495940.0, 1115536.0],
+ [2499005.0, 1118858.0],
+ [2497274.0, 1116681.0],
+ [2500596.0, 1118825.0],
+ [2488339.0, 1117110.0],
+ [2499759.0, 1117746.0],
+ [2497855.0, 1117041.0],
+ [2494783.0, 1113645.0],
+ [2487415.0, 1112733.0],
+ [2497963.0, 1114745.0],
+ [2500399.0, 1122132.0],
+ [2492335.0, 1117556.0],
+ [2492431.0, 1115892.0],
+ [2499269.0, 1116272.0],
+ [2498073.0, 1118482.0],
+ [2489482.0, 1115448.0],
+ [2499047.0, 1116116.0],
+ [2498337.0, 1114795.0],
+ [2498329.0, 1115591.0],
+ [2499824.0, 1116792.0],
+ [2490325.0, 1116210.0],
+ [2498296.0, 1115061.0],
+ [2498180.0, 1113981.0],
+ [2494036.0, 1120612.0],
+ [2489330.0, 1114571.0],
+ [2497495.0, 1120801.0],
+ [2499495.0, 1119268.0],
+ [2494878.0, 1119801.0],
+ [2499969.0, 1118468.0],
+ [2498050.0, 1116973.0],
+ [2500419.0, 1122878.0],
+ [2494930.0, 1115148.0],
+ [2498892.0, 1114497.0],
+ [2494667.0, 1118537.0],
+ [2494391.0, 1118402.0],
+ [2493206.0, 1119928.0],
+ [2497682.0, 1118619.0],
+ [2500400.0, 1121878.0],
+ [2500209.0, 1118791.0],
+ [2496161.0, 1119516.0],
+ [2496262.0, 1119732.0],
+ [2500436.0, 1118490.0],
+ [2496700.0, 1120102.0],
+ [2497662.0, 1116048.0],
+ [2494353.0, 1114581.0],
+ [2497660.0, 1120989.0],
+ [2499304.0, 1118142.0],
+ [2495426.0, 1120280.0],
+ [2496942.0, 1118901.0],
+ [2498860.0, 1115065.0],
+ [2492725.0, 1117213.0],
+ [2494486.0, 1113431.0],
+ [2498799.0, 1118272.0],
+ [2498967.0, 1117437.0],
+ [2497035.0, 1120556.0],
+ [2493895.0, 1115452.0],
+ [2493407.0, 1120097.0],
+ [2494097.0, 1113193.0],
+ [2497140.0, 1115813.0],
+ [2493769.0, 1117287.0],
+ [2495035.0, 1114952.0],
+ [2496631.0, 1116130.0],
+ [2495304.0, 1119106.0],
+ [2500016.0, 1116765.0],
+ [2496754.0, 1115732.0],
+ [2485845.0, 1111438.0],
+ [2495371.0, 1119303.0],
+ [2499448.0, 1118286.0],
+ [2496652.0, 1115539.0],
+ [2499516.0, 1116077.0],
+ [2498194.0, 1118825.0],
+ [2488290.0, 1113598.0],
+ [2500557.0, 1119591.0],
+ [2497603.0, 1116321.0],
+ [2498644.0, 1114766.0],
+ [2499071.0, 1119132.0],
+ [2497602.0, 1116765.0],
+ [2499911.0, 1119669.0],
+ [2486709.0, 1111980.0],
+ [2498506.0, 1118344.0],
+ [2499207.0, 1117324.0],
+ [2500005.0, 1117858.0],
+ [2492306.0, 1116676.0],
+ [2498423.0, 1114149.0],
+ [2492313.0, 1116330.0],
+ [2489152.0, 1115064.0],
+ [2499738.0, 1118100.0],
+ [2499908.0, 1117575.0]])
+
+# Edges (defined by indices of points)
+edges = np.array([
+    [18, 219], [219, 100], [100, 106], [106, 206], [206, 19], [19, 149], [149, 212], [212, 12], [12, 27], [27, 28], [28, 125], [125, 164], [164, 116], [116, 21], [21, 137], [137, 107], [107, 151], [151, 178], [178, 85], [85, 213], [213, 120], [120, 102], [102, 130], [130, 56], [56, 132], [132, 4], [4, 57], [57, 198], [198, 35], [35, 18]
+])
+
+# Create a graph from the points and edges
+G = nx.Graph()
+for i, point in enumerate(points):
+    G.add_node(i, pos=point)
+for edge in edges:
+    G.add_edge(edge[0], edge[1])
+
+# Find all cycles in the graph
+cycles = list(nx.cycle_basis(G))
+
+# Plotting
+plt.figure(figsize=(8, 6))
+
+# Plot points
+plt.scatter(points[:, 0], points[:, 1], color='red', zorder=5)
+
+# Plot edges
+for edge in edges:
+    plt.plot(points[edge, 0], points[edge, 1], color='blue')
+
+# Fill each cycle
+for cycle in cycles:
+    polygon_points = points[cycle]
+    plt.fill(polygon_points[:, 0], polygon_points[:, 1], alpha=0.3)
+
+# Add labels to points
+for i, (x, y) in enumerate(points):
+    plt.text(x, y, f'  {i}', verticalalignment='bottom', horizontalalignment='right')
+
+plt.title('Graph with Points and Filled Polygons')
+plt.xlabel('X')
+plt.ylabel('Y')
+plt.autoscale()  
+plt.grid(True)
+#plt.gca().set_aspect('equal', adjustable='box')
+plt.show()
\ No newline at end of file
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..22fa4f690b1e410fee87260f55c48ab245c85ed3
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>Interactive OpenStreetMap with Leaflet</title>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
+    <style>
+        body {
+            margin: 0;
+        }
+
+        #map {
+            height: 100vh;
+        }
+    </style>
+</head>
+
+<body>
+    <div id="map"></div>
+    <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
+    <script>
+        var centerLat = 46.20180915690188;
+        var centerLng = 6.144409565708289;
+
+        var map = L.map('map').setView([centerLat, centerLng], 13);
+
+        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+            attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
+        }).addTo(map);
+
+        const showIsochrones = async () => {
+            const response = await fetch("http://localhost:8100/isochrones");
+            const isochrones = await response.json();
+            console.log(isochrones);
+
+            for (const isochrone of isochrones) {
+                let latlngs = [];
+
+                for (const coordinates of isochrone) {
+                    // L.marker([coordinates.x, coordinates.y]).addTo(map);
+                    latlngs.push([coordinates.x, coordinates.y]);
+                }
+
+                const polygon = L.polygon(latlngs, {
+                    color: 'transparent',
+                    fillColor: 'red',
+                    fillOpacity: 0.4,
+                }).addTo(map);
+            }
+        };
+        showIsochrones();
+    </script>
+</body>
+
+</html>