ogrady.ai
Colophon

How this site works.

A portfolio should demonstrate the work, not just describe it. This one is hand-built, self-hosted, and instrumented end to end — view source; it's all there.

Stack
Hand-written HTML and React 18, with JSX transpiled in the browser by Babel standalone. No build step, no bundler, no framework CSS — design tokens are CSS variables, set in Archivo and JetBrains Mono.
Hosting
Cloudflare Pages. A git push to main is live in about thirty seconds. Serverless Pages Functions handle the contact form (via Resend) and everything below.
Theme
Light, dark, or auto — auto follows local daylight, estimating sunrise and sunset from your browser's timezone. No geolocation prompt, no flash of the wrong theme.
Analytics
First-party only: no third-party trackers, no cookies. A small beacon posts to a Pages Function; events live in Workers KV for 90 days and nowhere else.
Notifications
Town Crier, a self-built notification hub: visit and contact alerts fan out to ntfy phone push and Web Push to an installable PWA — with per-channel delivery status recorded, because silently swallowed failures are the real bug.
AI workflow
Designed, built, and shipped in pair with Claude Code — an agentic workflow where the pages, the serverless functions, and the notification hub were written conversationally and verified end to end against the live site. The words are mine.
Photography
By Jason — photographer & Getty Images contributor.
← Back to ogrady.ai