No router. No state manager. No CSS framework.
Routing is a state string that swaps which game component is mounted. State is props plus localStorage. Styling is a theme object passed down. Each of those is a library that was considered and declined with a reason: fifty kilobytes for navigation on a single-page app, a global store for a codebase five people will ever touch, a build step for control over every pixel at 360 wide. The discipline is not minimalism for its own sake: it is that on this device the download is the user experience.
// the entire routing layer
const [activeGame, setActiveGame] = useState(null);
if (activeGame === 'gauntlet')
return <Gauntlet onBack={() => setActiveGame(null)} />;