Add /display manifest for Android home-screen install

Android Chrome only reads manifest at install time from current page. Root
manifest has start_url '.' (root). Installing from /display launched root.

Fix: separate display-manifest.json (start_url /display, scope /, landscape).
App.js swaps link[rel=manifest] href when on /display path. Install from
/display now launches /display standalone.
This commit is contained in:
david raistrick
2026-07-07 16:44:29 -04:00
parent 0fa3928bf8
commit 2dfa155469
2 changed files with 32 additions and 1 deletions
+27
View File
@@ -0,0 +1,27 @@
{
"short_name": "TTRPG Display",
"name": "TTRPG Initiative Tracker — Player Display",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": "/display",
"scope": "/",
"display": "standalone",
"orientation": "landscape",
"theme_color": "#1A202C",
"background_color": "#1A202C"
}
+5 -1
View File
@@ -3519,8 +3519,12 @@ function App() {
useEffect(() => {
const queryParams = new URLSearchParams(window.location.search);
if (queryParams.get('playerView') === 'true' || window.location.pathname === '/display') {
const isDisplay = queryParams.get('playerView') === 'true' || window.location.pathname === '/display';
if (isDisplay) {
setIsPlayerViewOnlyMode(true);
// swap manifest so Android home-screen installs launch /display
const link = document.querySelector('link[rel="manifest"]');
if (link) link.href = `${process.env.PUBLIC_URL || ''}/display-manifest.json`;
}
if (window.location.pathname === '/logs') {
setIsLogsMode(true);