About this WebsiteMy ResumeGalleryAbout MeViceragenesis

About This Website


Introduction

Welcome to my beautiful website!


Thank you for visiting. This website serves as my personal website, as well as my own attempt at the Cloud Resume Challange. As such, the website is a mix between technical showcases and depictions of my personal life.



What's on this Website?

- About This Website: How and Why this Website was built.

- My Resume: My Developer Resume.

- My Pictures: Random pictures and stories from my life.

- About Me: A little bit about me.



The Cloud Resume Challenge

My take on the cloud resume challenge does not strictly follow all the technologies listed but nevertheless ticked all the requirements for the challenge. I am using AWS as my cloud provider and follow the challenge specs of the AWS version.


  1. Certification
    Well except for this one, I haven’t taken any exam yet, but I did finish the AWS Certified Cloud Practitioner course on Udemy by Stephane Maarek. I am currently studying for the AWS Certified Developer course, also by him. Both courses are very good, lectures are straightforward and include plenty of hands-on lessons.

  2. HTML
    For the front end, I use Next.js and, as such, I use HTML components.

  3. CSS
    Instead of traditional CSS files, I use Tailwind CSS for ease of use, practicality, and alignment with what employers use nowadays.

  4. Static Website
    Since we are doing a static website hosted on S3, my Next.js needs to be exported to static files. Therefore, my front end may be limited to static content, but unfortunately, that is inevitable if you want to stay under the free tier.
    I have tried to go above and beyond with solutions such as hosting with an EC2 Apache HTTP server or running Docker containers on ECS Fargate. These solutions offer more flexibility since I can have code running on the server instead of just static files. However, they were deprovisioned after a couple of weeks due to the cost of running them.

  5. HTTPS
    I created ACM certificates for my domain. The S3 website endpoint is then set as the origin of a CloudFront Distribution with HTTPS.

  6. DNS
    I bought khuebanhzai.com for $15 and created a AAAA record that points to my CloudFront Distribution with IPv6. My DNS records also contain two A records that point to dev.khuebanhzai.com and api.khuebanhzai.com hosted zones, which are the subdomains reserved for API endpoints.

  7. JavaScript
    Next.js is a Node.js framework, so everything already includes JavaScript.

  8. Database
    Instead of using DynamoDB, I use MongoDB hosted on Mongo Atlas. In principle, DynamoDB should be similar to MongoDB, so I chose the latter for my database option to navigate away from the AWS Console for a bit.

  9. API
    I set up endpoints on API Gateway to allow my frontend to interact with my Lambda functions. I also set up custom domains for my APIs and configured them to respond with CORS Access Allow headers.

  10. Python
    I already know Python, so I had the choice to pick either Node.js or Python runtime for my Lambda Functions. In the end, I picked Node.js.

  11. Tests
    This is ongoing.

  12. Infrastructure as Code
    I use Terraform as my IaC tool because it is cloud-agnostic, in case I want to do another version of the Cloud Resume Challenge.

  13. Source Control
    After every change, my code is committed to a GitHub Repo, which is currently private. Each time a commit to the main branch is made, a CI/CD job is run to test, build, and deploy new changes.

  14. CI/CD (Back End)
    This is ongoing.

  15. CI/CD (Front End)
    After each commit, a GitHub Action workflow runs to export my Next.js code into static files. Then, tests are run to check for issues. The build artifacts are uploaded to another workflow that deploys changes to my S3 Bucket. Finally, the CloudFront Distribution is invalidated to ensure visitors fetch the newest content from the origin.

  16. Blog Post
    This is my blog post.