How this blog works
A sample post that doubles as a reference for the frontmatter and Markdown features available here.
This post exists so you have something to copy. Delete it once you’ve written your own — or keep it as a scratchpad.
Writing a new post
Add a .md or .mdx file to src/content/blog/. The filename becomes the
URL, so indoor-coverage-basics.md is served at /blog/indoor-coverage-basics/.
Every post needs this frontmatter block at the top:
---
title: 'Your title'
description: 'One or two sentences. Used in listings, search results and RSS.'
pubDate: 2026-09-28
tags: ['rf', 'tooling'] # optional
updatedDate: 2026-10-02 # optional
draft: true # optional — hides it from the built site
---
The schema is checked at build time. If you typo a field name or write a date
the parser can’t read, npm run build fails and tells you which file is wrong,
rather than quietly shipping a broken page.
Drafts
Set draft: true and the post is visible while you run npm run dev but
dropped from the production build, the RSS feed and the sitemap. That’s the
safe way to leave something half-finished in the folder.
What Markdown gives you
Ordinary emphasis works — italic, bold, inline code — as do
links, lists, and tables:
| Band | Duplex | Typical indoor use |
|---|---|---|
| 380–400 MHz | FDD | TETRA / ASTRID |
| 700–900 MHz | FDD | Coverage layer |
| 1800–2600 MHz | FDD | Capacity layer |
Code blocks get syntax highlighting, and follow the page’s light/dark theme:
def path_loss_db(distance_m: float, freq_mhz: float) -> float:
"""Free-space path loss — the optimistic starting point."""
return 20 * math.log10(distance_m) + 20 * math.log10(freq_mhz) - 27.55
Blockquotes look like this. Useful for pulling out a definition or a caveat.
Images
Put images in src/assets/ and reference them relatively — Astro will
optimise and hash them:

Files in public/ are copied through untouched, which is what you want for a
PDF or anything you link to directly.
Headings and the table of contents
Any post with more than two ## headings gets an automatic table of contents
at the top. You don’t have to do anything — it’s built from the headings.