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 main branch 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 sync uploads only changed files; index.html is re-uploaded with Cache-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.

Call now