Function
The page below the providers
This renders inside <ThemeProvider> and on every route, which is why the
one-off theme migration runs here rather than in a theme control: a learner
carrying a stored system must be migrated whether or not the view they
landed on happens to show the toggle. See useLegacyThemeMigration.
Being on every route is also what lets PendingPrizeAnnouncement do its job: a prize won in the last seconds of a lesson is announced wherever the learner went next, not lost with the page that owed them the news.
useServiceWorkerRegistration is here for the same reason: the browser decides whether to offer an install once per visit, whichever page the learner happened to land on.
Client-side providers that wrap the entire app. Add new global providers here (theme, auth session, query client, etc.).