Site Notes
A short map of how this static toolbox is constructed, deployed, and extended. The site is intentionally simple: mostly standalone HTML tools, S3 hosting, GitHub Actions deployment, and a little browser-side data storage where useful.
Architecture
site/. AWS infrastructure
lives under infra/terraform/.
austinclarke.net serves static files and public
browser-saved JSON under data/.
index.html.
AWS Services
-
S3 static site bucket:
austinclarke.netstores the deployed site. -
CloudFront distribution: serves
https://austinclarke.netfrom the S3 origin using Origin Access Control. -
S3 object API: selected tools can save and load
public JSON under app-specific
data/prefixes. -
Bucket policy: grants public reads, public writes
only under
data/*, prefix-limited list access, and CloudFront read access for the configured distribution. -
CORS: allows browser fetches from
https://austinclarke.netandhttp://austinclarke.net. - IAM role via GitHub OIDC: lets GitHub Actions deploy without storing long-lived AWS keys in the repo.
-
Terraform state: stored in
ccs.nexus.management.tfbackend.59e2720f-011so each deployment can correct infrastructure drift.
Site Shape
Each public page is a folder with an index.html. That
keeps URLs clean and S3-friendly:
site/music/chords/flashcards/index.html
becomes
/music/chords/flashcards/
CloudFront should be configured to keep those clean directory URLs
working at the edge, so links do not need to expose
index.html.
Most tools are deliberately self-contained. A simulator or calculator can usually be understood, copied, tested, and deployed as one HTML file.
Child pages link back to the root tools index with
← Tools so navigation copy stays consistent
across music, simulators, finance, development, and reference pages.
Deployment Workflow
Push to main
The deploy workflow runs on pushes to the main
branch.
Assume AWS role
GitHub Actions uses OIDC to assume
arn:aws:iam::993058117004:role/ccs.nexus.management.github.oidc.
Apply infrastructure
Terraform runs from infra/terraform/ to converge
S3, bucket policy, CORS, CloudFront, Route 53 aliases, and the
clean-URL CloudFront Function.
Stamp version footer
A tiny v1234-style footer is injected into each
HTML file using the first four characters of the commit SHA.
Sync to S3
The workflow runs aws s3 sync ./site with
--delete, while excluding assets/*,
data/*, and favicon.ico so
bucket-managed objects survive.
Invalidate CloudFront
After upload, the workflow creates an invalidation for
/* so changed static files and rewrites are seen
through the distribution.
AI And LLMs
This repo is intentionally friendly to AI-assisted iteration. A good tool prompt usually asks for a self-contained static page, clear controls, mobile-friendly layout, and any math or model details that help the page teach while it works.
AI-generated pages still need review: links should be added to the tools index, saved data must be treated as public, and any simulator or calculator math should be named and checked.
Public Data Store
data/ is public internet data.
Tools should never save secrets, credentials, or sensitive personal
information.
Tools that need persistence use unique prefixes like
data/finance-mortgage-advanced-calculator/ so future
apps do not collide with existing JSON objects.
Local-Only Tools
Some tools process user-provided files entirely inside the browser. The development comparison tools read files with the browser FileReader API, parse them locally, and compare them in memory. They cover XML, JSON, and common YAML configuration shapes.
Local-only tools should not use fetch, S3 object API
calls, analytics beacons, or browser storage for file contents unless
the page clearly says so.