diff --git a/OwnTube.tv/app/+html.tsx b/OwnTube.tv/app/+html.tsx
index 4626b40..ceb1b72 100644
--- a/OwnTube.tv/app/+html.tsx
+++ b/OwnTube.tv/app/+html.tsx
@@ -8,6 +8,8 @@ export default function Root({ children }: PropsWithChildren) {
+ {/* Link the PWA manifest file. */}
+
diff --git a/OwnTube.tv/public/logo192.png b/OwnTube.tv/public/logo192.png
new file mode 100644
index 0000000..9648945
Binary files /dev/null and b/OwnTube.tv/public/logo192.png differ
diff --git a/OwnTube.tv/public/logo512.png b/OwnTube.tv/public/logo512.png
new file mode 100644
index 0000000..6fad8ca
Binary files /dev/null and b/OwnTube.tv/public/logo512.png differ
diff --git a/OwnTube.tv/public/manifest.json b/OwnTube.tv/public/manifest.json
new file mode 100644
index 0000000..a77dbee
--- /dev/null
+++ b/OwnTube.tv/public/manifest.json
@@ -0,0 +1,42 @@
+{
+ "short_name": "OwnTube.tv",
+ "name": "OwnTube.tv",
+ "description": "A web client for OwnTube.tv",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "48x48",
+ "type": "image/x-icon"
+ },
+ {
+ "src": "logo192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "logo512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff",
+ "screenshots": [
+ {
+ "src": "screenshot_wide.png",
+ "sizes": "1440x676",
+ "type": "image/png",
+ "form_factor": "wide",
+ "label": "OwnTube.tv"
+ },
+ {
+ "src": "screenshot_narrow.jpeg",
+ "sizes": "660x1280",
+ "type": "image/jpeg",
+ "form_factor": "narrow",
+ "label": "OwnTube.tv"
+ }
+ ]
+}
diff --git a/OwnTube.tv/public/screenshot_narrow.jpeg b/OwnTube.tv/public/screenshot_narrow.jpeg
new file mode 100644
index 0000000..4535abd
Binary files /dev/null and b/OwnTube.tv/public/screenshot_narrow.jpeg differ
diff --git a/OwnTube.tv/public/screenshot_wide.png b/OwnTube.tv/public/screenshot_wide.png
new file mode 100644
index 0000000..5c45f90
Binary files /dev/null and b/OwnTube.tv/public/screenshot_wide.png differ