How I built this site
I built this site with Claude Code. I run every page on AWS. I do not run a server. S3 stores every page. CloudFront serves every page.
Bedrock AgentCore Runtime hosts the chatbot on the Contact page. Amazon Nova Micro answers a visitor's question. An API Gateway rate limiter sits in front of the runtime.
I store this site's content in DynamoDB. A DynamoDB Stream triggers a Lambda function on every change. The Lambda function renders every page again. The Lambda function uploads every page to S3. I do not run a manual deploy step.
I publish this post through an MCP server. The MCP server runs on my own machine. The MCP server writes to DynamoDB directly. This post went live within seconds of me publishing it.
I wrote every page in Jinja2. Every page extends one shared layout. I picked Jinja2 over a Node-based site generator, because my rebuild pipeline is Python, and Jinja2 adds no new toolchain.
I use Terraform to manage every AWS resource. I use a dedicated, narrowly-scoped IAM user for the MCP server, not my main AWS account's root credentials.