Colophon
How this website is built.
Framework & Language
The site is built with Astro, a modern static-site generator. Content is authored in TypeScript and Astro components. The output is a fully static site — no client-side JavaScript framework, no runtime server. You can find the full source code and CI/CD setup at https://github.com/shaftoe/personal-website.
Styling
Theme forked from zaggonaut. All styling uses Tailwind CSS v4, processed through the @tailwindcss/vite plugin. Typography is handled by @tailwindcss/typography.
Fonts
- IBM Plex Mono — the primary body font, loaded from Bunny Fonts.
- Press Start 2P — the display/heading font (pixel art style), loaded from Fontsource CDN.
- Literata Variable — a variable serif font for reading, also from Fontsource.
Content
Blog posts live as Markdown files with YAML frontmatter, managed through Astro’s content collections. The changelog is parsed directly from the project’s CHANGELOG.md file at build time using marked.
Tooling
- Bun — JavaScript runtime and package manager.
- Biome — fast linter and formatter, replacing ESLint + Prettier.
- Astro · Check — static type analysis for
.astrofiles. - Netlify — hosting and continuous deployment.
Infrastructure
Versioning and deploys are fully automated. Every push to master triggers a release workflow powered by semantic-release, which analyzes conventional commit messages, bumps package.json version, updates CHANGELOG.md, and publishes a GitHub Release.
When a new version tag is created, a deploy workflow triggers a Netlify build that runs bun run build and publishes the resulting dist/ directory to their CDN. The same workflow also runs on a schedule every four hours to keep the homepage’s Mastodon posts and blog content up to date without manual intervention.
Other Bits
- RSS feed at /rss.xml, generated by @astrojs/rss.
- Sitemap generated by @astrojs/sitemap.
- Icons provided by @lucide/astro.
- Dark mode respects the user’s system preference and can be toggled manually; the choice is persisted in
localStorage.