About This Website 💻
Why did I create this?
Whether you are enthusiastic about software development or not - I believe a personal website is a powerful tool to show off your skills and accomplishments to the anyone who is interested and may be willing to connect with you. Having an online presence in the digital age is a must in my opinion.
Previous Attempt
Early 2020, I attempted my first shot at making a personal portfolio website. I used my knowledge of React and barebones CSS to make a static website which I could use to begin my online presence professionally.
While this suited my needs at the time - there were a lot of reasons that ended up pushing me to create an entirely new site.
- Was hosted on Heroku via Git and had an atrocious load time
- Completely static site with little to no responsiveness and dynamic content
- Did not fit very well within my vision of minimalism and modern design principles
- Tech stack was very barebones and not very challenging
- Overall felt like a glorified PDF file
This Website
This website is custom coded using the technologies and frameworks listed below. My goal when building this site was to pick technologies with a lot of "out-of-the-box" functionality which would allow me to create and host the site with minimal overhead and configuration.
React - Library
It should come with little surprise that React is used as the client side JS library for this website. Component views and efficient state management with automated rerendering were nobrainer reasons for choosing this library as I wanted to minimize overhead as much as possible. Moreover, it is the JS library I am most familiar with - so it seems to be the best option (for now).
Next.js - Framework
I've come to have Next.js at the front of my mind whenever I intend on create any sort of non-SPA based website. I've come to make React the optimal choice for web development for myself - but it is not without flaws on its own. A lot of features come out of the box with Next.js that you would normally have to manually configure - such as server side rendering, JS bundling, routing, and more. I would much rather use a framework like Next.js to enjoy complex features like that with little headache.
Tailwind & Material UI - Styling
I had a decision before I started building the website that is very crucial to the feel of the website as well as my sanity for when I completed the site. I knew from the jump that I did not want to just use raw CSS - primarily because I wanted to challenge myself to use new tools and make the burden of styling easier. I had a goal in mind when selecting Tailwind CSS, and that was to avoid unnecessary complexity. I decided against using any preprocessor like Sass since it would likely be too overkill for this. I ended up deciding upon Tailwind just because of how easy it is to style components right in jsx files and how simple breakpoint changes are to implement. I also used Mui for premade components that I have little interest in creating manually - such as the accordion you are reading from right now :)
Vercel - Deployment
Vercel seemed like the appropriate choice for hosting and deployment for this web app, given that it fell in line with my principle of little configuration. Seeing that Vercel is the creator and maintainer of Next.js, it is evident that deploying a Next.js app on a serverless Vercel service would be simple. Vercel is akin to App Engine for GCP and Elastic Beanstalk for AWS. Moreover, Vercel offers out-of-the-box CI/CD with automatic deployment in response to GitHub pushes.
GitHub - Code Hosting and Versioning
With any modern project - it is arguably naive to not choose a versioning system like Git and a source code hoster like GitHub. Especially since I intend to make changes to the site as time goes on, it is crucial that there is a robust VCS that exists as a backbone for the project. Moreover, the integration with Vercel for automatic deployments streamlines work significantly.
Upcoming
Here are some things I hope to add to the website in the future!
- This website is a little too minimal - I want to add some more CSS magic 🪄
- A blog connected to a backend database like Firestore or Postgres 📝
- Connect Google Analytics to display page visits for anyone to see 📈