From Resume to the Cloud: How I Built and Deployed My Cloud Resume Challenge

Hey there!
I’m Mon Villarin, a Full-Stack Administrator with around twelve years of full-stack system and application administration experience under my belt. I have limited hands-on experience with coding or scripting, but I’m comfortable reading and understanding code in languages like JavaScript and Python. I can follow what a script is doing and grasp its overall logic and purpose, even if I’m not yet writing complex code myself.
Lately, I’ve been feeling the urge to push my skills further and dive deeper into the world of cloud computing—and that’s when I discovered the Cloud Resume Challenge.
I know I’ve missed the original deadline for the Cloud Resume Challenge—that had been set on July 31, 2020, as the cutoff for code reviews—but I still wanted to take on the challenge. Even though I’ve been focused on preparing for my AWS certifications, I saw this as a valuable opportunity to apply what I’ve learned and push myself further.
Originally created by Forrest Brazeal, this challenge offers a fun and practical way to explore cloud technologies. But it’s more than just putting your resume online. It’s about designing and deploying a fully cloud-native resume site using AWS. The experience is hands-on, challenging, and surprisingly rewarding. Think of it as a tech-packed upgrade to your resume—and your cloud skills.
So, What’s It All About?
For anyone unfamiliar, the Cloud Resume Challenge is all about creating and hosting your resume using serverless architecture on a cloud platform.
The challenge is thoughtfully structured—and if you haven’t already, I highly suggest checking out the official challenge guidebook. It breaks the entire project down into manageable parts, or “chunks,” making the journey both organized and achievable.
Chunk 0. Certification Prep
Chunk 1. Building the Front-end
Chunk 2. Building the API
Chunk 3. Front-end / Back-end Integration
Chunk 4. Automation (IaC, CI/CD).
It’s a hands-on mix of coding, cloud services, and just enough of a challenge to keep it interesting.
How I Brought It All Together
Chunk 0: Certification Prep
As someone completely new to the AWS ecosystem, I began my journey by earning the AWS Certified Cloud Practitioner certification in January 2025. Building on that foundation, I went on to achieve the AWS Certified Solutions Architect – Associate in April 2025, along with the HashiCorp Certified: Terraform Associate certification in May 2025. With these credentials under my belt, I felt well-prepared to take on the Cloud Resume Challenge.
Chunk 1: Building the Front-end
Frontend - HTML / CSS
I started with a responsive template from html5up, which I customized by removing unnecessary pages and links to keep the design as clean and minimal as possible. My early experience with HTML and CSS, along with a bit of help from Google, made it easier to tweak the layout to fit my needs. I also embedded a JavaScript snippet into the HTML page to fetch and update the visitor counter (more of this in Chunk 2) from the back-end service.
Hosting on AWS S3
Thanks to the knowledge I gained while preparing for my AWS certifications, setting up a static website on Amazon S3 and integrating it with CloudFront for content delivery was straightforward. I registered a custom domain through AWS Route 53 and configured it to point to my CloudFront distribution. To secure the site with HTTPS, I used AWS Certificate Manager (ACM) to provision an SSL certificate.
Chunk 2: Building the API
Backend Infrastructure
To handle the logic for updating and retrieving the visitor count, I needed to set up a simple back-end using AWS services. This included API Gateway, AWS Lambda, and DynamoDB.
DynamoDB: Amazon DynamoDB is AWS’s fully managed, high-performance NoSQL database service that scales seamlessly. I created a DynamoDB table with a single item to store the visitor count. To increment this value, I used DynamoDB’s Atomic Counter feature—a numeric attribute that can be updated concurrently without conflict.
AWS Lambda: Allows you to run code without managing servers. I wrote a Python-based Lambda function that interacts with DynamoDB to both retrieve and update the visitor count using the
update_itemoperation.Since I have limited experience writing Python scripts, I referenced open-source implementations from Github to guide my function’s structure and logic.
API Gateway: Enables you to create and manage RESTful APIs that act as a bridge between frontend applications and backend services such as Lambda.
In this setup, API Gateway exposes a REST API endpoint that the JavaScript snippet embedded in the front-end HTML calls each time the page is loaded. This request triggers the Lambda function, which in turn updates and returns the visitor count from DynamoDB.
To ensure this works from the browser, I had to enable CORS (Cross-Origin Resource Sharing) on the API Gateway resource. Without it, the client-side script wouldn’t be able to fetch data from the API endpoint.
Chunk 3. Front-end / back-end integration
Initially, I built the back-end components—DynamoDB, Lambda, and API Gateway—individually through the AWS Management Console, manually configuring them to work together and serve the visitor count to the front-end HTML page.
However, one of the Cloud Resume Challenge requirements was to define these resources using Infrastructure as Code (IaC) with AWS SAM (Serverless Application Model). Since I had no prior experience with SAM and personally prefer Terraform over other IaC tools, I did not pursue that route at the time.
As the next step in improving the project, my goal is to transition everything to Terraform—including the front-end resources such as the S3 bucket, CloudFront distribution, and Route 53 DNS records—for a fully automated and reproducible deployment.
Below is the architecture diagram that illustrates all AWS resources I provisioned using Terraform as part of the Cloud Resume Challenge:

You can explore the full source code and configuration for my Cloud Resume Challenge project on GitHub: Cloud Resume Challenege Repo
It includes everything—from the front-end website code to the back-end infrastructure scripts managed through Terraform. Feel free to check it out, fork it, or use it as inspiration for your own challenge!
Chunk 4. Automation (IaC, CI/CD)
Front-end - CI/CD with GitHub Actions
One of the key requirements of the Cloud Resume Challenge was to store both the front-end and back-end code in GitHub repositories, and to implement Continuous Integration and Deployment (CI/CD) using GitHub Actions.
Since I had never used GitHub Actions before, this was a valuable learning experience. GitHub Actions made it easier to automate the build and deployment processes, reducing the need for manual updates.
For the front-end pipeline, I configured GitHub Actions to:
Authenticate with AWS using GitHub Secrets (to securely store AWS access keys)
Deploy updated HTML, CSS, JavaScript, and image files to the S3 bucket
Invalidate the CloudFront distribution to ensure the latest content is served to users
This setup helped me gain hands-on experience with CI/CD workflows, while ensuring smooth, automated deployment of front-end changes directly from GitHub.

Back-end: IaC for Resource Deployment
I chose to keep both the front-end and back-end code in a single GitHub repository. This repository contains everything needed for the project, including the Terraform configuration files, the Lambda function code, and the JavaScript used in the front end.
To support deployment from GitHub Actions, I also created the necessary Terraform configurations to manage AWS credentials securely and automate the provisioning of infrastructure components. This unified setup helped streamline development, version control, and CI/CD workflows within a single codebase.

What I Learned
Taking on this challenge was a rewarding mix of fun and frustration. Setting up the CI/CD pipeline was particularly tricky, and I faced a few hurdles while working with the Lambda function. But every obstacle turned into a learning opportunity.
Each time I hit a roadblock, I dug deeper, experimented, and picked up something new. By the end of the project, I walked away with a much stronger understanding of AWS services, serverless architecture, and infrastructure as code—and, more importantly, a real boost in confidence with cloud development.
In the end, I successfully built a fully functional, cloud-powered resume website. It’s not overly flashy—but it’s entirely my own, and it represents what I’ve learned and what I’m capable of building with cloud technologies.
LinkedIn: https://www.linkedin.com/in/ramon-villarin/
Portfolio Site: MonVillarin.com
Github Project Repo: https://github.com/kurokood/cloud_resume_challenge



