Personal blog of a developer trying to learn all the things.
Built with Astro. Theme: Solid State by HTML5 UP, vendored under public/assets/.
- Node 24 (see
.nvmrc). Astro 7 requires Node 22.12 or newer.
npm ci # install
npm run dev # dev server at http://localhost:4321
npm run build # static build to dist/
npm run preview # serve dist/
npm run check # astro check (types + templates)Create src/content/posts/topic/<slug>.md. The slug becomes the URL: /posts/topic/<slug>/.
---
title: "Post title"
published: 2026-01-31
drafted: 2026-01-15 # optional
edited: 2026-02-01 # optional
tags:
- Reactive Extensions
- C#
draft: false # true hides the post from the site and feed
---- Posts with a future
publisheddate, ordraft: true, are not built. - Images go in
public/images/and are referenced as/images/<file>. - Tags are grouped case-insensitively. Tag URLs are lower case, replace spaces with
-, drop a leading., and turn#intosharp(.NET Foundationbecomes/tags/net-foundation/,C#becomes/tags/csharp/). Netlify normalizes URLs to lower case, so this keeps canonical links one hop free. - Static pages live in
src/content/pages/and render at/<id>/. Add a nav entry insrc/site.ts. - Frontmatter is validated by the schema in
src/content.config.ts.
| Path | Purpose |
|---|---|
src/content/ |
Markdown content collections (posts, pages) |
src/pages/ |
Routes: home, archive, post, tags, static pages, 404, feed.rss |
src/layouts/Base.astro |
Solid State shell: head, header, menu, footer, scripts |
src/components/ |
Banner, Section, PostCard, PostListItem, TagButtons, Disqus, SocialLinks |
src/lib/posts.ts |
Query, tag slug, date and excerpt helpers |
src/site.ts |
Site title, nav, social links |
public/_redirects |
Netlify 301s from legacy Wyam .html URLs |
GitHub Actions (.github/workflows/publish.yml) builds on every push to main and draft/* and on pull requests.
Pushes to main deploy dist/ to Netlify with netlify-cli using the NETLIFY_TOKEN secret.
Pull requests from this repository get a preview deploy aliased pr-<number>.