Unauthorized · 未经授权 (this site)
This site is its own subject.
Stack#
- Vite + React 18 + TypeScript — no meta-framework, plain React. Why Markdown lasts reasoning applies to the stack: simple = still runs in five years.
- react-router-dom 6 + vite-react-ssg — every route SSR'd to full HTML at build, hydrates to SPA. SEO-friendly. See the pipeline post.
- CSS Modules — no Tailwind, no CSS-in-JS. Tokens in
src/styles/tokens.css, scoped styles per component - Pagefind — client-side search, indexed at build, split per language
- Markdown extensions: see the cheatsheet (the CN version covers all of this)
Key decisions#
- Bilingual mirror, slugs match (permalinks)
- Wikilinks parsed at the mdast level, not in the React component layer — got this wrong early, see the cheatsheet
- No
remark-wiki-link— wrote 25 lines of regex preprocessing instead. The whole unified ecosystem is ESM-only; every plugin is a fresh ESM/CJS interop story - Comments via Giscus over Disqus (context)
- Mermaid client-side, lazy-loaded — the 600KB library doesn't enter the main bundle, only fetched when a page contains a mermaid block
What it doesn't do#
- ❌ NoteIR / SiteIR / multi-renderer architecture — single
Entrytype is enough - ❌ LLM-generated wiki
- ❌ Stacked notes (why)
- ❌ Email subscription (RSS suffices)
Reproducible#
Repo is public, npm install && npm run build builds it. See root README.md and docs/architecture.md.
Comments
Comments are moderated. No email, no IP collection.