Writing News Posts
How to add a news / blog post, set authors, and use drafts and tags.
News posts (announcements, recaps, and other blog entries) are Markdown files
in src/content/news/. Drop a new file in that folder and it automatically
appears on the News page, gets its own detail page at
/news/<filename>/, and is added to the RSS feed. No template
changes are needed.
Create a post
Create src/content/news/my-post.md. The filename (without .md) becomes the
URL slug, so keep it short and use hyphens — e.g. cfp-now-open.md →
/news/cfp-now-open/.
---
title: "Headline goes here"
date: 2026-09-01
author: "Maintainer Summit Team"
summary: "One-line summary shown on the news index, the RSS feed, and social cards."
tags: ["announcement"]
draft: false
---
Your post body in Markdown. The first thing readers see under the title is the
`summary` above, styled as a lede — so write the body as if it picks up from
there.
Frontmatter fields
| Field | Required | Notes |
|---|---|---|
title |
yes | Headline. Also used for the page <title> and OG tags. |
date |
yes | YYYY-MM-DD. Posts are sorted newest-first by this date. |
updated |
no | YYYY-MM-DD. Shows “Updated …” in the byline when later than date. See below. |
summary |
yes | One sentence. Shown on the index card, the post lede, and the RSS description. |
author |
no | Defaults to "Maintainer Summit Team". One name or several — see below. |
tags |
no | List of strings, shown as chips and included as RSS categories. |
image |
no | Social-share image (Open Graph / Twitter card). See below. |
draft |
no | true hides the post from the site and the feed. Defaults to false. |
Multiple authors
author accepts either a single name or a list of names. A single name can be
written either way:
author: "Mariatta Wijaya"
For several authors, use a YAML list:
author:
- "Mariatta Wijaya"
- "Inessa Pawson"
- "Leah Wasser"
The byline renders the names with proper “and” joining — two names become
“A and B”, three become “A, B, and C” — on the news index, the post page, and
the RSS feed. Each name also gets its own article:author meta tag.
Social-share image
Set an image to give the post a cover image — it appears at the top of the
post, as the thumbnail on the news list, and as the preview card when the post
is shared on social media (Open Graph + the Twitter/X large card). It’s optional;
posts without one simply have no image (and share using the site default, if one
is set in src/data/site.ts).
image: "/og/my-post.jpg"
- Where it goes: put the file in
public/(e.g.public/og/my-post.jpg) and reference it with an absolute path from the site root, like/og/my-post.jpg. - Size: 1200 × 630 px — the standard Open Graph ratio (1.91:1), used by Facebook, LinkedIn, and the X large card.
- Format & file size: JPG for photos, PNG for flat graphics. Keep it under ~1 MB (200–500 KB is ideal) so it loads quickly when shared.
- Safe area: keep faces and any text toward the center — feeds sometimes crop the edges.
- Overlaid text: if you put a title on the image, make it large; the card is shown small in feeds.
When image is set, the page emits og:image and twitter:image and upgrades
the Twitter card to summary_large_image. The layout turns the path into a full
URL automatically, so a root-relative path is all you need.
Updated date
If you make a meaningful change to a post after it’s published, add an updated
date. The byline then shows “Updated date),
and the page sets article:modified_time for SEO. Use it for substantive
revisions — corrections or new information — not for typo fixes.
date: 2026-09-01
updated: 2026-09-15
Writing a summit recap
A recap is a normal news post tagged recap that leans on two extra
components: a photo gallery and a pull-quote. Both need the post to be an
.mdx file rather than .md — rename the extension and add the imports at
the top, everything else about the post stays the same.
---
title: "Recap: Maintainer Summit 2026"
date: 2026-05-20
summary: "What happened at Long Beach, in photos and quotes."
tags: ["recap"]
---
import Gallery from 'astro-theme-popular/components/Gallery.astro';
import Photo from 'astro-theme-popular/components/Photo.astro';
import Pullquote from 'astro-theme-popular/components/Pullquote.astro';
The room was full by ten past nine.
<Pullquote cite="A first-time attendee">
The first conference room where nobody had to explain what a triage backlog is.
</Pullquote>
<Gallery>
<Photo src="/images/recap/2026-room.jpg" alt="A packed room of about eighty people facing a speaker" />
<Photo src="/images/recap/2026-roundtable.jpg" alt="Six people around a table mid-discussion" caption="The funding roundtable" />
</Gallery>
altis required on every<Photo>and the build fails without it. Write what the photo shows, not “summit photo”.captionis optional and appears under the image.- The gallery is a plain CSS grid with no JavaScript and no lightbox: each photo
links to its own full-size file, so put reasonably sized images in
public/. - Get permission before publishing photos of identifiable attendees.
Drafts
Set draft: true while a post is in progress. It is excluded from the news
index, the detail-page routes, and the RSS feed at build time, so it never
ships. Flip it to false (or remove the line) to publish.
Preview before publishing
Run the dev server and the post hot-reloads as you edit:
npm run dev # http://localhost:4321/news
Before opening a PR, run npm run build — Astro validates every post’s
frontmatter against the schema in src/content.config.ts, so a typo in a field
name or a malformed date fails the build rather than shipping broken.