· 1 min read
Rebuilding my site with Astro 7 and Cloudflare
Replacing an old Express + EJS portfolio with a static Astro monorepo, and a dithered mountain to replace the old hero photo.
My old portfolio was an Express server rendering EJS templates: a mountain photo, a resume, and a contact form behind reCAPTCHA. It needed a server to do a static site’s job, and I’d stopped updating it.
The setup
- Turborepo monorepo.
apps/webis the portfolio,apps/blogis this blog, andpackages/brandholds the shared design system. Anything new gets its own app folder. - Astro 7, fully static. Every page is prerendered HTML. The only client-side JavaScript draws the mountain.
- Cloudflare static assets. Each app deploys with
wrangler deploy.
The design
The type comes from my resume: heavy uppercase Archivo in solid blocks for names and section labels, and monospace for dates and tech stacks.
The mountain from the old site is still here, redrawn with ordered dithering, the same technique ZWB.SH uses for all its graphics. The sky, the sun, three ranges and the snow on the main peak are one colour field, stepped through five colours with an 8×8 Bayer matrix. On a phone it crops around the summit instead of squashing.
The footer has a theme switch if you want the greyscale ZWB.SH version, or the punk one.
SEO
One shared component handles canonical URLs, Open Graph and Twitter cards, and JSON-LD (Person, BlogPosting, breadcrumbs). Each app gets a sitemap and robots.txt, and the blog has an RSS feed.