Content Collections & Routes
Lumio’s content system is more advanced than a simple “one Markdown file equals one page” setup.
The project uses Astro content collections defined in:
src/content.config.ts
Main Collections
Lumio defines collections for:
pagesblogservicescase-studiesteamtestimonialsections- and more
Many collections are configurable through config.toml. For example:
[settings] blogFolder = "blog" servicesFolder = "services" caseStudiesFolder = "case-studies"That means route behavior and content lookup depend partly on config, not just file names.
The Catch-All Static Page Route
Generic static pages are rendered by:
src/pages/[...lang]/[page].astro
That file:
- loads all entries from the
pagescollection - creates static paths for each supported language
- uses
SinglePageLayout.astroto render the body
So files like these:
src/content/pages/english/privacy-policy.mdsrc/content/pages/english/terms-conditions.mdsrc/content/pages/english/components.mdx
become localized routes through that catch-all page.
Reusable Sections Are Not Standalone Pages
Files in src/content/sections/<language>/ are usually not routed directly.
They are data sources for section components such as:
src/layouts/components/sections/AboutCompanySection.astrosrc/layouts/components/sections/ContactSection.astrosrc/layouts/components/sections/PricingSection.astro
This is why editing a section file changes multiple pages at once when that section is reused.
Route Generation Mental Model
Use this simple rule:
src/pages/...decides the routesrc/content/...usually provides the datasrc/layouts/components/...controls rendering
That separation is powerful, but it is also the main reason Lumio feels more “app-like” than a basic Markdown theme.