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

Keyboard shortcuts

Ctrl KCommand palette
tToggle light / dark
?This help
g hHome
g aPosts
g sBooks
g gGallery
g mMoments
/terminalTerminal easter egg
EscClose dialogs

Tip: the /terminal easter egg awaits

Index built by Pagefind · zero-backend static site

↑↓ navigate · Enter run · Esc close