astro-theme-aonote is an Astro port of runsli/Aonote: the Python static blog’s layout and Markdown features rebuilt on Astro, ready for Vercel, Netlify, GitHub Pages, or any static host.
The goal is not a heavy web app—it is a calm, maintainable writing baseline. Content stays in Markdown, styles in CSS, and the build output is plain static files you can publish anywhere.
Good fits
- Personal blogs: learning notes, projects, reading lists, long-form thinking.
- Technical notes: snippets, postmortems, tool configs, and workflows.
- Lightweight docs: changelogs, guides, and design decisions.
- Existing Astro sites: reuse Aonote’s layout and Markdown extensions without a Python build script.
If you already use Astro—or want its deploy and plugin ecosystem—this branch is usually simpler than the upstream Python generator.
Included out of the box
- Home, posts, archive, tags, about, and 404 pages.
- Markdown: GFM, Shiki highlighting, tables, footnotes, task lists, admonitions, and MathML math.
- RSS, Atom, sitemap, canonical URLs, Open Graph, and Twitter cards.
- Light/dark theme, mobile navigation, and in-page table of contents.
Getting started
- Edit site name, description, author, and
baseUrlinsrc/site.config.ts. - Add or replace posts under
src/content/posts/(kebab-case filenames recommended). - Tune colors, fonts, and spacing in
src/styles/aonote.cssif needed. - Run
npm run devlocally ornpm run buildto producedist/. - Deploy
dist/to your static host.
To make the site yours, start by replacing this welcome post and about.md, then trim the sample posts.
Upstream mapping
| Upstream (Python) | This branch (Astro) |
|---|---|
config.py | src/site.config.ts |
markdown/ | src/content/posts/ |
templates/base.html | src/layouts/BaseLayout.astro |
assets/style.css | src/styles/aonote.css |
python autobuild.py | npm run build |
We aim to track upstream Aonote; differences mostly come from Astro’s content and build pipeline. Issues and PRs for parity gaps are welcome.