Hello, and welcome to my website.
I am Yusuf Shakeel, a software engineer from India. I have been running or rather I would say building, refactoring and re-building this website since December 2014. This website is like my sandbox. It helps me try out new tech and tools.
I registered the domain name back in 2015 (2015-02-01T09:05:31Z) and have been running it since. The earlier version of this website was a PHP monolith.
In November 2019, I moved from monolithic architecture to microservices architecture in my software engineering career.
During the first quarter of 2023, I have been teaching myself Next.js and trying to re-build (re-write) the whole website from PHP to TypeScript.
In April 2023, I started using Vercel and testing my newly written Next.js codebase.
It worked!
In May 2023, I decide to run my website on Google Cloud Platform (GCP). I have been using Amazon Web Services (AWS) and GCP since 2014, my startup days.
Alright, let us dive into the details of this current version of my website.
Codebase and stack
The codebase is written in TypeScript. I am using Next.js in this latest version of my website.
This website uses Node.js - LTS version.
Git repository
I tried both GitLab and GitHub. Both works so, pick anyone you like. I went with GitHub because all my open source projects are there. Also private repository are free and they also have introduced GitHub Actions which can be used to setup Continuous Integration and Continuous Deployment (CI/CD) workflow.
Cloud provider
Google Cloud Platform is the cloud provider for this website.
Database
The content on this website is mostly static. So running a Cloud SQL or any other database service at this point in time would be unnecessary. If in the future I write my own headless Content Management System (CMS) then I would try to integrate a database with this containerised application.
Building a CMS is also a very interesting project.
Code, build and deploy
The following image illustrates the current flow of this website.
The code is written and tested locally and then pushed to GitHub. When pull request (PR) is merged to master then CI/CD jobs get executed.
A trigger is configured in the repository. Whenever a new merge to master branch occurs the Cloud Build trigger gets triggerred.
Cloud Build takes the latest code and then creates a new Docker image. This new image is then pushed to Artifact Registry.
A new Cloud Run jobs starts which takes the latest Docker image from the Artifact Registry and deploys a new container. Traffic is migrated from the older containers to the newly created containers.
Static assets are stored in Cloud Storage.
When a user types the domain name in the browser the request is sent to Domain Name System (DNS) which returns the IP address and the request reaches Google Cloud and then gets passed to the containers.
Deployment frequency
Deployment is not frequent. Maybe, few times in a quarter or whenever I write or create a new app or improve something in the codebase.
Alright, we have reached the end of this blog post. Thank you for reading.
See you soon. Have fun developing.
And like always. Stay Happy and Keep Smiling :)