This site is built with Hugo , written in Markdown, and hosted on GitHub Pages at github.com/xiyan128/xiyan128.github.io . The layouts are custom rather than a theme, and the source is open if you want to copy anything.
The text face is
Source Sans 3
,
a variable font that carries body, headings, and chrome in one file, with a
true designed italic rather than an algorithmic skew (worth the extra woff2
for the few ems and cites on a page). Code is set in IBM Plex Mono,
a single static weight with ligatures off. Both are open source and
self-hosted as Latin subsets; nothing loads from a font CDN.
The color system is two 12-step Radix ramps (a pure-neutral gray and a blue accent) behind semantic tokens. Light and dark are separately tuned scales rather than one palette derived from the other; Radix tunes each step for contrast within its own mode, which is what lets both themes be first-class.
The layout is a 640px prose column. On screens wide enough to have gutters (1120px and up), a quiet contents list sits to the left of a post, and the home page keeps an AI playing Tetris on the right: the engine and its player are a ~100 KB Rust wasm module from tetr_online , vendored so the blog builds with plain Hugo and no Rust toolchain. Take a turn if you like.
Footnotes are split at build time: prose asides render as sidenotes directly after the paragraph that references them, while bibliographic entries collect into a references section at the end of the article. The split is a Hugo template post-processing Goldmark’s footnote output; no client-side machinery is involved.
There are no JavaScript frameworks. The client-side budget is tocbot for the contents scroll-spy, KaTeX on pages that contain math, a few inline lines for the theme toggle, and the Tetris module above, which only downloads when a gutter exists to show it. Syntax highlighting is Hugo’s Chroma with GitHub-derived palettes scoped to each theme. Analytics is Google Analytics, loaded in production builds only.
Feeds are available as RSS and JSON Feed , and the design notes live in the repository under docs/ .
Built June 2026.