Blog
This guide covers creating blog posts and release notes in Trellis Docs. For documentation pages, see Docs.
Blog posts
Blog posts live in content/blog/. Name files with a date prefix:
content/blog/2026-02-20-welcome.mdxBlog frontmatter
---
title: Welcome to Trellis
description: Introducing the Trellis docs framework.
slug: welcome
authors:
- patriciamcphee
category: Announcement
featured: true
coverImage: /img/blog/welcome-hero.jpg
---| Field | Type | Description |
|---|---|---|
title | string | Post title |
description | string | Short description shown on cards and meta tags |
slug | string | URL slug (defaults to the filename slug) |
authors | array | Author IDs or inline objects (see Authors below) |
category | string | Category label shown as a badge on cards |
featured | boolean | When true, the post appears in the featured hero slot |
coverImage | string | Path to a cover image (replaces the gradient) |
coverColor | string | CSS color for the card header (e.g. '#0078D4') |
Trellis parses the date from the filename. Posts are listed at /blog/, newest first.
Cover visuals
Each blog card and article hero shows a visual header. You have three options:
- Cover image — Set
coverImageto a path like/img/blog/my-post.jpg. The image fills the card header area. - Brand color — Set
coverColorto any CSS color (hex, rgb, hsl). The color fills the header with a subtle pattern overlay. - Category gradient (default) — If neither is set, Trellis picks a gradient based on the
categoryfield.
# Cover image
coverImage: /img/blog/my-post.jpg
# Brand color
coverColor: '#0078D4'
# No cover fields — uses the category gradientBuilt-in category gradients: Engineering, Product, Design, Tutorial, Announcement, Writing, Feature. Unrecognized categories fall back to a hash-based gradient.
Authors
Author data can be defined centrally in config/authors.ts and referenced by ID, or provided inline in frontmatter. Inline fields override the config profile.
Central author profiles
Define authors once in config/authors.ts:
export const authors: Record<string, AuthorProfile> = {
patriciamcphee: {
name: 'Patricia McPhee',
role: 'Framework Founder & Lead Technical Writer',
bio: 'Patricia is the creator of Trellis Docs and a technical writer with over 15 years of experience.',
img: '/img/authors/avatar-patriciamcphee.png',
url: 'https://github.com/patriciamcphee',
},
}| Field | Description |
|---|---|
name | Display name (required) |
role | Job title or role |
bio | Short biography shown in the author card at the bottom of articles |
img | Path to avatar image |
url | Link for the author name in the bio card |
Referencing authors in frontmatter
# By ID — resolves from config/authors.ts
authors:
- patriciamcphee
# Inline object — for guest authors or one-off posts
authors:
- name: Guest Writer
role: Contributor
bio: A guest post by an external contributor.
# Override — inline fields override the config profile
authors:
- name: Patricia McPhee
role: Special Guest # overrides the config roleWhen an inline object matches a config profile by name, the config fields are used as defaults and the inline fields take priority.
The author name at the top of each article links to the bio card at the bottom of the page.
Excerpt truncation
Use an MDX comment to mark where the excerpt ends on the blog index page:
This intro paragraph appears on the index page.
{/* truncate */}
This content only appears on the full post page.Release notes
Release notes live in content/release-notes/. Name files after the version:
content/release-notes/v1.0.0.mdRelease notes frontmatter
---
title: v1.0.0
version: 1.0.0
date: 2026-02-20
description: Initial release of Trellis on Next.js.
---
## Added
- Smart search with configurable weights
- Design token pipeline
## Changed
- Migrated from Docusaurus to Next.js
## Removed
- Legacy search plugin| Field | Description |
|---|---|
title | Display title |
version | Semantic version for sorting |
date | Release date (YYYY-MM-DD) |
description | Short summary |
Release notes are listed at /release-notes/, sorted by version (newest first).