colophon / 制作
A static blog that decides for itself wherever it can: its own build, its own hosting, its own translations, its own version history.
build
- Astro 7.3.8
- static site generation, zero runtime framework JS; interactions are small native scripts
- Pagefind
- search index built at compile time — search on a static site, no backend
- Shiki
- dual-theme syntax highlighting, done at build
- output
- ~30 pages in seconds, triggered by every push
visual
- grayscale × tracks
- a grayscale skeleton for structure; body typography switches per content track
- four families
- Noto Serif SC (books) · Noto Sans SC (UI/tech) · JetBrains Mono (code) · LXGW WenKai (quotes, system fallback)
- @fontsource
- self-hosted, subset fonts; switching to variable fonts cut font CSS 345KB → 106KB
- tokens
- colors, spacing and motion are all CSS variables — light/dark in one codebase
writing flow
- gitea
- self-hosted git: my local editor and the web UI write to the same repository
- webhook
- push-triggered, HMAC-verified, main branch only
- pipeline
- homelab build → rsync → nginx; no cloud build minutes
- transparency
- the built-from line in the footer links to the exact commit
i18n
- pre-translation
- machine-translated by Tencent TMT at build; .en.md files live in the repo
- dual track
- /en/ pages are prebuilt — switching language is pure navigation
- honesty
- machine-translated posts carry a note; corrections welcome
features
- comments
- self-hosted Artalk 2.10 (sqlite) at /artalk
- gallery
- EXIF extracted at build (exifr) + aspect-ratio-driven masonry via sharp, no runtime JS
- edge
- ESA CDN, wildcard HTTPS; ICP filing kept in the footer as required