My personal site: portfolio, blog, and guides. Built with Docusaurus and deployed to GitHub Pages at austen.info.
Node >=22.13.0. The repo ships an .nvmrc, so nvm use picks the right version.
This project uses npm, not yarn. There is no yarn.lock.
npm ci # use ci, not install, to respect the lockfile
npm start # dev server at http://localhost:3000| Command | What it does |
|---|---|
npm start |
Dev server with hot reload |
npm run build |
Production build into build/ |
npm run serve |
Serve the production build locally |
npm run dev:worker |
Run the curl Worker locally |
npm run test:worker |
Test curl detection and origin pass-through |
npm run deploy:worker |
Deploy the curl Worker to Cloudflare |
npm run typecheck |
tsc with no emit |
npm run lint |
ESLint across the repo |
npm run clear |
Clear the Docusaurus cache |
typecheck and lint both run in CI, so run them before pushing.
| Path | What lives there |
|---|---|
blog/ |
Blog posts. Filename sets the date, slug: in frontmatter sets the URL. |
docs/ |
Guides, including the GitHub Actions cheat sheet. |
src/ |
React components, pages, and CSS. |
static/ |
Files copied verbatim to the site root. |
One thing worth knowing: docs/guides/01_Cheat Sheet.mdx renders .github/workflows/cheat-sheet.yml verbatim via raw-loader. That workflow is a live, running workflow and a published documentation page, so changes to it are user-facing.
Deployment is automatic. Pushing to main triggers .github/workflows/deploy.yml, which builds and publishes to GitHub Pages via actions/deploy-pages using OIDC.
Pull requests run the same build as a check, but don't deploy.
Don't run npm run deploy. That's the stock Docusaurus command that pushes directly to a gh-pages branch, which is not how this site is published.
worker/index.mts returns an ANSI-formatted homepage for
curl https://austen.info. The Worker runs only at / and /curl; every other
path goes directly to GitHub Pages. To request the original homepage with curl:
curl -H 'X-Original: true' https://austen.infoThe Worker route requires austen.info to use Cloudflare DNS with the existing
GitHub Pages records proxied. After the zone is active:
npx wrangler login
npm run deploy:workerVerify both response modes:
curl https://austen.info
curl -H 'X-Original: true' https://austen.info