I am very happy to share that I am participating in the month-long open-source event called Hacktoberfest! This global event encourages developers from all over the world to contribute to open-source projects and learn from real-world codebases. During this period, open-source projects welcome contributions, and developers like me get a great opportunity to work on live projects, understand how large systems work, and collaborate with other contributors. Events like this help both contributors and maintainers, on one hand contributors get hands-on experience while maintainers get help improving their projects through community pull requests.
After spending some time searching for good projects, I decided to contribute to Cloudinary's community project, Next Cloudinary SDK. I got to know about this organization from the Digital-Ocean discord channel. Cloudinary is a platform that helps developers manage, optimize, and deliver images and videos efficiently across the web. In simple words, it helps websites handle media faster and smarter without worrying about manual optimization or delivery. In this bigger purpose project, the Next Cloudinary SDK makes it very easy to use Cloudinary inside a Next.js app. It provides React components, hooks, and utilities that allow developers to display, transform, and optimize images with just a few lines of code. Basically, it acts like a bridge that connects Cloudinary’s services with Next.js so developers can build fast, image-friendly websites easily.
The first step in my contribution journey was setting up the project and tools on my local system, which I would say was the most challenging part. I started by cloning my forked repository, and very soon, I faced my first challenge, which was understanding how a monorepo works. In simple words, a monorepo (short for “monolithic repository”) is a single repository that contains multiple small projects or packages instead of maintaining them separately. This setup makes it easier to manage related codebases and their dependencies. In this particular project, they were using pnpm-workspace.yml
to define and link all the packages. Once I understood how the monorepo worked, everything started to make more sense. Honestly, GitHub Copilot helped me a lot during this part. It guided me like a mentor while setting up the project, explaining what each part of the configuration was doing and helping me debug setup errors quickly.
Once the setup was done successfully, I started exploring the issues of the repository to find something I could work on. After going through a few of them, I found Issue #592 that I felt confident to work on. Interestingly, this issue was not in the main next-cloudinary
repository but in another related one — cloudinary-util (Issue #237). So, I had to set up one more project locally, but this time it was very easy since I was already familiar with the project structure. This issue was about adding new functionality to the cropMode
, so that users could use it as a cropping plugin while using this library. Once I understood the logic, I made the required code changes and created a pull request. The project also had proper test cases, so I added three new tests that covered my code changes to ensure everything worked as expected.
By this time, I was much more comfortable with the codebase and started understanding how things were structured. So, I decided to take up another issue from the same repository — Issue #233. This one was a small bug related to the overlay text functionality. The problem was that when users entered consecutive special characters such as "."
, ","
, or "/"
, the code was only escaping the first character but not the rest. This caused issues in the generated URL because certain characters like commas have special meanings in Cloudinary’s syntax. To fix it, I simply replaced the replace()
function with replaceAll()
to make sure all the occurrences were properly escaped. You can see the fix here: Pull Request #240. Even though it was just a few lines of code, my professor always says that smaller pull requests are easier to review and merge — and they are equally important in open-source projects because they improve reliability and maintain consistency.
So far, these are the two contributions I have made during the first week of Hacktoberfest. I am still waiting for feedback and reviews from the maintainers, which is quite understandable because this event brings a huge number of pull requests for them to review. I think waiting patiently is also part of the learning process. I am now exploring another issue in the same project and also looking for new repositories to contribute to. In my next blog, I will share another interesting issue that I am currently working on and how this whole open-source journey is helping me learn and grow as a developer.
Thank you...!
Top comments (0)