---
title: "Hello, World — and How This Blog Works"
description: "A tour of a minimal, dark-mode Astro blog you can read in your browser or straight from your terminal."
date: 2026-05-28
tags: ["meta", "astro", "bun"]
---
This is the first post on a blog built to be quiet, fast, and a little bit
hacker-friendly. No pop-ups, no tracking, no newsletter guilt-trips — just text
on a dark page, set in Geist with room to breathe.

If you're reading this in a browser, lovely. But you can also read it without
one.

## Read any post with curl

Every post here speaks two languages. Browsers get HTML; terminals get raw
Markdown. The same URL serves both — no flags, no headers to remember:

```bash
curl https://example.com/posts/hello-world
```

You'll get the Markdown source back, ready to pipe into a pretty-printer:

```bash
curl https://example.com/posts/hello-world | glow -
```

Prefer to be explicit? Append `.md` to any post URL and you'll get the same
thing from any client:

```bash
curl https://example.com/posts/hello-world.md
```

## How it's put together

The whole thing is a static Astro build. There's exactly one server-side
flourish: a tiny Bun process that inspects each request and decides whether you
want HTML or Markdown back. Everything else is pre-rendered files.

### The stack, briefly

- **Astro** for the static site and content collections.
- **React** islands for the search palette, the reading-progress bar, and the
  copy-code buttons — and nothing else ships JavaScript.
- **Bun** as the runtime: package manager, build tool, and production server.
- **Docker** to ship it to a DigitalOcean droplet.

### Things you might notice

There's a reading-time estimate up top, a table of contents that follows along
as you scroll, and tags you can sort by. Hover a heading and a `#` anchor
appears. Hover a code block and a copy button slides in. Press `/` anywhere to
search.

> The goal was restraint: every feature has to earn its place, and nothing
> should get between you and the words.

## What's next

More writing, mostly. If you want to follow along, there's an
[RSS feed](/rss.xml). And if you ever want the source of a post, you already
know the trick.

Thanks for reading.