How this was built
smw.org is a personal site with a deliberately small footprint: a hand-written static front end, a sliver of serverless behind an admin login, and everything that runs it defined as code.
The stack
- Front end
- Hand-written HTML, CSS, and vanilla JavaScript. No framework, no build step, no bundler. All artwork is pure CSS and inline SVG.
- Hosting
- Static files in Amazon S3 (private), served worldwide through the Amazon CloudFront CDN over HTTPS with a certificate from AWS Certificate Manager.
- Admin
- A small area gated by Amazon Cognito — hosted sign-in, OAuth 2.0 authorization-code flow with PKCE, MFA-capable, no self-service password reset.
- Write API
- A single AWS Lambda function (Node.js) that the admin area calls to edit the link list and default location. It scales to zero and costs nothing at rest.
- Content store
- The editable content is plain JSON objects. A save updates the object and pushes the change to the CDN edge immediately, so the site stays fully static for visitors.
- Infrastructure
- 100% Terraform — network, CDN, certificates, identity, function, and permissions. Every change is planned and reviewed before it is applied.
- Delivery
- Content and infrastructure live in separate git repositories. Deploying the site is one script: sync to storage, then invalidate the edge cache.
Data on the page
- Your public IPv4 and IPv6 addresses, from open IP-echo services.
- Current conditions, a six-hour forecast, and active severe-weather alerts from the US National Weather Service — a free, key-free government API.
- Optional browser geolocation, remembered per visitor in local storage and resettable at any time.
- A short, owner-curated list of links, edited live from the admin area.
Security posture
- No public object storage. The CDN is the only path to the files, and the function is reachable only through the CDN — never directly from the internet.
- A strict Content-Security-Policy, HSTS, no inline scripts, and clickjacking protection on every response.
- Least-privilege throughout: the function can read and write only the two files it owns, and nothing else.
- Sign-in tokens are short-lived and verified on every request. Secrets never appear in the repositories or in infrastructure state.
Process
The infrastructure and site were built collaboratively with Claude (Anthropic) acting as the engineer — writing the Terraform, running the plans, and shipping the deploys, with a human reviewing every step.
0 servers to patch
1 command to deploy
~$0 per month