Astro static site (Tailwind CSS, Svelte components) deployed on Vercel.
Create src/content/blog/{service}-{summary}.md (e.g. chatgpt-hallucination.md).
Frontmatter schema:
---
title: Short descriptive title # Max 100 chars
description: Short summary of the horror story...
tags:
- chatgpt # Service name + relevant tags (hallucination, cost, etc.)
- hallucination
author: Andras Bacsai
authorTwitter: heyandras
date: "2026-02-10T12:34:56.789Z" # ISO date string
image: /assets/{service}-{summary}.{ext} # Local image in public/assets/
category: development
isNew: true # Shows "New" badge on homepage
---Save the screenshot/image to public/assets/{service}-{summary}.{ext} (png/jpg/webp).
All images must be local — never use external URLs in frontmatter image: fields. The BaseHead.astro component automatically converts relative paths to absolute URLs for og:image and twitter:image meta tags.
Follow this pattern:
---
[Original post](https://x.com/user/status/123456)
Conclusion: Brief takeaway.
---
__tldr: One-sentence summary of what happened.__Optional sections: Fun Fact with <img> (use local paths), extended quotes/context.
Find the previous post with isNew: true and set it to isNew: false.
Astro automatically handles routing (/all/{slug}), RSS feed, and homepage listing sorted by date.
src/content/blog/*.md— Blog posts (Astro Content Collections)src/content/config.ts— Content schemasrc/config.ts— Site metadata (name, URL, author, default image)src/components/BaseHead.astro— Meta tags (og:image, twitter:image)src/pages/index.astro— Homepagesrc/pages/all/[slug].astro— Individual post pagessrc/layouts/post.astro— Post layoutpublic/assets/— All local images (post images, blog cover, etc.)