- Matrix rain — Canvas-based digital rain effect with HiDPI/retina support
- Terminal aesthetic — Monospace typography, green-on-black, scanline glow
- Selected work — Filterable project showcase (Sports ML, AI Agents, MLOps, Tools, Web3)
- Live demos — Kelly criterion calculator, odds converter, Streamlit app links
- Agent tools — Copy-paste install commands for SOLVENT, juryrig, OpenClaw skills
- Mobile-first — Responsive breakpoints, accessible navigation, reduced-motion support
- Accessibility — WCAG AA contrast, ARIA landmarks, keyboard navigation, skip-to-content
- Framework: React 19 + TypeScript + Vite
- Styling: Tailwind CSS + shadcn/ui
- Animation: Canvas 2D (MatrixRain), CSS transitions
- Routing: React Router (lazy-loaded routes)
- SEO: react-helmet-async, OpenGraph, structured data
git clone https://github.com/ianalloway/ian-web-forge.git
cd ian-web-forge
npm install
npm run dev # http://localhost:8080
npm run build # production build → dist/
npm run lint # ESLint
npm test # eslint . && tsc --noEmit- Add the PDF to
/public/papers/with a clean filename. - Update the
academicPapersarray insrc/pages/Index.tsx. - Commit and deploy.
The newsletter signup on the homepage submits directly to Netlify Forms (ianalloway-newsletter,
declared as a hidden form in index.html) — no backend, no API keys, no environment variables.
Netlify only (netlify.toml): builds with npm run build and publishes dist/, with a catch-all
SPA rewrite to index.html so client-side routes like /now, /hireme, and /toolkit don't 404.
- Keep the homepage current and minimal.
- This repo should feel like a polished landing page, not a feature dump.
Built with ❤️ by Ian Alloway