Personal site and blog for Paul Wood FRSA (@paultendo).
Live at paultendo.github.io
A static site built with Astro for publishing research notes and project writing.
Current editorial focus:
- Unicode identifier security, confusable detection, and related open-source tooling
- Applied AI systems in legal and product contexts
- Launch posts and technical write-ups for projects such as
namespace-guardandconfusable-vision
- 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/.
To keep a post out of production builds, add:
draft: trueAutomatic 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- Content-first - static HTML for posts, lightweight progressive enhancement for convenience features
- Clean typography — Syne (display), Instrument Sans (body), Google Sans Code (mono)
- Editorial presentation — structured like a research archive rather than a reverse-chronological diary
- Theme toggle — dark and light themes with local preference persistence
- 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.