Skip to content
Type something to search...
Kivo Theme Documentation

Collections

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

A collection is a folder of similar entries: blog posts, releases, features, integrations. Each entry is one file and one page. The list page of the collection (for example /blog/) gets its own title and section blocks from the -index.md file in the same folder.

Add An Entry

  1. Copy an existing entry in the folder, for example src/content/changelog/english/2026-10-durable-workflows.md.
  2. Rename the copy. The file name becomes the URL (/changelog/2026-11-my-release/), 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.

To hide an entry, set draft: true. It still shows in npm run dev, but it is left out of the built site, the lists, the sitemap, and search. Lists are ordered by date (newest first) or by weight (lowest first), depending on the collection; the comments in each entry say which.

Collection Reference

The fields every page accepts (title, description, image, draft, customSlug, SEO fields) work on every entry. The table lists the extra fields of each collection. Each entry file shows its fields with comments.

CollectionFolderURLExtra fields
Blog postsblog//blog/<file>/date, updated, author, categories, tags, featured, imageDark
Authorsauthor/(shown on posts)title (the name), role, image, description, links
Changelogchangelog//changelog/<file>/date, version, tags (the demo uses New, Improved, Fixed, Security, Deprecated)
Featuresservices//services/<file>/icon, eyebrow, category, visual, related, options.layout, endpoints, section blocks
Solutionssolutions//solutions/<file>/icon, eyebrow, category, visual, related, weight, section blocks
Integrationsintegrations//integrations/<file>/logo, category, developer, website, docs, featured, information, related
Customer storiescustomers//customers/<file>/customer, logo, industry, companySize, region, result, featured, quote, products, information
Comparisonscompare//compare/<file>/alternative, tldr, weight, planComparisonSection and other section blocks
Careerscareers//careers/<file>/department, location, type, remote, applyUrl, countries, validThrough, weight
Teamteam//team/<customSlug>/profession, location, email, phone, social, weight

Blog

  • Authors. A post’s author: "Maya Chen" is matched to src/content/author/english/maya-chen.md (the name in lowercase, with dashes). The author box at the end of the post (photo or initials, role, bio, and links) shows when that file has a description.
  • Featured post. featured: true puts the post in the large card at the top of /blog/. Without it, the newest post is featured.
  • Categories and tags create their own list pages, /blog/category/<name>/ and /blog/tag/<name>/.
  • Reading time, related posts, table of contents, RSS (/blog/rss.xml), and the Copy page menu are automatic.
  • Posts can be .md or .mdx. Use .mdx for shortcodes like callouts and steps.
  • Posts per page: blogPagination in config.toml.

Changelog

One file per release, named by date so the folder reads in order (2026-10-durable-workflows.md); the page sorts by date. Every tag you use becomes a filter on /changelog/ and a tag page; filter.tags in changelog-list-section.md sets the order of the filter buttons. /changelog/rss.xml is automatic, and the newest release appears as a pill in the default footer.

Features (services)

The feature pages power the features overview (/services/) and the Product menu. Each entry has:

  • icon (a Lucide name) and eyebrow for the cards
  • category for the grouped layout of the features overview
  • visual: the animated illustration in the page hero. type is one of services, autoscaling, previews, workflows, database, restore, or observability; its other fields match the cells in src/content/sections/english/platform-section.md
  • related: entry names for the “Works well with” cards, for example ["service-04", "service-02"]
  • section blocks (featureGridSection, stepsSection, codeTabsSection, and others). Remove a block to hide that section on this page

Each feature page can use one of four templates with options.layout:

TemplateWhat it shows
defaultHero, feature grid, steps, code, body text, related features
apiHero, then each endpoints block as a request with its response, then grid, steps, body
guideHero, then the body with a sticky “On this page” list, then grid, steps, code
showcaseScreenshot hero, alternating feature rows, steps, code, body, testimonials

service-11.mdx (api), service-12.mdx (guide), and service-13.mdx (showcase) are working examples.

Solutions

Landing pages for an audience or a use case (/solutions/ai-apps/). Each one is built entirely from section blocks in its file: hero, logos, features, code, templates, testimonials, FAQ, related solutions, and call to action. weight sets the order, and category groups them on /solutions/.

Integrations

  • logo is an SVG path such as /images/integrations/event-stream.svg. It is inlined and drawn in the text color, so it adapts to dark mode. Use a single-color SVG.
  • category fills the filter on /integrations/ and picks related integrations.
  • featured: true lists it first, with a badge.
  • information adds rows to the details sidebar: - label: "Pricing" / value: "Free".

Customer Stories

  • logo should be a single-color logo; it is inverted in dark mode.
  • result is the headline on cards (“Halved code review time”).
  • quote has text, name, and role.
  • products links feature entries as “Products used” chips: ["service-03", "service-04"].
  • featured: true makes it the large story at the top of /customers/.

Comparisons

Each file compares your product with a generic alternative (alternative: "DIY Kubernetes"). tldr is three short takeaways under the title, and the planComparisonSection block is the side-by-side table. Keep comparisons factual and avoid naming competitors you can’t back up.

Careers

  • department groups roles on /careers/; weight orders them inside a department.
  • type is full-time, part-time, contract, or internship.
  • remote: true shows “Remote · location”.
  • applyUrl is where the Apply button goes: your applicant tracking system, a form, or mailto:.
  • date, countries, and validThrough feed the job posting data (JobPosting) that search engines read. Google allows this data only for real, open positions, so replace or delete the sample roles before launch, and remove a role when it is filled.

Team

Use customSlug for the member’s URL (/team/daniel-okafor/). image should be a square portrait; it is shown in grayscale on the grid and in color on hover. weight sets the order. social icons can be an SVG path or a Lucide icon name.

Do It With AI

Add a [blog post | changelog entry | feature | integration | customer story | role | team member]
to src/content/[folder]/english/ for: [DETAILS]. Copy the frontmatter keys of an existing entry in
that folder, keep its comments, and fill in my values. Use a file name that makes a good URL.
Then create the French version with the same file name in src/content/[folder]/french/.