Things I've shipped
Side projects and independent work outside of employment.
Hantamap
Problem: outbreak-related reporting is scattered across official advisories, health-system updates, and news coverage, and the same event often gets re-reported as if it were several. Built: an independent, static, low-cost data visualization platform that clusters 2026 hantavirus-related reports into canonical events and plots them on an interactive map, with a "Risk Lens" for contextualizing clusters by geography and time. Key decision: reports are kept separate from events — articles are treated as evidence, not as case counts — so the same event covered by five sources doesn't get counted five times. Built and maintained entirely outside of work; it's an experimental prototype, not an official public-health source.
tf2cdk
Problem: teams standardized on Terraform often need an AWS CDK
starting point — hand-translating resources and their cross-references is slow and
error-prone. Built: a Python CLI that parses .tf files
and emits a complete, compilable CDK TypeScript stack across compute, storage,
networking, security, and messaging. Key decision: cross-resource
references are resolved automatically, so aws_kms_key.app_key.arn
becomes appKey.keyArn in the generated stack instead of a manual
find-and-replace.
Cloud Engineer Portfolio
Problem: wanted a personal site that also works as a live,
verifiable demonstration of container-based AWS delivery, not just another static
site. Built: this site — a Flask app served by Gunicorn inside a
Docker container, deployed straight to AWS App Runner (auto-scaling down when idle)
from an image in ECR. Key decision: Terraform provisions the ECR
repository, IAM access role, and App Runner service end-to-end, and GitHub Actions
builds and pushes each image and triggers the App Runner deployment on every push
to main — no S3 or CDN involved, Flask serves the live site directly.