{"id":16979426,"url":"https://github.com/phammings/cloud-portfolio","last_synced_at":"2026-02-21T14:33:13.796Z","repository":{"id":240239537,"uuid":"802098216","full_name":"phammings/cloud-portfolio","owner":"phammings","description":"AWS Cloud Resume/Portfolio Challenge with a CI/CD pipeline","archived":false,"fork":false,"pushed_at":"2026-01-13T04:51:20.000Z","size":29494,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-13T07:49:06.211Z","etag":null,"topics":["aws-cloudfront","aws-dynamodb","aws-lambda","aws-route53","aws-s3","github-actions","python","react","terraform"],"latest_commit_sha":null,"homepage":"https://www.ryanlepham.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phammings.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-17T14:17:15.000Z","updated_at":"2026-01-13T04:51:23.000Z","dependencies_parsed_at":"2024-05-27T20:08:04.198Z","dependency_job_id":"604f4e35-8652-4b15-8fac-0555df6cb7b9","html_url":"https://github.com/phammings/cloud-portfolio","commit_stats":null,"previous_names":["phammings/my-portfolio","phammings/cloud-portfolio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phammings/cloud-portfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phammings%2Fcloud-portfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phammings%2Fcloud-portfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phammings%2Fcloud-portfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phammings%2Fcloud-portfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phammings","download_url":"https://codeload.github.com/phammings/cloud-portfolio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phammings%2Fcloud-portfolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29683993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T14:31:22.911Z","status":"ssl_error","status_checked_at":"2026-02-21T14:31:22.570Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-cloudfront","aws-dynamodb","aws-lambda","aws-route53","aws-s3","github-actions","python","react","terraform"],"created_at":"2024-10-14T01:45:46.099Z","updated_at":"2026-02-21T14:33:13.768Z","avatar_url":"https://github.com/phammings.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AWS Cloud Resume Challenge\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n\n\u003ch3 align=\"center\"\u003eAWS Cloud Resume Challenge\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    This is my attempt at cloud resume challenge in AWS.\n    \u003ca href= \"https://cloudresumechallenge.dev/\"\u003eWhat is Cloud Resume Challenge? \u003c/a\u003e is a multiple-step resume project which helps build and demonstrate skills fundamental to pursuing a career in Cloud. The project was published by Forrest Brazeal and the webiste was built using React.\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#architecture\"\u003eArchitecture Diagram\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\n\nThis project is my submission for the Cloud Resume Challenge, showcasing my skills in AWS services and GitHub Actions. I've created a static React resume website using AWS services such as S3 for storage, AWS CloudFront for content delivery, Certificate Manager for SSL/TLS certificates, AWS Lambda for serverless functions, and DynamoDB for database management.\n\nFor the CI/CD process, I've implemented GitHub Actions workflows for both the frontend and backend. The workflows use Terraform to manage infrastructure as code, enabling automated deployment and scaling of the application.\n\nOverall, this project demonstrates my proficiency in leveraging AWS services and implementing CI/CD pipelines using GitHub Actions for building modern web applications.\n\n## [Live Demo 🔗](https://www.ryanlepham.com/)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n### Built With\n\n* [![React][React]][React-url]\n* [![Python][Python.py]][Python-url]\n* [![S3][S3]][S3-url]\n* [![AWS CloudFront][AWS CloudFront]][AWS CloudFront-url]\n* [![Route53][Route53]][Route53-url]\n* [![Certificate Manager][Certificate Manager]][Certificate Manager-url]\n* [![AWS Lambda][AWS Lambda]][AWS Lambda-url]\n* [![DynamoDB][DynamoDB]][DynamoDB-url]\n* [![GitHub Actions][GitHub Actions]][GitHub Actions-url]\n* [![Terraform][Terraform]][Terraform-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- ROADMAP --\u003e\n## Roadmap\n\n- ✔️ Create a static React website for your portfolio\n- ✔️ Ensure the S3 website URL uses HTTPS with Amazon CloudFront\n- ✔️ Point a custom DNS domain name to the CloudFront distribution using Amazon Route 53\n- ✔️ Implement a visitor counter on the webpage with useEffect\n- ✔️ Store and update the visitor count in Amazon DynamoDB\n- ✔️ Create an API with AWS API Gateway and Lambda for DynamoDB interaction\n- ✔️ Define API resources in an AWS SAM template for easy deployment\n- ✔️ Write Python code for the Lambda function using boto3 and pytest\n- ✔️ Set up GitHub Actions for SAM application deployment\n- ✔️ Set up Github Actions to update the S3 bucket automatically for frontend changes\n- ✔️ Set up Github Actions to update the backend automatically for backend changes\n- ✔️ Use Terraform for managing AWS resources and infrastructure as code\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- DIAGRAM --\u003e\n## Architecture\n![Architecture Diagram](/img/AWS-Architecture-Cloud-resume-challenge.png)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n[React]: https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge\u0026logo=react\u0026logoColor=%2361DAFB\n[React-url]: https://reactjs.org/\n[Python.py]: https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\n[Python-url]: https://www.python.org/\n[S3]: https://img.shields.io/badge/S3-569A31?style=for-the-badge\u0026logo=amazon-s3\u0026logoColor=white\n[S3-url]: https://aws.amazon.com/s3/\n[AWS CloudFront]: https://img.shields.io/badge/AWS%20CloudFront-FF9900?style=for-the-badge\u0026logo=amazon-cloudfront\u0026logoColor=white\n[AWS CloudFront-url]: https://aws.amazon.com/cloudfront/\n[Route53]: https://img.shields.io/badge/Amazon%20Route%2053-8C4FFF?logo=amazonroute53\u0026logoColor=fff\u0026style=for-the-badge\n[Route53-url]: https://aws.amazon.com/route53/\n[Certificate Manager]: https://img.shields.io/badge/Certificate%20Manager-232F3E?style=for-the-badge\u0026logo=amazon-aws\u0026logoColor=white\n[Certificate Manager-url]: https://aws.amazon.com/certificate-manager/\n[AWS Lambda]: https://img.shields.io/badge/AWS%20Lambda-F90?logo=awslambda\u0026logoColor=fff\u0026style=for-the-badge\n[AWS Lambda-url]: https://aws.amazon.com/lambda/\n[DynamoDB]: https://img.shields.io/badge/DynamoDB-4053D6?style=for-the-badge\u0026logo=amazon-dynamodb\u0026logoColor=white\n[DynamoDB-url]: https://aws.amazon.com/dynamodb/\n[GitHub Actions]: https://img.shields.io/badge/GitHub%20Actions-2088FF?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white\n[GitHub Actions-url]: https://github.com/features/actions\n[Terraform]: https://img.shields.io/badge/Terraform-623CE4?style=for-the-badge\u0026logo=terraform\u0026logoColor=white\n[Terraform-url]: https://www.terraform.io/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphammings%2Fcloud-portfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphammings%2Fcloud-portfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphammings%2Fcloud-portfolio/lists"}