- Static Site Generator: Hugo + TypeScript + MD
- Linting: ESLint + StyleLint +
- Hosting: Cloudflare Pages
This project uses mise to manage tool versions (Node.js, Hugo, pnpm, precious, Dart Sass).
curl https://mise.jdx.dev/install.sh | shSee the mise installation guide for other installation methods.
mise trust # Trust the mise.toml configuration
mise install # Install all required tools (Node, Hugo, pnpm, etc.)
pnpm install # Install Node.js dependenciesYou should also install our pre-commit hook. You can do this from your checkout
by running git/setup.sh. These hooks do things like ensure that the code you
commit is tidy and passes various linter checks.
The development server watches files, rebuilds the site, and reloads the browser when files change.
hugo serverprecious tidy --allThe static/_headers file is automatically generated from
bin/_headers.config.ts. Do not edit static/_headers directly.
- Edit
bin/_headers.config.ts(the source of truth with readable format and TypeScript type safety) - Test your changes locally:
pnpm run build:headers
- Commit only
bin/_headers.config.ts- the headers file is regenerated during deployment
The static/_headers file is generated during the build process via build.sh
and is not committed to git. For local testing, you can manually generate it
with pnpm run build:headers.
Blog posts are written using
markdown, with each post
corresponding to a markdown file in the /content directory, with
subdirectories for the year and month of publication (e.g., /content/YYYY/MM).
You can learn more about how blog post files work and how they are formatted in the BLOG-POST-TEMPLATE.md file.
To see a full list of categories and tags, check out the all taxonomies page. This page is automatically updated on build and push to production. If you want to see it on your local machine, start up the development server and go to /all-taxonomies.