Case study — live since April 2026
Mile High Web Studio
In-house build · Web Design Studio · Denver, CO
The studio's own marketing site — built on the same stack, process, and standards every client gets, with no shortcuts an actual client wouldn't also get.
The challenge
Most one-person web studios either skip a real marketing site or run on the same templated builder they're trying to talk clients out of. This site had to prove the pitch — fast static hosting, real SEO architecture, and CI/CD discipline from commit to production — using the exact constraints sold to clients, with no agency-speak and no framework bloat to hide behind.
What was built
A fully static, multi-page site — semantic HTML5, hand-written CSS
with a custom design token system, and vanilla JS, with no
framework and no build step. Dark/light theming is applied before
first paint via an inline script that reads
localStorage and falls back to
prefers-color-scheme, so there's no flash of the
wrong theme. Every page — homepage, services, pricing, FAQ, and
each case study — ships its own canonical URL, Open Graph and
Twitter cards, geo meta tags, and the JSON-LD schema that actually
matches its content (LocalBusiness,
Service, FAQPage,
BreadcrumbList). Case studies — including this one —
are standalone crawlable pages rather than a JavaScript modal, so
Google and link previews see the same content a visitor does.
Key decisions
- No framework, no bundler: plain HTML/CSS/JS keeps the site fast by default and means a one-person shop never debugs a build pipeline instead of shipping copy changes.
- Quality gates as code, not memory: Prettier, HTMLHint, Stylelint, and ESLint run on every push and pull request via GitHub Actions and block merges on failure — a solo operator doesn't get to "remember" formatting rules.
- Keyless deploys: the production deploy workflow assumes an AWS role via GitHub's OIDC provider instead of long-lived AWS access keys stored as repo secrets.
- Isolated client preview infrastructure (in progress): a separate preview S3 bucket and CloudFront distribution, gated by signed cookies, so future client work can be shared on a real URL before launch without ever touching the production bucket.
- AI-assisted, not AI-replaced workflow: the site is built and maintained with Claude Code against a project-specific context file that encodes coding conventions, SEO rules, and brand voice, so edits stay consistent without a second set of human eyes on every commit.
Tech stack
- HTML5 / CSS3 / Vanilla JS — no framework, no bundler
- AWS S3 — static file hosting with versioned objects
- AWS CloudFront — global CDN edge delivery (<100 ms TTFB)
- AWS Route 53 — DNS and domain management
- GitHub Actions + OIDC — CI/CD with no stored AWS keys
- Prettier · HTMLHint · Stylelint · ESLint — automated quality gates
- Web3Forms — serverless contact form handling
- Google Analytics — conversion and traffic tracking
Deployment pipeline
- Commit merged to
mainbranch on GitHub - Quality Checks workflow runs Prettier, HTMLHint, Stylelint, and ESLint — blocks the merge on failure
- GitHub Actions assumes an AWS role via OIDC — no static credentials in the repo
-
aws s3 syncuploads only changed files;index.htmlis re-uploaded withCache-Control: no-cache - CloudFront invalidation clears stale edge cache
- Changes live across all CDN edge nodes in ~60 seconds
-
Rollback in under a minute via
git revert+ re-trigger
Results & features
- Full SEO architecture: per-page JSON-LD, canonical URLs, OG and Twitter cards, and geo meta tags on every page, not just the homepage
- Dark/light theme with zero flash-of-wrong-theme on load
- Case studies (this one included) are standalone, indexable pages instead of a JS modal — shareable and crawlable on their own URL
- Zero-downtime deploys with instant rollback and no stored AWS credentials
- A growing portfolio section that documents real decisions, not just finished screenshots
Want results like these?
Every build starts with a free 20-minute scope call. Tell me what you need and I'll tell you exactly what's possible.