/// // Pretty URLs for the family-facing web surfaces. // // One page now does what three did: `index.html` is sign-in, profiles, // playback preferences, sources, devices and downloads behind a persisted // session. `/settings` keeps working because it is in people's muscle memory and // in older messages — it lands on the sources section of the new page. // // `/tv` is the short form of `/get/tv`, because that URL gets typed on a // television remote inside the Downloader app, one character at a time. // // `onboarding.html` and `settings.html` are gone from the repo but NOT from the // server: the deploy copies files into `pb_public` and never deletes the ones a // commit removed, so both stale pages kept answering 200 after the swap. The old // wizard still showed a signup form that can now only fail, which is worse than // no page at all. Explicit routes shadow the leftovers — and keep working as // bookmarks even once someone clears the directory by hand. routerAdd("GET", "/account", (e) => e.redirect(302, "/")) // Deep-link straight to sources; the page reads the hash to pick its tab. routerAdd("GET", "/settings", (e) => e.redirect(302, "/#addons")) // Typing this on a remote is the actual cost being optimised. routerAdd("GET", "/tv", (e) => e.redirect(302, "/get/tv")) // Shadow the stale files the deploy left behind (see above). routerAdd("GET", "/settings.html", (e) => e.redirect(302, "/#addons")) routerAdd("GET", "/onboarding.html", (e) => e.redirect(302, "/"))