Homepage Variants
Techlo ships with three homepage variants. This is one of the first places users get confused, because each homepage has:
- its own page file
- its own homepage entry in
src/content/homepage/<language>/ - its own section composition
- its own header layout (and sometimes a different header position)
Home 01 — Dark hero, startup focus

- Page file:
src/pages/[...lang]/index.astro - Content entry:
src/content/homepage/<language>/-index.md - Uses
headerLayout="one"andhasFooterDarkBackground={true}
Home 02 — Light hero, agency focus

- Page file:
src/pages/[...lang]/home-two.astro - Content entry:
src/content/homepage/<language>/home-two.md - Uses
headerLayout="two"andheaderPosition="fixed"
Home 03 — Centered dark hero, business focus

- Page file:
src/pages/[...lang]/home-three.astro - Content entry:
src/content/homepage/<language>/home-three.md - Uses
headerLayout="three"andheaderPosition="fixed"
How The Homepage Files Work
Each homepage imports a different stack of section components. Example:
---import Base from "@/layouts/Base.astro";import BannerTwo from "@/components/sections/BannerTwo.astro";import ServicesSection from "@/components/sections/ServicesSection.astro";import ProjectsSection from "@/components/sections/ProjectsSection.astro";import PricingSection from "@/components/sections/PricingSection.astro";
const homepageContent = await getEntryCTM("homepage", "home-two", Astro.currentLocale);---
<Base {...homepageContent?.data} headerLayout="two" headerPosition="fixed"> <BannerTwo /> <ServicesSection content={{ options: { layout: "grid" } }} /> <ProjectsSection content={{ options: { layout: "grid", limit: 6 } }} /> <PricingSection /></Base>That means changing a homepage usually involves two layers:
- updating the page-level content entry in
src/content/homepage/... - updating the individual section content files in
src/content/sections/...
Important Detail: Homepage Content Files Are Thin
The homepage content files such as -index.md, home-two.md, and home-three.md mostly contain page-level metadata (title, meta description) plus optional section overrides.
The actual visible homepage content usually comes from reusable section entries like:
src/content/sections/english/banner.mdsrc/content/sections/english/about-section.mdsrc/content/sections/english/services-section.md
So if you update only src/content/homepage/english/home-three.md, you may not see a section’s copy change unless you override it there. You usually need to update the matching section file instead.
Same Section, Different Layout
Several sections accept a layout option, so the same data renders differently per homepage. For example, the Projects section is masonry on Home 01, grid on Home 02, and carousel on Home 03:
<ProjectsSection content={{ options: { layout: "masonry", limit: 7 } }} /> // Home 01<ProjectsSection content={{ options: { layout: "grid", limit: 6 } }} /> // Home 02<ProjectsSection content={{ options: { layout: "carousel", limit: 5 } }} /> // Home 03Safe Editing Workflow
If you want to change a homepage safely:
- Open the relevant page file in
src/pages/[...lang]/ - Note the imported section components and the props passed to them
- Edit the corresponding
src/content/sections/<language>/...files first - Only edit the Astro section component if you need structural or styling changes