← Work

Cloud Resume

A résumé rebuilt as a real AWS system, with the whole estate in code.

Cloud
AWS · Terraform
Frontend
React · Vite · TypeScript
Testing
Vitest · Cypress
Delivery
GitHub Actions
Status
Live
Year
2024

The Cloud Resume Challenge sets objectives rather than steps — it tells you what the thing must do and leaves the architecture entirely to you. Taken seriously, that is the point: there is no tutorial to follow and no correct answer to check against, so every decision is one you have to be able to defend.

What came out of it is a single-page app with an API behind it, standing on twenty AWS services and fully serverless, with no idle compute — identity and keys, DNS, CDN and WAF at the edge, API Gateway and Lambda, S3 and DynamoDB, events and queues and mail, and tracing and audit underneath all of it. None of it is clicked together in a console. The whole estate is declared in Terraform, which means it can be read, reviewed and rebuilt, and the architecture diagram is generated by a script in the same repository rather than drawn, so it is kept in step with the Terraform.

The CV is compiled to PDF from the same JSON the site renders, so the two can never disagree; a Lambda caches it in S3 by a digest of its content and only renders a new one when that content changes. The download goes through a signed CloudFront URL minted per click, so a download is an event that can be counted rather than a file that vanishes, and the address on the CV is a forwarding alias that SES rotates monthly, so every message shows how old the sender's copy is.

GitHub Actions gates every pull request on unit tests, type checking, format validation, an end-to-end run, a Terraform plan and Lambda linting; merging applies the reviewed plan, deploys, and smoke-tests what landed — without repeating work the pull request already proved.

Stills

  • Fully serverless single-page app with an API behind it, on 20 AWS services
  • Every resource declared in Terraform — no console-built infrastructure
  • CV compiled to PDF from the site's own data, cached by content digest
  • Signed CloudFront URLs, so each CV download is a countable event
  • Monthly-rotating SES forwarding alias as the CV's contact address
  • Edge stack of Route 53, CloudFront and WAF in front of S3
  • API Gateway, Lambda and DynamoDB behind it, with events, queues and mail
  • Tracing and audit wired in rather than bolted on afterwards
  • Pull requests gated on tests, types, formatting, e2e and a Terraform plan
  • Merges apply the reviewed plan, deploy to production and smoke-test what landed