Personal site and blog for Paul Wood FRSA (@paultendo).
Live at paultendo.github.io
A static site built with Astro for launching open-source projects and writing about software engineering. No framework bloat, no JavaScript required for reading, fast page loads.
Current content:
- namespace-guard launch post — announcing the npm library
- Astro 5 — static site generator
- MDX — markdown with component support
- Shiki — syntax highlighting (Material Palenight theme)
- GitHub Pages — hosting
- GitHub Actions — automated deployment on push to
main
npm install
npm run devDev server runs at http://localhost:4321 with hot reload.
paultendo.github.io/
├── src/
│ ├── content/
│ │ └── posts/ # Blog posts (MDX)
│ ├── layouts/
│ │ ├── Base.astro # Base HTML layout
│ │ └── Post.astro # Blog post layout
│ ├── pages/
│ │ ├── index.astro # Homepage
│ │ └── posts/[...id].astro # Dynamic post routes
│ └── styles/
│ └── global.css # Global styles
├── .github/workflows/
│ └── deploy.yml # GitHub Pages deployment
└── astro.config.mjs # Astro configuration
Create a new .mdx file in src/content/posts/:
---
title: "Your post title"
description: "Brief description for meta tags"
date: "2026-02-20"
tags: ["tag1", "tag2"]
---
Your content here.The post will be available at /posts/your-filename/.
Automatic via GitHub Actions:
- Push to
main - Workflow builds the site (
npm run build) - Deploys
dist/to GitHub Pages
Manual build:
npm run build # Outputs to dist/
npm run preview # Preview the production build- No JavaScript required for reading content
- Clean typography — Syne (display), Instrument Sans (body), Google Sans Code (mono)
- Dark theme only — intentionally styled, not a lazy default
- Accessible — semantic HTML, skip links, focus states, ARIA where needed
- Fast — static HTML, no client-side hydration, aggressive caching
Paul Wood FRSA @paultendo
Building Oncor and open-source tools like namespace-guard.