diff --git a/js/customElements/header.js b/js/customElements/header.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c3622df803cd4b1039baa9143d475e270e92a66
--- /dev/null
+++ b/js/customElements/header.js
@@ -0,0 +1,25 @@
+class Header extends HTMLElement {
+    constructor() {
+        super();
+        let pageTitle = this.getAttribute("data-title");
+        this.innerHTML = `    
+            <header >
+                <div class="header-wrapper" >
+                    <div class="header-homepage">
+                        <div class="align-holder" >
+                            <h1>${pageTitle}</h1 >
+                        </div >
+                    </div >
+                    <div class="header-separator header-separator-bottom " >
+                        <svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 1000 100" preserveAspectRatio = "none" >
+                            <path class="svg-white-bg" d = "M737.9,94.7L0,0v100h1000V0L737.9,94.7z" ></path >
+                        </svg >
+                    </div >
+                </div >
+                <jl-main_menu id = "mainMenu"></jl-main_menu>
+            </header >
+        `;
+    }
+}
+
+customElements.define("jl-header", Header);
\ No newline at end of file
diff --git a/js/customElements/mainMenu.js b/js/customElements/mainMenu.js
new file mode 100644
index 0000000000000000000000000000000000000000..9be85c5f8248e0dddf8544781a8fd4703090be13
--- /dev/null
+++ b/js/customElements/mainMenu.js
@@ -0,0 +1,51 @@
+class MainMenu extends HTMLElement {
+    constructor() {
+        super();
+        this.generateMenu();
+    }
+
+    async generateMenu(){
+        let menu =  await (await fetch("/API/mainMenu.php")).json();
+        let menuContainer = document.createElement("div");
+        menuContainer.className = "mainMenuContainer";
+
+        menu.forEach((element) => {
+            if(element["type"] === "link"){
+                let a = document.createElement("a");
+                a.href = element["url"];
+                a.innerText = element["name"];
+
+                menuContainer.appendChild(a);
+            } else if(element["type"] === "dropdown"){
+                let dropdown = document.createElement("div");
+                dropdown.className = "dropdown";
+
+                let a = document.createElement("a");
+                a.href = element["url"];
+                a.innerText = element["name"];
+
+                dropdown.appendChild(a)
+                let dropdownContent = document.createElement("div");
+                dropdownContent.className = "dropdown-content"
+
+                element["childElements"].forEach((childElement) => {
+                    let a = document.createElement("a");
+                    a.href = childElement["url"];
+                    a.innerText = childElement["name"];
+
+                    dropdownContent.appendChild(a);
+
+                    let br = document.createElement("br");
+                    dropdownContent.appendChild(br);
+                });
+
+                dropdown.appendChild(dropdownContent);
+                menuContainer.appendChild(dropdown);
+            }
+        });
+
+        this.appendChild(menuContainer);
+    }
+}
+
+customElements.define("jl-main_menu", MainMenu);
\ No newline at end of file
diff --git a/js/script.js b/js/script.js
index 9662cc2cfca4eb6ba7de629a681890b4bab5fea1..0f02d0e8cb776bd4651e695a6bdd7a4ae95d4dd0 100644
--- a/js/script.js
+++ b/js/script.js
@@ -11,4 +11,6 @@ require("./customElements/blogFooter");
 require("./customElements/blogIndex");
 require("./customElements/commentsDisplay");
 require("./customElements/newComment");
