diff --git a/app.js b/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dced120b6db894ad7c5d32461a1d98d2345caa7
--- /dev/null
+++ b/app.js
@@ -0,0 +1,8 @@
+if ("serviceWorker" in navigator) {
+    window.addEventListener("load", function () {
+        navigator.serviceWorker
+            .register("serviceWorker.min.js")
+            .then(res => console.log("service worker registered"))
+            .catch(err => console.log("service worker not registered", err))
+    })
+}
\ No newline at end of file
diff --git a/app.min.js b/app.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7dc45fbcb83586b73532b74c165c8dcd058391a
--- /dev/null
+++ b/app.min.js
@@ -0,0 +1 @@
+"serviceWorker"in navigator&&window.addEventListener("load",(function(){navigator.serviceWorker.register("serviceWorker.min.js").then((e=>{})).catch((e=>{}))}));
\ No newline at end of file
diff --git a/browserconfig.min.xml b/browserconfig.min.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10890188f7f5612e8372c5dd0201924957cbd957
--- /dev/null
+++ b/browserconfig.min.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#555555</TileColor></tile></msapplication></browserconfig>
\ No newline at end of file
diff --git a/browserconfig.xml b/browserconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b99ed54ce084883ee8689570d977161282484e39
--- /dev/null
+++ b/browserconfig.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#555555</TileColor></tile></msapplication></browserconfig>
\ No newline at end of file
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..cd9376074329af85f3c1d37d865beecc2d382fa2
Binary files /dev/null and b/favicon.ico differ
diff --git a/icons/android-icon-144x144.png b/icons/android-icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3df9eb0aec6ac9f8fb6c211d09ee6d2e225c43e
Binary files /dev/null and b/icons/android-icon-144x144.png differ
diff --git a/icons/android-icon-192x192.png b/icons/android-icon-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..76b7f991166d3f121cbc08c8464b5c85b60814b4
Binary files /dev/null and b/icons/android-icon-192x192.png differ
diff --git a/icons/android-icon-36x36.png b/icons/android-icon-36x36.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f640cd7d679853e27a600349598851f11a585fd
Binary files /dev/null and b/icons/android-icon-36x36.png differ
diff --git a/icons/android-icon-48x48.png b/icons/android-icon-48x48.png
new file mode 100644
index 0000000000000000000000000000000000000000..f119d7dbec3714e5c5577ea7b36430b79e963840
Binary files /dev/null and b/icons/android-icon-48x48.png differ
diff --git a/icons/android-icon-72x72.png b/icons/android-icon-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdcce148bf5472c485379b77a63f302672a760fd
Binary files /dev/null and b/icons/android-icon-72x72.png differ
diff --git a/icons/android-icon-96x96.png b/icons/android-icon-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d6fdfa7f613048c32fb71bf3079f0e30915b251
Binary files /dev/null and b/icons/android-icon-96x96.png differ
diff --git a/icons/apple-icon-114x114.png b/icons/apple-icon-114x114.png
new file mode 100644
index 0000000000000000000000000000000000000000..83ca49bfe31ff707f6bee97e444240e20f9b0461
Binary files /dev/null and b/icons/apple-icon-114x114.png differ
diff --git a/icons/apple-icon-120x120.png b/icons/apple-icon-120x120.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3d7bf873d35b38bbf784929bfbf1cdc9a8fe65b
Binary files /dev/null and b/icons/apple-icon-120x120.png differ
diff --git a/icons/apple-icon-144x144.png b/icons/apple-icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3df9eb0aec6ac9f8fb6c211d09ee6d2e225c43e
Binary files /dev/null and b/icons/apple-icon-144x144.png differ
diff --git a/icons/apple-icon-152x152.png b/icons/apple-icon-152x152.png
new file mode 100644
index 0000000000000000000000000000000000000000..0870375abf1a947376472e69098efe4dc4e22948
Binary files /dev/null and b/icons/apple-icon-152x152.png differ
diff --git a/icons/apple-icon-180x180.png b/icons/apple-icon-180x180.png
new file mode 100644
index 0000000000000000000000000000000000000000..b661287aed4b0a2b331b1989b2dce3bd7d4ae925
Binary files /dev/null and b/icons/apple-icon-180x180.png differ
diff --git a/icons/apple-icon-57x57.png b/icons/apple-icon-57x57.png
new file mode 100644
index 0000000000000000000000000000000000000000..befc7c3bec5eab84f72c08fd6f9ebec6666734a5
Binary files /dev/null and b/icons/apple-icon-57x57.png differ
diff --git a/icons/apple-icon-60x60.png b/icons/apple-icon-60x60.png
new file mode 100644
index 0000000000000000000000000000000000000000..99596740de4b3b7c72be60497b1d7eb7a861c150
Binary files /dev/null and b/icons/apple-icon-60x60.png differ
diff --git a/icons/apple-icon-72x72.png b/icons/apple-icon-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdcce148bf5472c485379b77a63f302672a760fd
Binary files /dev/null and b/icons/apple-icon-72x72.png differ
diff --git a/icons/apple-icon-76x76.png b/icons/apple-icon-76x76.png
new file mode 100644
index 0000000000000000000000000000000000000000..590a66e60e370064f1b26d00b8cca3e28c80a48a
Binary files /dev/null and b/icons/apple-icon-76x76.png differ
diff --git a/icons/apple-icon-precomposed.png b/icons/apple-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..17a71249b0def7c46ae985f4646e057bb050f437
Binary files /dev/null and b/icons/apple-icon-precomposed.png differ
diff --git a/icons/apple-icon.png b/icons/apple-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..17a71249b0def7c46ae985f4646e057bb050f437
Binary files /dev/null and b/icons/apple-icon.png differ
diff --git a/icons/favicon-16x16.png b/icons/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad1d96396904a650227d9bbb97ad90758645d8e1
Binary files /dev/null and b/icons/favicon-16x16.png differ
diff --git a/icons/favicon-32x32.png b/icons/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..76de22db48a3d7231edd3a1f103ef46e76f6e718
Binary files /dev/null and b/icons/favicon-32x32.png differ
diff --git a/icons/favicon-96x96.png b/icons/favicon-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d6fdfa7f613048c32fb71bf3079f0e30915b251
Binary files /dev/null and b/icons/favicon-96x96.png differ
diff --git a/icons/icon-maskable-512x512.png b/icons/icon-maskable-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cb861162ed3d3dc1a88fdd0f73a5b83331be8f9
Binary files /dev/null and b/icons/icon-maskable-512x512.png differ
diff --git a/icons/icon-rounded-512x512.png b/icons/icon-rounded-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..7517ec8717e9d0ccbfe09c9e3aa53c8e1e03c3ab
Binary files /dev/null and b/icons/icon-rounded-512x512.png differ
diff --git a/icons/ms-icon-144x144.png b/icons/ms-icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3df9eb0aec6ac9f8fb6c211d09ee6d2e225c43e
Binary files /dev/null and b/icons/ms-icon-144x144.png differ
diff --git a/icons/ms-icon-150x150.png b/icons/ms-icon-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce65099d086640b825cbd438d6a5b9f748aa5fc8
Binary files /dev/null and b/icons/ms-icon-150x150.png differ
diff --git a/icons/ms-icon-310x310.png b/icons/ms-icon-310x310.png
new file mode 100644
index 0000000000000000000000000000000000000000..8476d5332de49365005fbd1cf8facef1d530d3f5
Binary files /dev/null and b/icons/ms-icon-310x310.png differ
diff --git a/icons/ms-icon-70x70.png b/icons/ms-icon-70x70.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc4bb28900f771f2b2e1aa347c51de6d1c2238a5
Binary files /dev/null and b/icons/ms-icon-70x70.png differ
diff --git a/index.php b/index.php
index 73f6276b88bbdd206ab204977624fb457be0b8d0..ce24d3d357add22773ab5eebbae985d425fbea95 100644
--- a/index.php
+++ b/index.php
@@ -6,6 +6,23 @@
     <!-- <title>FreqBuddy</title> -->
     <script src="script.min.js" defer></script>
     <link rel="stylesheet" href="style.min.css">
