Site reference¶
What the platform actually consists of, area by area — and, in the generated inventories, every single route it serves.
RMH Studios is one web platform with an unusually wide surface: a social feed, ~18 browser games (several real-time multiplayer or 3D), a dozen full applications, a blog/news/library stack, a coin economy with Stripe memberships, and a scoped public API. That breadth is exactly why an inventory matters — it is otherwise very easy for a page to exist that nothing documents.
How this section is organised¶
The area guides are hand-written. They explain what an area is for, which routes belong to it, and which modules implement it — the kind of thing that only makes sense written by a person.
The inventories are generated by pnpm docs:site, straight from app/routes/ and the product catalogs. They are exhaustive by construction: if a route exists, it is listed. pnpm docs:site --check fails when they drift, so they cannot quietly go stale.
The RMHarks feed, profiles, messaging, communities, groups and presence.
Coins, the shop and market, staking, quests, XP, battle pass, memberships and competitive play.
Blog, news, the document library, builds, and the creator surfaces.
How a game or app is wired into the site, plus leaderboards, saves and replays.
Generated. Every page URL, its title, its access level and its source file.
Generated. Every server route in the app tier, with the HTTP methods it handles.
Generated from lib/games.ts — every game, including the unlisted ones.
Generated from lib/apps.ts — every application.
Two shells, and why it matters¶
Where a route file lives decides how the page is framed, and this trips people up more than anything else in the routing layer:
Files under
app/routes/_site/render inside the site shell — the radial nav hub, sidebar, context rail, skip link and<main>landmark.Top-level files render full-screen, with no shell at all.
Games, /login, the secret/* games, discord/* and the legal pages are top-level on purpose. Moving one under _site/ to “make it consistent” would wrap a full-screen game in a sidebar. The full-screen apps have their own chrome tier in components/shared/ (AppShell, AppHeader, the --app-* token contract).
The generated page inventory splits its tables along exactly this line, so you can see which pages are in which world.
The trust rule¶
These pages describe the site as it is at the commit they were generated from. Where a hand-written guide and the code disagree, the code wins — and the guide is a bug. Report it or fix it; don’t work around it.