Portfolio Reboot

As my career as a developer progresses, I like to periodically update my resume. Alongside these periodic updates, I also like to update my portfolio. My previous version of my portfolio was a simple HTML/CSS template hosted on a shared web hosting plan. This workflow - although simple and performant - made updates cumbersome due to having to manually update the HTML content, firing up an FTP client, and manually uploading updates each time I wanted to make a small change to the content. In addition to this, I also plan to implement various features such as a blog. With the future roadmap in mind, I started to browse the web looking for the “perfect” solution for my use case.

Choosing A Tech Stack

Skill Card Hex
React Logo
React
Skill Card Hex
Next.js Logo
Next.js
Skill Card Hex
Styled Components Logo
Styled Components
Skill Card Hex
Strapi CMS logo
Strapi
Skill Card Hex
Node.js Logo
Node.js
Skill Card Hex
GraphQL Logo
GraphQL
Skill Card Hex
MongoDB Logo
MongoDB

The Thought Process

To improve the process of updating my portfolio, I opted to implement a backend. Upon doing some research, I decided to use one of the many open-source Node.js headless CMS platforms to speed up the backend development so I can focus on the frontend itself. Open source and funding were why I ended up going with Strapi. Knowing that Strapi is well funded and open source means that the project has a good chance of outlasting the others, and even if it does go under one day I can maintain the backend code myself since it’s open-source. In addition to this, the open-source nature of Strapi allows me to directly edit the source code which allows me to add custom business logic to the controllers in order to extend the functionality of the GraphQL API beyond what comes out of the box. Next, I worked on picking the frontend technology. Knowing that I will one day be implementing new features, I decided to use a frontend JavaScript framework due to component reusability, which will help speed up development and keep the website looking consistent. Due to the unopinionated nature of the framework, I opted for React. One of the bigger downsides of using a front-end framework that utilizes the VirtualDOM is its impact on SEO and site speed due to having to render the website on the client side. This is where Next.js came into play. Next.js allows me to generate static and server-side rendered pages on a page-by-page basis, this will make the portfolio performant and easily indexable by search engines and bots. Lastly, I chose to use styled-components for my styling. I never have had the opportunity to use CSS-in-js on a professional project, so I figured this was the best way to gain some exposure to a technology that’s becoming more and more common. One of the downsides of CSS-in-js is maintainability and performance hits on large websites, but I don’t anticipate my codebase getting large enough for this to be a reason not to use it. Worst case scenario and I can refactor my CSS to their own files later on.

The Challanges

Since this project involved many technologies that were new to me, I spent a lot of time researching and reading documentation during the planning phase. In addition to this, since I was learning as I progressed with the project, I revised much of the codebase before I was satisfied with it. One of the more interesting challenges was the “Skills Grid” layout on desktop. This was very difficult to match the idea I had in mind while keeping it responsive. At first, I attempted to use empty divs to create the hexagon shape, however, I found this very difficult to scale the height and width and maintain the same shape. I decided it was best to use a single div, with a background image in SVG format, along with padding and margin adjustments.

What I Learned

Although this project was just a simple portfolio website, I still learned a lot. One of the most valuable lessons learned was how to properly structure a React project using best practices. Since I haven’t yet ever developed a React-based project in a professional environment, I never knew of the common patterns and best practices that developers stick to when working with a React project. Another topic I decided to learn and explore was the tradeoffs between CSS-in-JS and separating CSS and js amongst different files. In my opinion, the choice of whether to use CSS-in-JS or not in a project just comes down to developer preference. On one hand, you have the advantages of not having to think about CSS selectors and a “ready only” stylesheet that grows as the website gets older. But on the other end, you might run into performance issues and increased difficulty trying to track down styling errors because of the dynamic (and sometimes confusing class names, which you then have to match up to the JS code.

Other Projects

Busy City

Github IconLive Link Icon

An overview of Chicago's transit system in real-time! Track trains, view arrivals, filter by routes, and more. Built with vanilla JavaScript.

#HTML#CSS#JavaScript#SASS#WebPack

Let's Network!

You can reach me via email or LinkedIn

Email LogoLinkedIn Logo