DEV Community

Roy J. Wignarajah
Roy J. Wignarajah

Posted on • Edited on

Hacktoberfest #3 - Timeloom, TypeScript

Links Mentioned

Project I contributed to: https://github.com/inclinedadarsh/timeloom
Issue I worked on: https://github.com/inclinedadarsh/timeloom/issues/9
My Pull Request: https://github.com/inclinedadarsh/timeloom/pull/18

Timeloom

Before finding and contributing to PrimedKeys, I found a neat TypeScript project I could add a feature to. Timeloom by Adarsh Dubey is a web app that lets users document their technical journey in a timeline-style page.

TypeScript

Timeloom is written in TypeScript, a superset of JavaScript developed by Microsoft. I've never worked with TypeScript before this, but I have experience from class writing web apps using JavaScript (Node JS) and C# (ASP.NET). I have to admit I'm not very good at web development. However, I wanted to challenge myself and add a feature to a web app.

Light and Dark Mode

Growing up, I remember most websites I browsed being black-text on a white background, or what's called a "dark-on-light colour scheme" (more commonly light mode). Nowadays, many websites and apps (like Discord) have what's commonly called dark mode, or a "light-on-dark colour scheme".

Feature Addition - Light Mode Styles

The Issue I worked on was a Feature Request to add light mode styles. Timeloom was developed with dark mode styles, but the author requested light mode support to be enabled, with a light mode stylings provided. Working on this issue was a good exercise in contributing to a web app.

My Approach

When looking at the project README.md, I noticed Tailwind CSS, a CSS framework, is used in the project. Since Tailwind was already used in the project, I decided to follow the Tailwind strategy for light/dark mode.

Tailing CSS Dark Mode

When working on this issue, I learned that web apps can apply light/dark mode styling based on two strategies:

  • media - user's Operating System/browser preferences)
  • class - whenever a dark class (or similar, depending on the framework) is applied to the HTML tree.

I noticed the class strategy was already implemented in Timeloom via the tailwind.config.js file. Since I wasn't adding a toggle button to switch between light/dark modes, I added the media strategy to tailwind.config.js to allow light/dark mode selection via user system preference.

Light Styling

For light styling, I tried to choose appropriate colours for a light theme in the global CSS file, app/globals.css. I used the dark mode stylings as a template and played around with the properties to see which properties affected parts of the web page.
After making my changes in app/globals.css, I noticed that some dark mode styles persisted in the light mode. To determine the elements I would have to modify, I used my browser's Developer Tools and the Element Inspector.

After determining the elements, I used git grep to locate their file locations to various React Components.
Since the class strategy for dark mode stylings was already enabled, I added the dark class to define dark mode stylings to these components and add light mode equivalents. After I was satisfied with the stylings, I submitted a draft Pull Request.

There is a cool grid image at the top of the page I wanted to create a light mode equivalent for. I initially thought I could create a light mode version using code, but I later found out the grid image was an image asset, bg-grid.png. After discussing with the author, we decided not to include a light-mode version of this image in my Pull Request.

Refactoring

After an initial code review, the author noticed some of the stylings in app/globals.css were reused. The author suggested to use Next Themes to solve this. To explore this solution, I made a test branch on my local machine and found that the Next Themes solution would achieve the same affect as the media strategy I implemented in the Tailwind config file.

Due to this, I suggested to instead refactor app/globals.css by moving the light mode stylings I created into the default styles

My Experience and removing other duplicate stylings. I ended up cleaning up app/globals.css and adding the changes to my Pull Request to see if this is what the author wanted. I am currently still waiting to see how the review goes but I am confident we will complete this feature one way or another. Update to come in the next few days.

Conclusion

When I started learning Open Source development, I dreaded contributing to a web app. Despite the web development classes I've taken, I'm still not comfortable creating a web application from scratch (at least using Node JS). However, for Hacktoberfest I wanted to at least attempt a contribution to a web application. And by doing so I was able to implement a feature from scratch.

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more