Portal structure
The portal has three top-level sections and two languages. This page defines that structure: which sections exist, the URL each one lives at, and which pages are hand-written versus generated by the build.
Sections
The top level is by genre, never by team or org unit. There are three sections and they are fixed.
Inside guides/, the portal's meta pages live under /guides/contributing/. Each cross-cutting topic lives in its own directory, /guides/<topic>/: for example, the authentication guide will live at /guides/authentication/ once it is written with the backend team.
Structure principles
Three rules decide where each directory goes. They apply to both languages alike.
URL structure
The default language is Spanish and is served without a prefix. English lives under /en/.
Slug rules:
- The slug is always English, ASCII and kebab-case:
code-review,register-a-repo. An accented slug percent-encodes into unreadable URLs. - The slug is identical across both languages. Only the content and the navigation labels change, never the path.
- An aggregated repo's slug (
/repos/<slug>/) never changes, not even when the repo moves in GitLab. How to register a repo explains why.
Paths that do change are covered by redirects (@rspress/plugin-client-redirects), so a link that was already shared does not die.
Hand-written and generated pages
docs/*/repos/ is rebuilt from repos-inventory.json (the catalog) and docs-manifest.yaml (the aggregation). pnpm run gen generates the catalog index; pnpm run aggregate generates the aggregated docs.
Every hand-written page exists in both languages under the same slug. The build fails and names the missing file when a page exists in one language and not the other. Pages under repos/ are exempt: they are copied as their source repo wrote them.
How navigation is defined
_nav.json(one per language) defines the top bar. Links are written without the language prefix:/guides/, not/en/guides/. Rspress adds the prefix per language._meta.json(one per directory and language) defines the sidebar order and labels.
Related
- How to contribute to the portal — the flow to add or edit a page
- Page templates — the anatomy of each page type
- How to register a repo — the catalog and aggregation

