Contributing
Adding Blog Posts
How to write and publish blog posts on the Keel marketing site.
Adding Blog Posts
Blog posts are MDX files in content/blog/. Each file becomes a page at /blog/{slug}.
File Naming
Use the format: YYYY-MM-title-slug.mdx
content/blog/
├── 2026-04-announcing-keel.mdx
├── 2026-04-why-traders-lose-money.mdx
└── 2026-05-funding-rate-strategies.mdxFrontmatter Schema
Every blog post requires this frontmatter:
---
title: "Your Blog Post Title"
author: "Author Name"
date: "2026-04-15"
description: "A brief description for SEO and social cards (max 160 chars)."
tags: ["strategy", "hyperliquid"]
image: "/blog/your-image.png" # Optional
draft: false # Set to true to hide from listings
---Required Fields
| Field | Type | Description |
|---|---|---|
title | string | Post title (used as H1 and in page metadata) |
author | string | Author name |
date | string | ISO date format YYYY-MM-DD |
description | string | SEO description, shown in blog listing cards |
Optional Fields
| Field | Type | Default | Description |
|---|---|---|---|
tags | string[] | [] | Topic tags for filtering |
image | string | — | OG image path (relative to /public) |
draft | boolean | false | Draft posts are hidden from listings and sitemap |
MDX Features
You can use all standard Markdown plus:
Code Blocks
```python title="strategy.py"
def create_strategy():
return Pipeline([
PriceData("ETH-USD", "15m"),
EMACrossover(fast=9, slow=21),
])
```Callouts
<Callout type="info">
This is an info callout for important notes.
</Callout>
<Callout type="warn">
This is a warning callout.
</Callout>Images
Place images in public/blog/ and reference them:
Preview Locally
cd services/keel-site
npm run dev
# Visit http://localhost:3001/blog/your-slugPublishing
- Set
draft: falsein frontmatter - Commit and push to
main - CI builds and deploys automatically