Colophon
How this site is made.
This is a statically exported site built with Next.js 15 and hosted on AWS. Every page is pre-rendered at build time and served from S3 via CloudFront — no server required at runtime.
Frontend
- Next.js 15 — React framework with App Router and static export
- TypeScript — type-safe development
- Tailwind CSS — utility-first styling with a custom design system
- MDX — markdown content with React components via next-mdx-remote
- EB Garamond — serif typeface for body text and headings
- rehype-highlight — syntax highlighting for code blocks
Infrastructure
- AWS S3 — static file storage with versioning and cross-region replication
- CloudFront — global CDN with HTTP/2, HTTP/3, and origin-group failover
- Route 53 — DNS with A/AAAA alias records and health-check failover
- ACM — SSL/TLS certificate (DNS validated) for
www.micahwalter.com - GitHub Actions — CI/CD with OIDC authentication (no stored credentials)
- Fathom Analytics — privacy-first analytics; no cookies, no personal data
Architecture
Visitors hit Route 53, which routes to a CloudFront distribution backed by two S3 origin groups. A secondary set of S3 buckets in us-east-2 receive all objects via Cross-Region Replication — CloudFront fails over to them automatically if the primary region has an outage. Deployment is fully automated: a push to main builds the static export and syncs it to S3 in about 3–4 minutes.
Content
Posts are MDX files stored in content/posts/ with date-prefixed folder names. Three content types share the same system:
- Blog posts — essays on AI, cloud, and creativity
- Photo posts — imported with EXIF extraction and AI-assisted tagging via Amazon Bedrock
- Email posts — newsletter issues with a permanent archive URL
Images are optimized into WebP and JPEG at 400, 800, and 1200 px widths using Sharp. Originals and processed files are stored in S3 so the repository stays lean.
Newsletter
The newsletter backend is serverless, deployed alongside the site on AWS. Subscribers double opt-in via HMAC-signed confirmation tokens. Campaigns are authored as email posts in MDX and dispatched via EventBridge → SQS → a Go Lambda → SES. The subscription API has active-passive failover to us-east-2 with roughly 90-second recovery time. You can subscribe here.
Design
The palette is intentionally restrained: cream backgrounds, charcoal text, and a warm accent for links and highlights. Body text is set in EB Garamond at a 645 px reading line length. UI chrome uses system sans-serif fonts.
Source
The source code for this site is on GitHub.