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

Collections

Skill level: Beginner · Files: src/content/<collection>/<language>/

A collection is a folder of similar entries: solutions, blog posts, people, projects. Each entry is one file and one page. The list page of the collection gets its title, header image, and options from the -index.md file in the same folder.

Add An Entry

  1. Copy an existing entry in the folder, for example src/content/solutions/english/cost-optimization.md.
  2. Rename the copy with lowercase words joined by hyphens, such as tax-advisory.md. The file name becomes the URL (/solutions/tax-advisory/), unless you set customSlug.
  3. Change the frontmatter values and the Markdown body. Keep the keys.
  4. Add the same file name in french/ with the translated text. The language switch links the two by file name.

Set draft: true while you write: the entry shows in npm run dev but is left out of the built site, the lists, and the sitemap. Lists are ordered by weight (lower numbers first), except careers, which use order.

Collection Reference

The fields every page accepts (title, description, image, draft, customSlug, the SEO fields, and weight) work on every entry. The table lists the extra fields of each collection. Copy an existing entry to see them in use.

CollectionFolderURLExtra fields
Solutionssolutions//solutions/<file>/icon, breadcrumbLabel, and any detail block (overviewSection, valuesSection, audienceSection, approachSection, benefitsSection, caseStudiesSection)
Blog postsblog//blog/<file>/date, author, categories, tags
Portfolioportfolio//portfolio/<file>/subTitle, badge, workCategories, categories, information, challenge, solution, process, keyFeatures, detailImages, results, images
Industriesindustries//industries/<file>/imageAlt, breadcrumbLabel, and any detail block (overviewSection, methodologySection, caseStudiesSection, trendsSection, leaderSection, and others)
Case studiescase-study-page//case-study/<file>/imageAlt, metric, metricLabel, metadata, noteStats, detail
Peoplepeople//people/<file>/role, cardImage, heroImage, introBiography, expertise, certifications, education, publications, latestResources, relatedPeople, contact fields
Careerscareers//careers/<file>/order, location, employmentType, experience, salary, application

Solutions

Your services are the solutions collection. solutions/english/-index.md is the list page (/solutions/), and its detailDefaults block holds the detail content every solution page shares: header image, overview, values, audience, approach, benefits, and case studies. A solution file only needs its card data and the blocks it changes:

title: "Tax & accounting consulting"
weight: 12
description: "Tax planning, compliance, and accounting support that keeps your filings accurate and your finances ready for growth."
overviewSection:
title: "We handle tax planning, compliance, and bookkeeping with care..."

A block you set in the entry replaces the same block of detailDefaults. The services sections (services-centered.md, services-parallax.md, services-slider.md) show cards from this collection. Old /services/ URLs redirect to /solutions/.

Blog

  • List pages. /blog/ and /blog/standard/ show the standard list, /blog/style-01/ and /blog/style-02/ two other designs. All read the title, description, and header image from blog/english/-index.md. Keep the designs you like and remove the others from the menu.
  • Author. author is the name shown on the post, with its initials. A post with no author, or author: "admin", shows blog.defaultAuthor from src/i18n/en.json (and fr.json) instead. The reading time and “Last Update” labels are blog.minutesRead and blog.lastUpdate in the same files.
  • Categories and tags create their own list pages, /blog/category/<name>/ and /blog/tag/<name>/.
  • RSS. /blog/rss.xml (and /fr/blog/rss.xml) lists every published post. See SEO & AI Visibility.
  • Posts can be .md or .mdx. Use .mdx for shortcodes such as <ArticleFigure>.

Portfolio

  • workCategories fill the filter buttons on /portfolio/ (in the horizontal list layout).
  • categories create the pages /portfolio/category/<name>/.
  • information is the list of facts on the project page: label, value, and an optional appendValue such as "%".
  • process.list and keyFeatures.list items take an icon (a Lucide name) and a label.
  • results.list items accept <span> to highlight a number.
  • images is the slider at the top of the project page.

The list layout and the number of projects per page are options.layout and options.limit in portfolio/english/-index.md.

Industries

Industries work like solutions: industries/english/-index.md is the list page (/industries/), and its detailDefaults block holds the detail content every industry page shares. An industry file sets its card data and any block it changes, such as overviewSection. The list page’s layout (list or grid) is options.layout in the same -index.md.

The two industry layouts (/industries/style-01/ and /industries/style-02/) are separate pages with their own folders. See Section Variants.

Case Studies

The case study collection works a little differently:

  • case-study-page/english/-index.md holds the list page (title, filter, pagination, download buttons) and the shared detail content (details) that every case study page shows.
  • Each case file holds the card data: title, description, image, metric, metricLabel, metadata (label and value rows, such as category, client, location, date), and noteStats.
  • To change the detail content for one case only, add a detail block to its file. Each top-level key you set there (for example overview or challenges) replaces the same key of the shared details.
  • The French -index.md only needs what you translate: a top-level field it leaves out (such as details) falls back to the English file.

The filter buttons on /case-study/ come from filter.categories in -index.md.

People

  • The list page (/people/) has search, filters, and “load more”. Its labels and counts are in people/english/-index.md (initialVisible, loadStep, searchPlaceholder, and others).
  • Each profile has a card image (cardImage) and a hero image (heroImage), a biography, expertise, certifications, education, publications, latest resources, and contact fields (phone, email, linkedinUrl).
  • relatedPeople lists other profiles by file name: ["jonathan-miller", "emma-davis"].

The sample profiles are demo people. Replace them with your team, and remove any you don’t need.

Careers

  • The list page content (careers/english/-index.md) has the intro, benefits, virtual tour video and gallery, achievements, recruitment steps, and the labels of the openings list.
  • Each role sets order (its position in the list), location, employmentType, experience, salary, and an application box with an Apply button. Point that button at your application form or mailto: address.
  • The Markdown body is the job description.

Replace or delete the sample roles before launch: only list positions that are open.

Testimonials

The quotes shown by the testimonial sliders live in src/content/testimonial/english/-index.md, in two lists: home and home2. Each quote has a customer (name, role, company, image), a description, and an optional video.

Do It With AI

Add a [solution | blog post | portfolio project | industry | case study | person | role]
to src/content/[folder]/english/ for: [DETAILS]. Copy the frontmatter keys of an existing
entry in that folder and keep them. Use a lowercase file name with hyphens that makes a good
URL. Then create the French version with the same file name in src/content/[folder]/french/.
Run npm run astro-check when you are done.
Type something to search...