This repo holds the code that runs my homepage.
This is the fourth generation of my homepage. It started as a lightweight Node server serving raw HTML on Heroku, then became a React + Bootstrap site on Firebase, then a Next.js app with an original design on Netlify. This version keeps that design (with a light polish) and rebuilds the app on React Router framework mode, Vite and Tailwind CSS, deployed as a Cloudflare Worker with static assets.
This is mostly here so you can see my code, not so you can clone it. It is open source, though, so feel free to take it and use it as reference or inspiration. Just, like, if you are going to clone it, change it so you're not me anymore.
app/routes.tsdeclares the routes. The conversational site lives under theconversationlayout; the "normcore" plain-HTML version lives under/normcore.app/conversation/is the chat-style homepage. Route modules there are deliberately thin (they provide<head>metadata and status codes); the layout renders page contents from the registry inpages.tsxso that every page you've visited stays on screen as the conversation grows.app/contents/holds the actual copy and resume sections, shared by both versions of the site.workers/app.tsis the Cloudflare Worker entry. Every static route is prerendered at build time and served straight from Cloudflare's asset storage; the Worker only runs for anything else (like 404s).
Requires Node 22.22+ and pnpm (the version is pinned in package.json, so
corepack enable is enough).
pnpm install
pnpm dev # local dev server with HMR
pnpm check # typecheck + lint + format check
pnpm preview # production build, served locally in the Workers runtime
pnpm deploy # build and deploy with Wranglerpnpm cf-typegen regenerates worker-configuration.d.ts after changing wrangler.jsonc.