diff --git a/web/src/app.html b/web/src/app.html
index 8f8e1666..e4d684a2 100644
--- a/web/src/app.html
+++ b/web/src/app.html
@@ -2,8 +2,19 @@
-
+
+ cobalt
+
+
+
+
+
+
+
+
+
+
%sveltekit.head%
diff --git a/web/static/icons/android-chrome-192x192.png b/web/static/icons/android-chrome-192x192.png
new file mode 100644
index 00000000..0d3ac83a
Binary files /dev/null and b/web/static/icons/android-chrome-192x192.png differ
diff --git a/web/static/icons/android-chrome-512x512.png b/web/static/icons/android-chrome-512x512.png
new file mode 100644
index 00000000..d1777d48
Binary files /dev/null and b/web/static/icons/android-chrome-512x512.png differ
diff --git a/web/static/icons/apple-touch-icon.png b/web/static/icons/apple-touch-icon.png
new file mode 100644
index 00000000..b2abfa63
Binary files /dev/null and b/web/static/icons/apple-touch-icon.png differ
diff --git a/web/static/icons/generic.png b/web/static/icons/generic.png
new file mode 100644
index 00000000..d1777d48
Binary files /dev/null and b/web/static/icons/generic.png differ
diff --git a/web/static/icons/maskable/128.png b/web/static/icons/maskable/128.png
new file mode 100644
index 00000000..e8213cfe
Binary files /dev/null and b/web/static/icons/maskable/128.png differ
diff --git a/web/static/icons/maskable/192.png b/web/static/icons/maskable/192.png
new file mode 100644
index 00000000..8268d89a
Binary files /dev/null and b/web/static/icons/maskable/192.png differ
diff --git a/web/static/icons/maskable/384.png b/web/static/icons/maskable/384.png
new file mode 100644
index 00000000..483e42ff
Binary files /dev/null and b/web/static/icons/maskable/384.png differ
diff --git a/web/static/icons/maskable/48.png b/web/static/icons/maskable/48.png
new file mode 100644
index 00000000..02a5bca0
Binary files /dev/null and b/web/static/icons/maskable/48.png differ
diff --git a/web/static/icons/maskable/512.png b/web/static/icons/maskable/512.png
new file mode 100644
index 00000000..bb4af2f3
Binary files /dev/null and b/web/static/icons/maskable/512.png differ
diff --git a/web/static/icons/maskable/72.png b/web/static/icons/maskable/72.png
new file mode 100644
index 00000000..903f6bd5
Binary files /dev/null and b/web/static/icons/maskable/72.png differ
diff --git a/web/static/icons/maskable/96.png b/web/static/icons/maskable/96.png
new file mode 100644
index 00000000..c4b1ae60
Binary files /dev/null and b/web/static/icons/maskable/96.png differ
diff --git a/web/static/manifest.json b/web/static/manifest.json
new file mode 100644
index 00000000..3777ca6d
--- /dev/null
+++ b/web/static/manifest.json
@@ -0,0 +1,75 @@
+{
+ "name": "cobalt",
+ "short_name": "cobalt",
+ "start_url": "/",
+ "icons": [
+ {
+ "src": "/icons/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/icons/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "/icons/generic.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "/icons/maskable/48.png",
+ "sizes": "48x48",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/72.png",
+ "sizes": "72x72",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/96.png",
+ "sizes": "96x96",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/128.png",
+ "sizes": "128x128",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/384.png",
+ "sizes": "384x384",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icons/maskable/512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "share_target": {
+ "action": "/",
+ "params": {
+ "text": "u",
+ "url": "u"
+ }
+ },
+ "theme_color": "#000000",
+ "background_color": "#000000",
+ "display": "standalone"
+}