-require("./customElements/contactMailButton");
\ No newline at end of file
+require("./customElements/contactMailButton");
+require("./customElements/header");
+require("./customElements/mainMenu");
\ No newline at end of file
diff --git a/public/API/mainMenu.php b/public/API/mainMenu.php
new file mode 100644
index 0000000000000000000000000000000000000000..f867cf425391b275c7d93d58b2a4f8c2455d8137
--- /dev/null
+++ b/public/API/mainMenu.php
@@ -0,0 +1,160 @@
+<?php
+$responseJSON = [
+    [
+        "name" => "Startseite",
+        "url" => "/",
+        "type" => "link"
+    ],
+    [
+        "name" => "Projekte",
+        "url" => "#",
+        "type" => "dropdown",
+        "childElements" => [
+            [
+                "name" => "Proxdroid - Proxmox Android App",
+                "url" => "/Projekte/proxdroid.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Website Cloner",
+                "url" => "/Projekte/websitecloner.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "YouTube Downloader",
+                "url" => "/Projekte/youtubedownloader.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "MQTT Push",
+                "url" => "/Projekte/mqttpush.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Geocaching Premium Log link Generator",
+                "url" => "/Projekte/gclogLink.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "LED Tisch Version 1",
+                "url" => "/Projekte/ledtisch1.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "LED Tisch Version 2",
+                "url" => "/Projekte/ledtisch2.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Regensensor",
+                "url" => "/Projekte/regensensor.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Blitzortung",
+                "url" => "/Projekte/blitzortung.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Insecam",
+                "url" => "/Projekte/insecam.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "URL Kürzer V1",
+                "url" => "/Projekte/URLkuerzer1.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "URL Küzer V2",
+                "url" => "/Projekte/URLkuerzer2.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Smart Mirror",
+                "url" => "/Projekte/smartmirror.php",
+                "type" => "link"
+            ],
+            [
+                "name" => "Installation von Snowboy",
+                "url" => "/Projekte/snowboy.php",
+                "type" => "link"
+            ]
+
+        ]
+    ],
+    [
+        "name" => "Services",
+        "url" => "#",
+        "type" => "dropdown",
+        "childElements" => [
+            [
+                "name" => "URL Kürzer",
+                "url" => "//kuerzer.ml",
+                "type" => "link"
+            ],
+            [
+                "name" => "Privnote",
+                "url" => "//privnote.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "Hastebin",
+                "url" => "//paste.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "Gitlab",
+                "url" => "//gitlab.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "APT mirror",
+                "url" => "//apt.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "Speedtest",
+                "url" => "//speed.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "Matrix",
+                "url" => "//chat.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "XMLTV TV Programm",
+                "url" => "//xmltv.jonasled.de",
+                "type" => "link"
+            ],
+        ]
+    ],
+    [
+        "name" => "Status",
+        "url" => "#",
+        "type" => "dropdown",
+        "childElements" => [
+
+            [
+                "name" => "Server",
+                "url" => "//status.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "Discord Bots",
+                "url" => "//discordstatus.jonasled.de",
+                "type" => "link"
+            ],
+            [
+                "name" => "NTP Server",
+                "url" => "/ntpstatus.php",
+                "type" => "link"
+            ],
+        ]
+    ]
+];
+
+
+header('Content-Type: application/json');
+echo json_encode($responseJSON);
\ No newline at end of file
diff --git a/public/internal/header.php b/public/internal/header.php
index a94163da58a803ed53d8dcc868a980625f33518d..b065e9ec1deddb248a488226f4ecc72d537d5c89 100644
--- a/public/internal/header.php
+++ b/public/internal/header.php
@@ -1,17 +1,8 @@
 <?php
 
-function getHeader($pagetitle, $navselect)
+function getHeader($pagetitle)
 {
     include "config.php";
-    include "menu.php";
-
-    $menu = getMenu($navselect);
-    if (strpos($_SERVER['HTTP_HOST'], '.onion') !== false) {
-        $trackURL = $trackURLTor;
-    } else {
-        $trackURL = $trackURLNormal;
-    }
-
     echo(<<<EOF
     <!DOCTYPE html >
     <html lang = "de" >
@@ -24,24 +15,10 @@ function getHeader($pagetitle, $navselect)
         <link href = "/css/style.css" rel = "stylesheet" >
     </head >
     <body >
-    <header >
-        <div class="header-wrapper" >
-            <div class="header-homepage">
-                <div class="align-holder" >
-                    <h1>$pagetitle</h1 >
-                </div >
-            </div >
-            <div class="header-separator header-separator-bottom " >
-                <svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 1000 100" preserveAspectRatio = "none" >
-                    <path class="svg-white-bg" d = "M737.9,94.7L0,0v100h1000V0L737.9,94.7z" ></path >
-                </svg >
-            </div >
-        </div >
-        <div id = "mainMenu">$menu</div >
-    </header >
+    <jl-header data-title="$pagetitle"></jl-header>
     <div id = "content" >
     <!--Matomo Image Tracker -->
-    <img src = "$trackURL" style = "border:0" alt = "" />
+    <img src = "" style = "border:0" alt = "" />
     <!--End Matomo -->
 EOF);
 }
