The Tech Stack Behind This Site

Why I chose Astro, Cloudflare, and Drizzle ORM — and how they fit together.

astrocloudflaremeta

Overview

This site is built with a minimal stack:

  • Astro — static-first framework with server-side rendering where needed
  • Cloudflare Pages + Workers — hosting and edge compute
  • Cloudflare D1 — SQLite database at the edge
  • Drizzle ORM — type-safe database access
  • TypeScript — throughout

No component framework. No build-time CSS tooling. Just Astro components, plain CSS with custom properties, and markdown content.

Why Astro

Most pages on this site are static — notes, playgrounds, the index page. They don’t need JavaScript or server-side rendering. Astro’s default of shipping zero JS to the client is exactly right for this.

For the few parts that do need a server (API endpoints, dynamic routes), Astro supports per-route opt-in to SSR. One config, one framework, both modes.

Content Collections handle markdown with typed frontmatter, which keeps notes structured without a CMS.

Why Cloudflare

Cloudflare Pages deploys static assets to a global CDN. Workers handle server-side routes at the edge. D1 provides a SQLite database without managing infrastructure.

The free tier covers everything a personal site needs. And the integration between Pages, Workers, and D1 is seamless — no glue code, no separate deploy steps.

Why Drizzle

D1 is SQLite. Drizzle speaks SQLite natively, with full TypeScript type inference from schema definitions. The schema is the source of truth — no separate type files, no runtime validation layer.

For a site this size, it might seem like overkill. But having typed queries from day one means I never have to wonder what shape the data is in.

Branching and deploy

The repository uses two branches:

  • develop — default branch for day-to-day work
  • main — production. Merging to main triggers a Cloudflare Pages deploy

This keeps the deployed site stable while allowing work-in-progress on develop.

What’s next

The site currently has two sections — notes and play. Both will grow over time, with content in English, Japanese, and Korean as needed. The stack is intentionally simple so adding content is the only bottleneck.

← Back to Notes