Personal website for trevormann.org and no1mann.com, built as a React single-page app and deployed to Cloudflare Workers.
- Responsive personal site with light/dark theme support
- Routing for About, Work, Posts, and Conversations pages
- Content-driven sections powered by a centralized data file
- Static asset deployment to Cloudflare with SPA route fallback
- React + TypeScript
- Vite
- React Router
- Tailwind CSS
- Cloudflare Workers (
wrangler) - GitHub Actions (CI/CD deployment)
- Node.js LTS
- npm
npm install
npm run devLocal dev server starts on Vite's default port (usually 5173).
npm run dev- start local development servernpm run build- type-check and produce production build indist/npm run preview- preview the production build locallynpm run deploy- deploy the build to Cloudflare Workers via Wrangler
- App routes are defined in
src/App.tsx - Main site content (bio, projects, posts metadata, conversations, socials) is in
src/data.ts - Client-side routing is configured with a fallback to
index.htmlusing:assets.not_found_handling: "single-page-application"inwrangler.jsonc
npm run build
npm run deployWorkflow: .github/workflows/deploy-worker.yml
- Runs on pushes to
main - Supports manual runs via
workflow_dispatch - Builds with Node LTS and deploys with
cloudflare/wrangler-action
Required repository secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
- This project deploys static assets from
dist/using Wrangler's assets config. - Keep
wrangler.jsoncand GitHub workflow secrets in sync when changing deployment settings.