Skip to content

Blog Posts

Blog posts are stored in src/content/blog/ organized by locale.

Create a new file in the appropriate locale folder:

src/content/blog/en/my-new-post.mdx
---
title: "Your Post Title" # Required, max 100 chars
description: "Post description" # Required, max 200 chars
publishedAt: 2026-01-28 # Required
updatedAt: 2026-01-29 # Optional
author: "Author Name" # Optional, defaults to "Team"
image: ./cover.jpg # Optional, relative image path
imageAlt: "Image description" # Optional
tags: # Optional
- astro
- tutorial
draft: false # Optional, excludes from production
featured: false # Optional, for featured sections
locale: en # Required for i18n
---
Your markdown content here...
FieldTypeRequiredDescription
titlestringYesPost title (max 100 chars)
descriptionstringYesMeta description (max 200 chars)
publishedAtdateYesPublication date
updatedAtdateNoLast updated date
authorstringNoAuthor name (default: “Team”)
imagestringNoCover image path
imageAltstringNoCover image alt text
tagsstring[]NoPost tags for categorization
draftbooleanNoHide from production
featuredbooleanNoMark as featured
localestringYesContent locale (en, es, fr)
---
title: "Getting Started with Velocity"
description: "Learn how to build your first project with Velocity"
publishedAt: 2026-01-28
author: "Jane Doe"
image: ./getting-started-cover.jpg
imageAlt: "Velocity documentation homepage"
tags:
- getting-started
- tutorial
locale: en
---
Welcome to Velocity! In this guide, we'll walk through...
## Installation
First, clone the repository:
\`\`\`bash
git clone https://github.com/southwellmedia-dev/velocity.git
\`\`\`
## Next Steps
Continue to [configuration](/configuration) to customize your site.

Place images next to your post and reference with relative paths:

src/content/blog/en/
├── my-post.mdx
└── cover.jpg
image: ./cover.jpg
![Alt text](./screenshot.png)

Mark posts as drafts to hide them in production:

draft: true

Draft posts:

  • Visible in development
  • Hidden in production builds
  • Useful for work-in-progress content

Mark posts for featured sections:

featured: true

Query featured posts:

const featured = posts.filter(post => post.data.featured);

Organize posts by locale:

src/content/blog/
├── en/ # English posts
├── es/ # Spanish posts
└── fr/ # French posts

Filter by locale:

const enPosts = posts.filter(post => post.data.locale === 'en');