+    <link rel="manifest" href="/manifest.json">
+    <link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-icon-57x57.png">
+    <link rel="apple-touch-icon" sizes="60x60" href="/icons/apple-icon-60x60.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-icon-76x76.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-icon-114x114.png">
+    <link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-icon-120x120.png">
+    <link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-icon-144x144.png">
+    <link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-icon-152x152.png">
+    <link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-icon-180x180.png">
+    <link rel="icon" type="image/png" sizes="192x192"  href="/icons/android-icon-192x192.png">
+    <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32x32.png">
+    <link rel="icon" type="image/png" sizes="96x96" href="/icons/favicon-96x96.png">
+    <link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16x16.png">
+    <meta name="msapplication-TileColor" content="#555555">
+    <meta name="msapplication-TileImage" content="/icons/ms-icon-144x144.png">
+    <meta name="theme-color" content="#555555">
   </head>
   <body>
     <header>
@@ -154,4 +171,5 @@
       <div class="space"></div>
     </main>
   </body>
+  <script src="app.min.js"></script>
 </html>
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..b31e196f7e910c9413da81a0c8fb7e59d6b6077c
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,61 @@
+{
+    "name": "FreqBuddy",
+    "short_name": "FreqBuddy",
+    "description": "FreqBuddy berechnet die besten, untereinander störungsfreien Funkfrequenzen innerhalb eines TV-Kanals (8 MHz-Raster).",
+    "start_url": "/index.php",
+    "display": "standalone",
+    "orientation": "portrait-primary",
+    "lang": "de",
+    "theme_color": "#555555",
+    "background_color": "#555555",
+    "icons": [
+        {
+            "src": "icons/android-icon-36x36.png",
+            "sizes": "36x36",
+            "type": "image\/png",
+            "density": "0.75"
+        },
+        {
+            "src": "icons/android-icon-48x48.png",
+            "sizes": "48x48",
+            "type": "image\/png",
+            "density": "1.0"
+        },
+        {
+            "src": "icons/android-icon-72x72.png",
+            "sizes": "72x72",
+            "type": "image\/png",
+            "density": "1.5"
+        },
+        {
+            "src": "icons/android-icon-96x96.png",
+            "sizes": "96x96",
+            "type": "image\/png",
+            "density": "2.0"
+        },
+        {
+            "src": "icons/android-icon-144x144.png",
+            "sizes": "144x144",
+            "type": "image\/png",
+            "density": "3.0"
+        },
+        {
+            "src": "icons/android-icon-192x192.png",
+            "sizes": "192x192",
+            "type": "image\/png",
+            "density": "4.0"
+        },
+        {
+            "src": "icons/icon-maskable-512x512.png",
+            "purpose": "maskable",
+            "sizes": "512x512",
+            "type": "image/png"
+        },
+        {
+            "src": "icons/icon-rounded-512x512.png",
+            "purpose": "any",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/manifest.min.json b/manifest.min.json
new file mode 100644
index 0000000000000000000000000000000000000000..5c40c9f0e86bb8c3224cffd2dc5e98e51816f7fe
--- /dev/null
+++ b/manifest.min.json
@@ -0,0 +1 @@
+{"name":"FreqBuddy","short_name":"FreqBuddy","description":"FreqBuddy berechnet die besten, untereinander störungsfreien Funkfrequenzen innerhalb eines TV-Kanals (8 MHz-Raster).","start_url":"/index.php","display":"standalone","orientation":"portrait-primary","lang":"de","theme_color":"#555555","background_color":"#555555","icons":[{"src":"icons/android-icon-36x36.png","sizes":"36x36","type":"image\/png","density":"0.75"},{"src":"icons/android-icon-48x48.png","sizes":"48x48","type":"image\/png","density":"1.0"},{"src":"icons/android-icon-72x72.png","sizes":"72x72","type":"image\/png","density":"1.5"},{"src":"icons/android-icon-96x96.png","sizes":"96x96","type":"image\/png","density":"2.0"},{"src":"icons/android-icon-144x144.png","sizes":"144x144","type":"image\/png","density":"3.0"},{"src":"icons/android-icon-192x192.png","sizes":"192x192","type":"image\/png","density":"4.0"},{"src":"icons/icon-maskable-512x512.png","purpose":"maskable","sizes":"512x512","type":"image/png"},{"src":"icons/icon-rounded-512x512.png","purpose":"any","sizes":"512x512","type":"image/png"}]}
\ No newline at end of file
diff --git a/serviceWorker.js b/serviceWorker.js
new file mode 100644
index 0000000000000000000000000000000000000000..0cdc20073d485884f53a238a6e186c5e28534bc3
--- /dev/null
+++ b/serviceWorker.js
@@ -0,0 +1,25 @@
+const staticFreqBuddy = "freq-buddy-site-v1"
+const assets = [
+    "/index.php",
+    "/script.min.js",
+    "/app.min.js",
+    "/style.min.css",
+    "/Simpel_256px_eco.webp",
+    "/github.svg",
+]
+
+self.addEventListener("install", installEvent => {
+    installEvent.waitUntil(
+        caches.open(staticFreqBuddy).then(cache => {
+            cache.addAll(assets)
+        })
+    )
+})
+
+self.addEventListener("fetch", fetchEvent => {
+    fetchEvent.respondWith(
+        caches.match(fetchEvent.request).then(res => {
+            return res || fetch(fetchEvent.request)
+        })
+    )
+})
diff --git a/serviceWorker.min.js b/serviceWorker.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..911d277976bf0de4bd9448d0fe898d73cc95f8b3
--- /dev/null
+++ b/serviceWorker.min.js
@@ -0,0 +1 @@
+const staticFreqBuddy="freq-buddy-site-v1",assets=["/index.php","/script.min.js","/app.min.js","/style.min.css","/Simpel_256px_eco.webp","/github.svg"];self.addEventListener("install",(e=>{e.waitUntil(caches.open(staticFreqBuddy).then((e=>{e.addAll(assets)})))})),self.addEventListener("fetch",(e=>{e.respondWith(caches.match(e.request).then((s=>s||fetch(e.request))))}));
\ No newline at end of file