\ No newline at end of file
diff --git a/public/internal/menu.php b/public/internal/menu.php
deleted file mode 100644
index 41f2c31cd3c2a73a4f027097cd12746685030dc7..0000000000000000000000000000000000000000
--- a/public/internal/menu.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-function getMenu($page){
-    $startpage = $page == "home" ? "class=\"menueSelected\"" : "";
-    $projects = $page == "projekte" ? "class=\"menueSelected\"" : "";
-    $status = $page == "status" ? "class=\"menueSelected\"" : "";
-
-    return <<<EOF
-    <div id="burgerMenu">
-      <div class="bar1"></div>
-      <div class="bar2"></div>
-      <div class="bar3"></div>
-    </div>
-    <div id="mainMenuContainer">
-        <a href="/" $startpage>Startseite</a>
-        <div class="dropdown">
-            <a href="#" $projects>Projekte</a>
-            <div class="dropdown-content">
-                <a href="/Projekte/proxdroid.php">Proxdroid - Proxmox Android App</a><br>
-                <a href="/Projekte/websitecloner.php">Website Cloner</a><br>
-                <a href="/Projekte/youtubedownloader.php">YouTube Downloader</a><br>
-                <a href="/Projekte/mqttpush.php">MQTT Push</a><br>
-                <a href="/Projekte/gclogLink.php">Geocaching Premium Log link Generator</a><br>
-                <a href="/Projekte/ledtisch1.php">LED Tisch Version 1</a><br>
-                <a href="/Projekte/ledtisch2.php">LED Tisch Version 2</a><br>
-                <a href="/Projekte/regensensor.php">Regensensor</a><br>
-                <a href="/Projekte/blitzortung.php">Blitzortung</a><br>
-                <a href="/Projekte/insecam.php">Insecam</a><br>
-                <a href="/Projekte/URLkuerzer1.php">URL K&uuml;rzer V1</a><br>
-                <a href="/Projekte/URLkuerzer2.php">URL K&uuml;rzer V2</a><br>
-                <a href="/Projekte/smartmirror.php">Smart Mirror</a><br>
-                <a href="/Projekte/snowboy.php">Installation von Snowboy</a><br>
-            </div>
-        </div>
-        <div class="dropdown">
-            <a href="#">Services</a>
-            <div class="dropdown-content">
-                <a href="//kuerzer.ml">URL K&uuml;rzer</a><br>
-                <a href="//privnote.jonasled.de">Privnote</a><br>
-                <a href="//paste.jonasled.de">Hastebin</a><br>
-                <a href="//gitlab.jonasled.de">Gitlab</a><br>
-                <a href="//apt.jonasled.de">APT mirror</a><br>
-                <a href="//speed.jonasled.de">Speedtest</a><br>
-                <a href="//chat.jonasled.de">Matrix</a><br>
-                <a href="//xmltv.jonasled.de">XMLTV TV Programm</a><br>
-            </div>
-        </div>
-        <div class="dropdown">
-            <a href="#" $status>Status</a>
-            <div class="dropdown-content">
-                <a href="//status.jonasled.de">Server</a><br>
-                <a href="//discordstatus.jonasled.de">Discord Bots</a><br>
-                <a href="/ntpstatus.php">NTP Server</a><br>
-            </div>
-        </div>
-    </div>
-EOF;
-}
-?>