Peng.lyBlog

Noot noot, it's a blog

The first post, and a quick look round. Every post is a folder of Markdown, comes with a feed and a plain text copy, and there's a penguin.

This is the writing bit of peng.ly. Mostly code, security and whatever I’ve been poking at that week, written up so I remember it, and so you don’t have to find out the hard way.

What’s here

Each post lives in its own folder as plain Markdown, with any pictures sat right next to it. That’s the whole system.

  • Every post is tagged, and every tag gets its own page
  • The archive has the lot, by year
  • Search runs in your browser, so nothing you type gets sent anywhere

Spotted something wrong? The source for every post is on GitHub, so a PR is very welcome.

For the robots

Plenty of what reads this stuff isn’t a person, so everything has a version a machine can pick up easily.

WhatWhere
Full-text RSS/rss.xml
A contents page for LLMs/llms.txt
Every post in one file/llms-full.txt
Any post as Markdownits address, with .md on the end
Sitemap/sitemap-index.xml

Light, dark, or whatever your system says

The theme follows your system until you press the toggle up top, then it remembers your pick. Choose the one your system would’ve shown anyway and it goes back to following along.

The front page of the blog, in the light theme on the left and the dark one on the right

Under the bonnet

It’s Astro, built to static files and served from Vercel. No JavaScript turns up unless a page needs it, and so far that’s search, the copy buttons on code and the theme toggle.

astro.config.ts
export default defineConfig({
  site: 'https://blog.peng.ly',
  trailingSlash: 'always',
  markdown,
});

Thanks for reading :)