Skip to content
New: Customize your theme with an AI assistant. Read the guide

Section Layouts

Skill level: Beginner · Time: 1 minute per section

Most Homio sections can be drawn in more than one way. The hero has four looks, the reviews eight, the services seven. You pick one with a single line, and the section keeps its copy:

options:
layout: "carousel"

No code changes: every layout of a section reads the same fields. A few layouts use an extra optional field (a second photo, a list of logos), shown as a comment in the section file.

Where To Set A Layout

Set it in…It applies to…
The section file, src/content/sections/<language>/<section>.mdEvery page that shows the section without its own layout
A page block, for example reviewsSection: in a page fileThat page only

Set it in both language folders. Without a layout value, a section uses default (the logos use grid).

Copy the value from the comment next to layout: or from the catalog below. Section files have no schema, so npm run astro-check doesn’t report a misspelled value there: open the page to check it. In page blocks of files with a schema (for example homepage/english/home-cleaning.md), astro-check reports a value that doesn’t exist.

Preview Every Layout: /elements/

The Homio layout gallery at /elements/ with the jump list of sections and layouts

Open /elements/ on your site (http://localhost:4321/elements/ with npm run dev). It shows every section in every layout, with the section’s default content, so you can compare looks before you choose. A list at the top jumps to each section and each layout, and each preview names the value to copy. The page ends with the header and footer layouts and the page templates.

The gallery’s copy is in src/content/pages/english/elements.md (and french/). The page is noindex and left out of the sitemap. Before launch, keep it as a private reference or delete src/pages/[...lang]/elements.astro, both elements.md files, and the Elements link in the Pages menu of src/config/menu.en.json and menu.fr.json.

Layout Catalog

The values come from the layoutOption([...]) lists in src/sections.schema.ts. The first value of each section is its default.

Hero

File: hero-section.md · Block: heroSection

LayoutWhat it looks like
defaultA framed photo with a sage card on one side (title, one line, two buttons, three check items), a sunflower price sticker, and the rating chip in a notch of the photo
splitA light mint panel with the copy, a call pill, and the main button, beside a photo that runs to the page edge with a white price card pinned to it
formA framed photo band with a white card over its lower part holding a short quote form
bandA full-width photo under the header with the title in white on it, and an optional small photo card holding the main button

priceTag sets the sticker (default) and the price card (split); form holds the quote form fields; trades adds the row of trade tiles with from-prices under the default and band heroes. The band hero sits under the simple header, which turns transparent over the photo, as on /home-handyman/.

Trust Strip

File: trust-strip.md · Block: trustStrip

LayoutWhat it looks like
defaultA deep green rounded block: the rating as a big number with stars, then each fact beside its icon, split by thin dividers
badgesA white card: the rating and each rating source on the first row, the facts on the second
featuresA warm band with three facts, each with an icon in a small square, a short title, and one or two lines. No rating

Services

File: services-section.md · Block: servicesSection

LayoutWhat it looks like
defaultPhoto cards by trade, with the from-price of each
listGrouped rows with duration, crew, and price, under sticky trade pills (the /services/ page)
tradesOne trade at a time, with a tab per trade
cardsGradient frames with tilted photos and a “Learn more” pill per trade
columnsThe intro split in two, then one column per service with an icon, split by thin lines
overlayTall photo cards with the trade name on the photo, and a centred button
checklistA centred intro over a white card per service with check rows, then a green-bordered guarantee card (customTile)

The trades, services, and prices come from src/content/services/ and src/content/pricing/.

Steps

File: steps-section.md · Block: stepsSection

LayoutWhat it looks like
defaultOne bold colour block per step with a huge number, the title, the text, and the meta line
rowA light row of three to five steps with big numbers, on thin lines
timelineA sticky intro beside a schedule: a time column, a line with round nodes, and a photo per step
illustratedMint circles with line drawings (illustration per step), joined by arrows
staggeredFour cards that step down from left to right, each with a photo
pathSteps placed right, left, right along a dashed winding line, with the button under it

Plans

File: plans-section.md · Block: plansSection

LayoutWhat it looks like
defaultPlan cards with the visit-frequency toggle
hourlyThe trade rate sheet: rate, minimum, and note per service (ignores plans)
tableEvery plan and frequency price at once, in one table, with no toggle
savingsThree sunflower tiles: the label and title in the middle, the first two recurring discounts beside it

/pricing/ shows default and, under it, a second plans block (ratesSection) in the hourly layout.

Add-Ons

File: add-ons-section.md · Block: addOnsSection

LayoutWhat it looks like
defaultTiles, four per row on desktop
listOne list with the prices on the right

What’s Included

File: included-section.md · Block: includedSection

LayoutWhat it looks like
defaultA table with one column per service and one row per task, grouped by room
roomsOne tab per room

Reviews

File: reviews-section.md · Block: reviewsSection

LayoutWhat it looks like
defaultThe rating summary beside a lead review, over a two-column grid
marqueeA rating line, then rows of short reviews moving slowly in opposite directions (still, and scrollable, with reduced motion)
wallA ratings table, a featured band, and a review wall with service filter buttons (the /reviews/ page)
summaryThe rating and the ratings per source beside three reviews
carouselA sage panel with two review cards in view, round arrows, dots, and a rating chip in a tab
spotlightA big counter and client logos, then one review at a time with a picker
singleOne big card at a time with a photo, the stars, and the quote, with round arrows
bandA green block with a photo card (photos) and client logos, a rating tab, and review cards

The reviews come from src/content/reviews/, and the rating figures from trust-strip.md. spotlight and single show a photo per review only when you add real portraits in portraits; never use placeholder faces. See Reviews & Projects.

Service Areas

File: areas-section.md · Block: areasSection

LayoutWhat it looks like
defaultArea pills and the ZIP code finder beside a neighbourhood photo
listThe finder on a band, then one card per area with its ZIP codes and neighbourhoods (the /areas/ page)
finderThe intro beside the finder panel and its “All areas” list
tabsOne tab per area with its hours, address, phone, email, link, and photo

Call To Action

File: call-to-action.md · Block: ctaSection

LayoutWhat it looks like
defaultWith an image: the title, text, button, and phone beside a framed photo. Without one: a sunflower block with the same copy
splitCopy on the left and a recap card with the buttons and phone on the right (ticket)
bandA full-width brand-green band with a label, title, text, call pill, button, and photo
newsletterCopy beside the email signup form (falls back to default when [settings.subscription] enable = false)
slantedA deep green block with the photo at the bottom, its top edge cut at a slant

The call to action ships off (enable: false in call-to-action.md). A page shows it with a ctaSection block that sets enable: true. See Footer & CTA Band.

FAQ

File: questions-section.md · Block: questionsSection

LayoutWhat it looks like
defaultA sticky intro and call box beside the accordion. With group on the questions and groupNav: true, a topic index with counts and a search box (the /faq/ page)
stackedThe intro across the top, then one band per group of questions
cardA centred intro, then a warm side card beside the accordion
gridA centred intro over two columns of outlined questions

Feature Rows

File: feature-grid-section.md · Block: featureGridSection

LayoutWhat it looks like
defaultAn icon grid, three or four columns (columns)
alternatingOne row per item, the text and photo swapping sides on every other row
tabsThe item titles as tabs, with the active item’s text and photo beside them
stickyThe intro and buttons stay in view while the items scroll past
bentoBordered cells of mixed widths, each with an optional photo
showcaseA tall photo with a play button for video, and a second photo beside a green panel with two points
splitA photo on one half and a deep green panel with the title, points, and buttons on the other
checksCheck rows split by thin lines beside a large rounded photo

Why Us

File: why-us-section.md · Block: whyUsSection

LayoutWhat it looks like
defaultA photo collage beside the benefits
storyA sage “who we are” panel over a green block with the benefit cards and the numbers from metrics-section.md (the main homepage)
collageTwo overlapping photos with a rotating circle of words, the opening hours, and a call button
mediaA tall photo beside the copy, two short points, and a button
accordionThe copy, the benefits as rows that open, a button, and a photo

Numbers

File: metrics-section.md · Block: metricsSection

LayoutWhat it looks like
defaultThree or four huge numbers with a bold label, counting up on scroll
boxThe numbers in one warm box with thin dividers

Before/After

File: before-after-section.md · Block: beforeAfterSection

LayoutWhat it looks like
defaultOne large before/after slider (drag the line, or use the arrow keys) beside a project card with the service, area, and total
gridA grid of project cards, with optional trade filter buttons (filter) and a large featured card (featuredLarge)
galleryA masonry of job photos with a button. No sliders

Contact

File: contact-section.md · Block: contactSection

LayoutWhat it looks like
defaultThe open-now line, the phone as the headline, text, email, and office rows, the hours table, and the form (the /contact/ page)
walkthroughAn intro and check rows (benefits) beside a form card, for commercial “request a walkthrough” pages
quoteA gradient form card beside a photo and a guarantee card (guarantee)

Team

File: team-grid-section.md · Block: teamGridSection

LayoutWhat it looks like
defaultRoster cards from src/content/team/
portraitsA centred intro, then photo cards with the name and role. A member without a photo gets a card without one

Logos

File: clients.md · Block: clientsSection

LayoutWhat it looks like
gridLogos in a grid of 4 or 6 per row (columnsPerRow)
plainA borderless row of logos

Booking Request

File: booking-section.md · Block: bookingSection

LayoutWhat it looks like
defaultThe full five-step booking form (the /book/ page)
cardA photo backdrop with a white card holding a photo, three numbers, and the first step. Continue opens /book/ with the choice

Blog Teaser

File: related-posts-section.md · Block: relatedPostsSection

LayoutWhat it looks like
defaultA lead post and rows
sideThe intro and link button beside two posts

Service Page Hero

File: service-hero-section.md · Set in each service: options.layout in src/content/services/english/<service>.md

LayoutWhat it looks like
defaultThe service facts and a static price ticket
cleaningThe estimator in the hero, locked to this service
repairThe hourly rate block and a job list ticket, with a “Send your list” button
commercialA site ticket and a “Request a walkthrough” button, with no booking and no total

This value is more than a look: it picks the whole template of the service page and its section order. See Services & What’s Included.

Sections With One Layout

These have layout: "default" only, ready for more later: instant estimate (estimate-section.md), about hero, story, values, careers band, open roles, guarantee claim, credentials (compliance-section.md), contact options, not our job (not-covered-section.md), blog list, newsletter, and not found. The gift card and referral blocks have one layout too.

Inner pages open with a page header, set per page in a pageHeader block of the page file (there is no section file):

src/content/faq/english/-index.md
pageHeader:
breadcrumb: true
eyebrow: ""
description: "Short answers about prices, the visit, your crew, and changes. Each one links to the detail."
image: "/images/steps/book-on-phone-hands.jpg" # 4:3 photo on the right (`split`)
options:
layout: "split" # default | intro | centered | split
LayoutWhat it looks like
defaultThe title and description on the left, short facts (the summary) on the right
introCompact: the title and description on the left, the buttons or phone line on the right (the /book/ page)
centeredOne narrow centred column, the facts as one line
splitThe copy on the left and, on the right, a fact sheet: the ticket, else the image (with both, the ticket rows show as a card over the photo)

The title comes from the page’s title. The other fields are breadcrumb, eyebrow, description, primaryButton, secondaryButton, buttons, badges, phone (style: "line" or "button"), summary, ticket, image, and imageAlt. options.compact: true gives another layout the intro height.

The site header and footer have their own layouts, set in [settings.layout] of config.toml, or per page with headerLayout and footerLayout in the frontmatter:

[settings.layout]
header = "default" # default | simple | centered | utility
footer = "default" # default | minimal | large | columns

See Header & Mobile Bar and Footer & CTA Band.

What The Homepages Use

The four homepages are the best showcase of the layouts. To reuse a look, copy the block (and any extra fields) from that homepage’s file in src/content/homepage/english/.

Section//home-cleaning//home-commercial//home-handyman/
Herodefaultformsplitband
Stepsillustratedpath–staggered
Why usstoryaccordioncollagemedia
Servicescardschecklistcolumnsoverlay
Reviewscarouselbandspotlightsingle
Contactquote–walkthrough–
FAQdefaultgrid–card
Feature rows–checksshowcasesplit
Other–plans savings, booking card, blog side, areas tabsteam portraits, CTA bandtrust strip features, numbers box, before/after gallery, CTA slanted

Do It With AI

Switch the [SECTION] section to the [LAYOUT] layout [everywhere | only on PAGE URL]. Check the
allowed values in layoutOption([...]) in src/sections.schema.ts and the comment next to layout: in
src/content/sections/english/[FILE].md. If the layout uses extra fields, copy them from the
homepage file that already uses it. Change english/ and french/, then run npm run astro-check and
tell me which page to open to check it.
Type something to search...