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
- Copy an existing entry in the folder, for example
src/content/changelog/english/2026-10-durable-workflows.md. - Rename the copy. The file name becomes the URL (
/changelog/2026-11-my-release/), unless you setcustomSlug. - Change the frontmatter values and the Markdown body. Keep the keys.
- 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.
| Collection | Folder | URL | Extra fields |
|---|---|---|---|
| Blog posts | blog/ | /blog/<file>/ | date, updated, author, categories, tags, featured, imageDark |
| Authors | author/ | (shown on posts) | title (the name), role, image, description, links |
| Changelog | changelog/ | /changelog/<file>/ | date, version, tags (the demo uses New, Improved, Fixed, Security, Deprecated) |
| Features | services/ | /services/<file>/ | icon, eyebrow, category, visual, related, options.layout, endpoints, section blocks |
| Solutions | solutions/ | /solutions/<file>/ | icon, eyebrow, category, visual, related, weight, section blocks |
| Integrations | integrations/ | /integrations/<file>/ | logo, category, developer, website, docs, featured, information, related |
| Customer stories | customers/ | /customers/<file>/ | customer, logo, industry, companySize, region, result, featured, quote, products, information |
| Comparisons | compare/ | /compare/<file>/ | alternative, tldr, weight, planComparisonSection and other section blocks |
| Careers | careers/ | /careers/<file>/ | department, location, type, remote, applyUrl, countries, validThrough, weight |
| Team | team/ | /team/<customSlug>/ | profession, location, email, phone, social, weight |
Blog
- Authors. A post’s
author: "Maya Chen"is matched tosrc/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 adescription. - Featured post.
featured: trueputs 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
.mdor.mdx. Use.mdxfor shortcodes like callouts and steps. - Posts per page:
blogPaginationinconfig.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) andeyebrowfor the cardscategoryfor thegroupedlayout of the features overviewvisual: the animated illustration in the page hero.typeis one ofservices,autoscaling,previews,workflows,database,restore, orobservability; its other fields match the cells insrc/content/sections/english/platform-section.mdrelated: 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:
| Template | What it shows |
|---|---|
default | Hero, feature grid, steps, code, body text, related features |
api | Hero, then each endpoints block as a request with its response, then grid, steps, body |
guide | Hero, then the body with a sticky “On this page” list, then grid, steps, code |
showcase | Screenshot 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
logois 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.categoryfills the filter on/integrations/and picks related integrations.featured: truelists it first, with a badge.informationadds rows to the details sidebar:- label: "Pricing"/value: "Free".
Customer Stories
logoshould be a single-color logo; it is inverted in dark mode.resultis the headline on cards (“Halved code review time”).quotehastext,name, androle.productslinks feature entries as “Products used” chips:["service-03", "service-04"].featured: truemakes 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
departmentgroups roles on/careers/;weightorders them inside a department.typeisfull-time,part-time,contract, orinternship.remote: trueshows “Remote ·location”.applyUrlis where the Apply button goes: your applicant tracking system, a form, ormailto:.date,countries, andvalidThroughfeed 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 inthat 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/.