Pages tree & dynamic routes
Complete file list
pages/[locale]/ contains 22 files, grouped by responsibility:
Entry and aggregation
Section pages
Detail pages
Redirects
Note: /[locale]/game does not exist. useLayoutRouteMode and prefetch matchers still include it as a standalone-pattern branch, but there is no pages/[locale]/game file. This is the "legacy matcher" recorded as GOTCHAS.md item 21.
Protected and feed
getStaticPaths behavior
web/[id].tsx:pathsflattens the three groups (web / game / early) fromdata/projectsfor the active locale.fallback: false.life/[slug].tsx:pathsflattensdata/life(gameData / travelData / otherData) for the active locale.fallback: false.blog/[slug].tsx:pathspulls the slug list fromblog-index.json(when the external content repo is configured) or falls back to the bundledcontent/blog/init/posts.fallback: 'blocking'allows new slugs to be rendered on demand and then cached via ISR.
Route loading overlay
useRouteLoadingKind(router) decides the loading overlay variant from the leaving path, not the target:
home/content → blog detail: default right-side overlay; left HUD stays visibleblog detail → blog detail: standalone overlay; left HUD is already hidden
Do not flip this to target-based selection — it breaks one of the two directions. This is GOTCHAS.md item 7.
See also
- Complete list of contexts and hooks:
hooks-and-contexts - Component hierarchy:
component-architecture