<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cynthia Fotso</title>
    <description>The latest articles on DEV Community by Cynthia Fotso (@cynthia_f).</description>
    <link>https://dev.to/cynthia_f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3482777%2F230d3765-eb06-417c-9673-5c7d73979f5b.jpg</url>
      <title>DEV Community: Cynthia Fotso</title>
      <link>https://dev.to/cynthia_f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cynthia_f"/>
    <language>en</language>
    <item>
      <title>Releasing My First Open-Source CLI Tool: Lessons from Publishing Repository-Context-Packager</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sun, 23 Nov 2025 03:29:42 +0000</pubDate>
      <link>https://dev.to/cynthia_f/releasing-my-first-open-source-cli-tool-lessons-from-publishing-repository-context-packager-2ef0</link>
      <guid>https://dev.to/cynthia_f/releasing-my-first-open-source-cli-tool-lessons-from-publishing-repository-context-packager-2ef0</guid>
      <description>&lt;p&gt;As a developer, releasing your first open-source project is an exciting milestone. It transforms code from a personal project into something others can use, install, and contribute to. I'll walk you through my experience for the &lt;a href="https://www.npmjs.com/package/repo-context-packager?activeTab=readme" rel="noopener noreferrer"&gt;Repository-Context-Packager release&lt;/a&gt;, a command-line tool that packages Git repository context for sharing with Large Language Models (LLMs). I'll cover the tools I chose, the release process, what I learned, the changes made, and how users can now install and use the tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Release Tool and Package Registry
&lt;/h2&gt;

&lt;p&gt;For this project, I chose npm as both the release tool and the package registry. npm (Node Package Manager) is the default package manager for Node.js projects and hosts the largest JavaScript/TypeScript package registry at &lt;a href="https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry" rel="noopener noreferrer"&gt;npmjs.com&lt;/a&gt;. Since my tool is built with &lt;code&gt;Node.js&lt;/code&gt; and uses &lt;code&gt;Commander.js&lt;/code&gt; for CLI functionality, npm was a natural fit as it handles packaging, versioning, and distribution seamlessly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why npm? 
It's free for public packages, widely used in the JavaScript ecosystem, and integrates directly with Node.js. An alternative like &lt;code&gt;GitHub Packages&lt;/code&gt; was considered, but npm made it ideal for ease of use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Release Process
&lt;/h2&gt;

&lt;p&gt;Releasing a package on npm involves several steps, starting from preparing your code to publishing. Here's a detailed breakdown of what I did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Prepare the Package:&lt;br&gt;
-Ensured the project was in a Git repository (&lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager" rel="noopener noreferrer"&gt;Repository-Context-Packager&lt;/a&gt;) with all changes committed. I ran git status to check for uncommitted files.&lt;br&gt;
-Updated package.json to include essential fields: name (unique and available), version (starting at 1.0.0), description, files (to include only necessary files), and dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Locally:&lt;br&gt;
-Ran the tool locally using &lt;code&gt;repo-packager .&lt;/code&gt; or &lt;code&gt;node ./bin/cli.js .&lt;/code&gt; to ensure it worked.&lt;br&gt;
-Executed tests with &lt;code&gt;npm test&lt;/code&gt; to verify functionality making sure nothing was broken.&lt;br&gt;
-Linked the package globally for testing: &lt;code&gt;npm link&lt;/code&gt; (optional, for development).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git Tagging and Version Bumping:&lt;br&gt;
-To create tags manually, I used &lt;code&gt;git tag&lt;/code&gt; to list existing tags, &lt;code&gt;git tag -a v0.9.0 -m "Release version 0.9.0"&lt;/code&gt; to create an annotated tag with a message, and also &lt;code&gt;git push --tags&lt;/code&gt; to push all tags to the remote repository.&lt;br&gt;
-Used &lt;code&gt;npm version patch&lt;/code&gt; to increment the version from &lt;code&gt;0.9.0&lt;/code&gt; to &lt;code&gt;1.0.0&lt;/code&gt;, and created a Git commit. This required a clean working directory, so I committed changes first.&lt;br&gt;
-I then pushed the new commit to GitHub with the command &lt;code&gt;git push origin main&lt;/code&gt;. This ensured the remote repository reflected the release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Publish:&lt;br&gt;
-Logged in to npm with the command &lt;code&gt;npm login&lt;/code&gt;&lt;br&gt;
-Published the package using the command &lt;code&gt;npm publish&lt;/code&gt;. This uploaded the package to the registry, making it publicly available.&lt;br&gt;
-Verified it was published by checking &lt;code&gt;npmjs.com&lt;/code&gt; or running &lt;code&gt;npm view repo-context-packager&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fao04qtieceolz35w9unn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fao04qtieceolz35w9unn.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned and Challenges Faced
&lt;/h2&gt;

&lt;p&gt;This was my first npm release, and it was a steep but rewarding learning curve.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Getting Stuck: Initially, npm version failed because my Git working directory wasn't clean (uncommitted changes). I learned to always commit before versioning. Another little issue was forgetting to update the README for end-users, which I fixed after noticing.&lt;/li&gt;
&lt;li&gt;I had some aha moments as well. I realized how crucial a unique package name is; npm rejects duplicates, which I didn't know. My release was first rejected when I tried to publish with the name &lt;code&gt;repository-context-packager&lt;/code&gt; in &lt;code&gt;package.json&lt;/code&gt; confirming the name already existed; it only worked after I used the unique package name &lt;code&gt;repo-context-packager&lt;/code&gt;. Also, the bin field in &lt;code&gt;package.json&lt;/code&gt; is what makes a CLI tool executable globally after install, which was a game-changer for usability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open-source releasing isn't just coding but it's about documentation, versioning, and user experience. I gained confidence in npm's ecosystem and the importance of semantic versioning (patch, minor, major). It also highlighted the value of testing in a clean environment to catch issues early.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alterations to Code, Files, and Build
&lt;/h2&gt;

&lt;p&gt;I mostly focused on packaging and documentation as the project was already well-structured, so no refactoring was needed.&lt;br&gt;
No change was made to the code's functionality. I updated &lt;code&gt;package.json&lt;/code&gt; for the unique name, version, and metadata, updated &lt;code&gt;README.md&lt;/code&gt; with installation instructions, usage examples making it user-friendly. Also,  no major build changes; the project uses Jest for testing and has a simple npm test script. I ensured &lt;code&gt;files&lt;/code&gt; in &lt;code&gt;package.json&lt;/code&gt; included only essentials (&lt;code&gt;bin&lt;/code&gt;, &lt;code&gt;src&lt;/code&gt;, &lt;code&gt;LICENSE&lt;/code&gt;, &lt;code&gt;README.md&lt;/code&gt;) to keep the package lightweight.&lt;/p&gt;

&lt;h2&gt;
  
  
  User Testing Session
&lt;/h2&gt;

&lt;p&gt;I conducted a user testing session with a fellow developer (a classmate in another course) to simulate real-world usage as this usually reveals blind spots.&lt;br&gt;
I watched him go through the &lt;code&gt;README.md&lt;/code&gt; file and he succeeded in installing the tool globally. He tried to run it but it didn't work as he was not in a Git repository. He opened one and going through the listed examples, he could have it work.&lt;br&gt;
On my end, I also tried to run it on another computer and it worked as I expected.&lt;br&gt;
The testing session was valuable and it reinforced my thinking that documentation is as important as code, and iterative testing prevents post-release issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Users Install and Use the Project Now
&lt;/h2&gt;

&lt;p&gt;Now that Repository-Context-Packager is released, users can install and use it easily via npm following the below steps:&lt;/p&gt;

&lt;p&gt;⦁ Installation&lt;br&gt;
Run this command in your terminal:&lt;br&gt;
&lt;code&gt;npm install -g repo-context-packager&lt;/code&gt;&lt;br&gt;
This installs the &lt;code&gt;repo-packager&lt;/code&gt; command globally, requiring Node.js 18+ and Git.&lt;/p&gt;

&lt;p&gt;⦁ Usage&lt;br&gt;
Navigate to any Git repository and run:&lt;br&gt;
&lt;code&gt;repo-packager .&lt;/code&gt;&lt;br&gt;
This generates &lt;code&gt;repo-context.txt&lt;/code&gt; with project context. You have more options below:&lt;br&gt;
Save to a custom file: &lt;code&gt;repo-packager . --output my-context.txt&lt;/code&gt;&lt;br&gt;
Filter files: &lt;code&gt;repo-packager . --include "*.js"&lt;/code&gt;&lt;br&gt;
For help: &lt;code&gt;repo-packager --help&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Releasing Repository-Context-Packager was a fantastic introduction to open-source publishing. Choosing npm simplified the process, but it taught me the importance of preparation, documentation, and user feedback. If you're releasing your first project, start small, test thoroughly, and iterate based on real users. I'm excited to see how the community uses this for free to contribute or report issues on GitHub!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>npm</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding the Transaction Lifecycle: A Deep Dive into Hedera SDK Documentation</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 22 Nov 2025 04:46:58 +0000</pubDate>
      <link>https://dev.to/cynthia_f/understanding-the-transaction-lifecycle-a-deep-dive-into-hedera-sdk-documentation-lnj</link>
      <guid>https://dev.to/cynthia_f/understanding-the-transaction-lifecycle-a-deep-dive-into-hedera-sdk-documentation-lnj</guid>
      <description>&lt;p&gt;As part of my ongoing contributions to the Hedera SDK Python project, I recently tackled &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/issues/864" rel="noopener noreferrer"&gt;issue-864&lt;/a&gt;, which involved creating a beginner-friendly documentation page explaining the transaction lifecycle in the Python SDK. This was my latest &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/pull/870" rel="noopener noreferrer"&gt;Pull Request&lt;/a&gt;, and it provided an excellent opportunity to deepen my understanding of Hedera's transaction mechanics while improving the project's developer resources. I'll walk through what I did, the process I followed, the lessons learned, and how this fits into my overall progress toward mastering open-source contributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Bridging the Knowledge Gap
&lt;/h2&gt;

&lt;p&gt;SDK users often grasp what transactions do: creating accounts, minting tokens but struggle with how the transaction lifecycle works in the Hedera Python SDK. The typical flow isn't always intuitive, especially for newcomers. Users might wonder: Why freeze? Who needs to sign? What if I skip a step?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Process: Research, Plan, Implement
&lt;/h2&gt;

&lt;p&gt;I started by researching the codebase using VS Code's tools. Since this was a documentation task, I focused on existing documents, examples, and SDK source code to ensure accuracy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Research
&lt;/h4&gt;

&lt;p&gt;Using semantic search and file reads, I explored the below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation Style: Reviewed &lt;code&gt;sdk_developers&lt;/code&gt; folder for consistent Markdown formatting, headings, code blocks, and tone.&lt;/li&gt;
&lt;li&gt;Examples: Analyzed &lt;code&gt;examples/token_associate.py&lt;/code&gt; and &lt;code&gt;examples/token_grant_kyc.py&lt;/code&gt; for real transaction patterns. For instance, the &lt;code&gt;associate_token_with_account&lt;/code&gt; function in token_associate.py demonstrates the full lifecycle: construct, freeze, sign, execute, and receipt check.&lt;/li&gt;
&lt;li&gt;Read &lt;code&gt;src/hiero_sdk_python/transaction.py&lt;/code&gt; to understand methods like freeze_with(client), sign(key), and execute(client).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 2: Planning the Implementation
&lt;/h4&gt;

&lt;p&gt;I drafted the below plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the &lt;code&gt;training&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Write the doc with sections for each lifecycle step, examples, pitfalls, and a diagram.
The plan was concise, focusing on deliverables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 3: Implementation and Validation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Created the required directory and file.&lt;/li&gt;
&lt;li&gt;Wrote the content: Introduction, 5-step breakdown, complete examples, correct/incorrect patterns, and pitfalls.
No code changes required testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This task reinforced the importance of thorough research in open-source docs. In release 0.2, I rated myself low on research and doc skills. This PR demonstrates growth in research, and documentation.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>blockchain</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Continuous Contribution for Hiero SDK Python - Release 0.3</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 22 Nov 2025 00:59:14 +0000</pubDate>
      <link>https://dev.to/cynthia_f/continuous-contribution-for-hiero-sdk-python-release-03-6bk</link>
      <guid>https://dev.to/cynthia_f/continuous-contribution-for-hiero-sdk-python-release-03-6bk</guid>
      <description>&lt;p&gt;For this release 0.3, I continued to work on the &lt;code&gt;https://github.com/hiero-ledger/hiero-sdk-python&lt;/code&gt; repository. My initial goal was not just to solve an issue and open a pull request for Hacktoberfest, but also to continue working on real projects, thereby understanding professional workflows such as proper Git rebasing, writing clean commits, detailed pull requests, ensuring I follow contribution rules, and documenting changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I worked on
&lt;/h2&gt;

&lt;p&gt;I worked on &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/issues/829" rel="noopener noreferrer"&gt;issue #829&lt;/a&gt;, which required adding a real example of how to use &lt;code&gt;fee_schedule_key&lt;/code&gt; in token creation within the Hiero SDK. While this Software Development Kit supported the functionality, there was no documented usage example, and users reading the documentation could not see how to apply it in practice.&lt;/p&gt;

&lt;p&gt;My task involved: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a runnable example in &lt;code&gt;token_create_transaction_token_fee_schedule_key.py&lt;/code&gt; in the &lt;code&gt;examples&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Ensuring the example demonstrated token creation using this key&lt;/li&gt;
&lt;li&gt;Updating the documentation and changelog so users could easily find it&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding the codebase
&lt;/h2&gt;

&lt;p&gt;Before writing this example, I took time to understand how other token-related examples were structured, which modules handled token creation, and how keys were defined in other examples already implemented in the code. This gave me a solid understanding of the repository and reduced the risk of writing code that would not be consistent with the existing style.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing the example
&lt;/h2&gt;

&lt;p&gt;I created a new file in the &lt;code&gt;examples&lt;/code&gt; folder and created two tokens: one with &lt;code&gt;fee_schedule_key&lt;/code&gt; and one without as requested. Updates were done on both showing success or failure. I used the &lt;code&gt;TokenFeeScheduleUpdateTransaction&lt;/code&gt; class from the token folder to enable the client to sign in only when the key was present.&lt;/p&gt;

&lt;p&gt;Once I was done with this, I decided to challenge myself by creating a test file, &lt;code&gt;test_token_fee_schedule_key.py&lt;/code&gt; in the &lt;code&gt;tests/unit&lt;/code&gt; folder and running it to be sure everything worked well before committing my work. However, I ran into several issues. I first ran: &lt;code&gt;uv run pytest tests/unit/test_token_fee_schedule_key.py -v&lt;/code&gt; and encountered errors, most of which were related to missing environment variables or missing keys such as &lt;code&gt;generate_transaction_id&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx6oc79upf1o5lwc9ty2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx6oc79upf1o5lwc9ty2.png" alt="First failed test" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7ns9rlowzsrzd4o8l3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7ns9rlowzsrzd4o8l3r.png" alt="Account ID missing" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa38teb4cpoxkqaot9is7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa38teb4cpoxkqaot9is7.png" alt="feeScheduleKey missing" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These were resolved by rechecking existing tests and searching online. I learned I could download a &lt;a href="https://github.com/protocolbuffers/protobuf/releases" rel="noopener noreferrer"&gt;Protocol Buffers Package&lt;/a&gt; which helped me automatically generate some missing files in my codebase and run the tests appropriately. After implementing these fixes, the unit tests finally passed, which was very satisfying.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvy7rh0e5e5gl42iyzmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvy7rh0e5e5gl42iyzmf.png" alt="Passed unit test" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating the Changelog and Committing my enhancement
&lt;/h2&gt;

&lt;p&gt;Hiero SDK enforces enforces strict documentation standards, including updating &lt;code&gt;CHANGELOG.md&lt;/code&gt; for every enhancement. I added a description of the new example I implemented as this ensured that other users would see what was added in the next release. Also, I ensured each of my commits was signed with both GPG and DCO sign-off as required. I finally submitted a &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/pull/868" rel="noopener noreferrer"&gt;Pull Request&lt;/a&gt; which was reviewed and successfully merged by the repository owner!&lt;/p&gt;

&lt;p&gt;If I were to measure my progress from Release 0.2, I would say I put in a lot of work in this one, did a lot of research, and pushed myself to accomplish more. My goal was to satisfy the maintainer with the quality of work done, the clear documentation, and to close the issue properly, ensuring smooth understanding of the solution.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>tokencreation</category>
      <category>pythonsdk</category>
    </item>
    <item>
      <title>Setting Up Continuous Integration Workflow and Running Tests in Another Repository.</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 15 Nov 2025 03:04:52 +0000</pubDate>
      <link>https://dev.to/cynthia_f/setting-up-continuous-integration-workflow-and-running-tests-in-another-repository-4d74</link>
      <guid>https://dev.to/cynthia_f/setting-up-continuous-integration-workflow-and-running-tests-in-another-repository-4d74</guid>
      <description>&lt;p&gt;We had to set up continuous integration (CI) in our own repository if we hadn't done it yet and contribute tests to a classmates project. This weeks blog dives into my experiences with GitHub Actions, the challenges of writing tests for unfamiliar code and my thoughts on CI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up GitHub Actions CI Workflow
&lt;/h2&gt;

&lt;p&gt;Setting this up was a bit confusing at first, but after reading different resources online and going through the &lt;a href="https://github.com/actions/starter-workflows/tree/main/ci" rel="noopener noreferrer"&gt;starter workflow files for many languages&lt;/a&gt; provided, things became clear. I started by creating a &lt;code&gt;.github/workflows&lt;/code&gt; directory where I added &lt;code&gt;node.js.yml&lt;/code&gt; which is triggered on pushes and PRs to my branch. The set up was quick and everything worked well. &lt;br&gt;
I later created the &lt;code&gt;add-more-tests&lt;/code&gt; branch where I  added, committed and pushed new tests for the &lt;code&gt;readFileContents&lt;/code&gt; function in the &lt;code&gt;fs-utils&lt;/code&gt; file. I opened a Pull Request which triggered my CI workflow and I could watch the action build and pass. I tried breaking my code and watched the CI build fail as expected, then fixed the failing test and pushed again, finishing with a &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/actions/runs/19359923323" rel="noopener noreferrer"&gt;green Action&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Differences in my Partner's repository and Testing setup
&lt;/h2&gt;

&lt;p&gt;My classmate's repo was a Go based CLI tool similar to mine but with different modules. The CI workflow was in the &lt;code&gt;go.yml&lt;/code&gt; file and the testing focused on scanner utilities so I had to familiarize myself with their &lt;code&gt;FileInfo&lt;/code&gt; struct and directory tree generation logic. &lt;/p&gt;

&lt;p&gt;I forked their repo, created the &lt;code&gt;add-more-tests&lt;/code&gt; branch and added unit tests for the &lt;code&gt;generateDirectoryTree&lt;/code&gt; function in &lt;code&gt;scanner.go&lt;/code&gt;. It was quite challenging especially the testing part, but searching helped me and I was able to run the tests with the command &lt;code&gt;go test -v ./pkg/scanner/&lt;/code&gt; and check coverage with &lt;code&gt;go test -cover ./pkg/scanner/&lt;/code&gt; and was happy to see the coverage improve from 8.2% to 30.3%. I communicated with my partner and confirmed I created a &lt;a href="https://github.com/BHChen24/repo2context/pull/37" rel="noopener noreferrer"&gt;Pull Request&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My thoughts on CI
&lt;/h2&gt;

&lt;p&gt;After setting this up, I think CI is a game changer for reliability. Before this, I ran tests manually which was time-consuming and error- prone but now, I catch issues early with automated checks on every push or pull request. It is essential for teams ensuring code stays stable and nothing breaks. CI boosts confidence in deployments.&lt;/p&gt;

</description>
      <category>ci</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>Mastering Testing: My journey with Jest in my project</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 08 Nov 2025 04:56:33 +0000</pubDate>
      <link>https://dev.to/cynthia_f/mastering-testing-my-journey-with-jest-in-my-project-2bbn</link>
      <guid>https://dev.to/cynthia_f/mastering-testing-my-journey-with-jest-in-my-project-2bbn</guid>
      <description>&lt;p&gt;As part of continuously studying for my open source course, I had to try testing for the first time. This week focused on setting up a testing framework, writing unit tests and trying to integrate if possible code coverage analysis. &lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing a Testing Framework
&lt;/h2&gt;

&lt;p&gt;For my &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager" rel="noopener noreferrer"&gt;Repository Context Packager&lt;/a&gt; project (a CLI tool for packaging repository content), I had to chose among a variety of testing frameworks like &lt;code&gt;Cypress&lt;/code&gt;, &lt;code&gt;Jest&lt;/code&gt;, &lt;code&gt;Vitest&lt;/code&gt; one that will best work and enable me write, organize and execute test cases for my project. I chose &lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt; because it is a popular and zero-configuration testing library that supports several options. &lt;br&gt;
Furthermore, it was my best choice because of the following: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After some research, i noticed it is widely used in the JavaScript ecosystem, with excellent documentation and community support.&lt;/li&gt;
&lt;li&gt;It includes built-in features like mocking and coverage, reducing the need for additional tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the link to its GitHub repo &lt;a href="https://github.com/jestjs/jest" rel="noopener noreferrer"&gt;https://github.com/jestjs/jest&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Jest in my Project
&lt;/h2&gt;

&lt;p&gt;Setting up Jest was straightforward but required tweaks for ECMAScript modules. Here's a step-by-step guide:&lt;/p&gt;

&lt;p&gt;To install Jest, I ran &lt;code&gt;npm install --save-dev jest&lt;/code&gt; to add it as a dependency. I updated my scripts in &lt;code&gt;package.json&lt;/code&gt; to include it and started creating test files in a &lt;code&gt;tests&lt;/code&gt; folder and writing tests. When i started testing the &lt;code&gt;matchesIncludePatterns&lt;/code&gt; function, i got stuck as I had a failed test and the error message was &lt;code&gt;cannot use import statement outside a module&lt;/code&gt;. I searched online and on the &lt;code&gt;stackoverflow&lt;/code&gt; page, i saw this is common with Jest if you used &lt;code&gt;ES Modules&lt;/code&gt; which are the &lt;code&gt;import&lt;/code&gt; and &lt;code&gt;export&lt;/code&gt; statements in the code. To fix this, I updated the test script with a flag to support these modules for Jest, and upon running the tests with &lt;code&gt;npm test&lt;/code&gt;, they passed. &lt;/p&gt;

&lt;p&gt;I implemented other tests and to be able to run a single test, i ran &lt;br&gt;
&lt;code&gt;npm test -- --testNamePattern="test name"&lt;/code&gt;. Verifying coverage was also very easy as I only had to run &lt;code&gt;npm run test:coverage&lt;/code&gt; which produced a HTML report in the &lt;code&gt;coverage&lt;/code&gt; folder and also displayed the report in my terminal. I added this to &lt;code&gt;.gitignore&lt;/code&gt; to avoid committing generated files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Test Cases (Lessons and Challenges)
&lt;/h2&gt;

&lt;p&gt;This was the toughest part. I started with the &lt;code&gt;matchesIncludePatterns&lt;/code&gt; function from &lt;code&gt;fs-utils.js&lt;/code&gt;. I followed by &lt;code&gt;config-utils.js&lt;/code&gt; and finally &lt;code&gt;git-utils.js&lt;/code&gt;. Jest has this powerful utility &lt;code&gt;jest.fn&lt;/code&gt; which allows to create mock functions that enable us test the behavior of functions indirectly by calling other pieces of code rather than just testing their output; I implemented this and covered good values, bad values and some edge cases. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reflections on the Process
&lt;/h2&gt;

&lt;p&gt;This was my first deep dive into testing. Writing tests forced me to think in order to anticipate failures and improve my code's reliability.&lt;/p&gt;

&lt;p&gt;Some takeaways are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testing isn't just about passing code; it's about confidence in changes.&lt;/li&gt;
&lt;li&gt;And coverage reports guide where to add tests as we can see the missed lines during testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll definitely incorporate testing in future projects. It's a skill that pays off in maintainability and collaboration. If you're new to this, start small with one function; it is addictive once you see the benefits!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hacktoberfest participation: Event Server</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 01 Nov 2025 03:58:18 +0000</pubDate>
      <link>https://dev.to/cynthia_f/hacktoberfest-participation-event-server-3932</link>
      <guid>https://dev.to/cynthia_f/hacktoberfest-participation-event-server-3932</guid>
      <description>&lt;h2&gt;
  
  
  Contributing to Hacktoberfest: Adding a README.md to the SenecTask API Server
&lt;/h2&gt;

&lt;p&gt;As part of Hacktoberfest 2025, I decided to contribute to an open-source project to help improve documentation and make it easier for new contributors to get started. I chose the eventServer repository, a Node.js API server for SenecTask, which is a collaborative task and event management platform for Seneca Polytechnic users. I'll walk through my contribution process, the issue I addressed, the pull request I created, and some reflections on what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Issue: Missing Documentation
&lt;/h2&gt;

&lt;p&gt;The first went through the repository and noticed it lacked a comprehensive README.md file. Without clear setup instructions, API documentation, or contribution guidelines, new developers would struggle to understand the project, run it locally, or contribute effectively.&lt;/p&gt;

&lt;p&gt;I filed &lt;a href="https://github.com/Colin-Stark/eventServer/issues/18" rel="noopener noreferrer"&gt;issue-18&lt;/a&gt; to highlight this and it addressed a real need, that of improving project discoverability, reducing barriers for contributors.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Process: Drafting and Implementing the README.md file
&lt;/h2&gt;

&lt;p&gt;I started by exploring the entire codebase. I read through the existing files to understand the project's structure and functionality. The app is a Node.js/Express server using MongoDB with Mongoose, bcrypt for security, and Jest for testing. It handles user signup with email validation and plans for event or task management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Submitting the Fix
&lt;/h2&gt;

&lt;p&gt;Once the README was ready, I committed it to a new branch and pushed it. Then, I opened a &lt;a href="https://github.com/Colin-Stark/eventServer/pull/19" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; targeting the main branch. The PR description summarized the changes, linked to the issue (closing it), and included a checklist for the repository owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson Learned and Reflections
&lt;/h2&gt;

&lt;p&gt;This contribution was a great experience! I once more learned how to navigate GitHub issues and PRs effectively, from filing an issue to drafting a PR description that closes it. I also improved my Markdown skills. Understanding the project's codebase (e.g., how signup works with email validation) deepened my appreciation for secure backend development.&lt;/p&gt;

&lt;p&gt;Starting small with documentation is low-risk and high-impact. It builds confidence and helps the community. Next time, I'd explore adding tests.&lt;br&gt;
Overall, contributing to eventServer was rewarding. It not only helped the project but also boosted my open-source skills. If you're participating in Hacktoberfest, I highly recommend starting with docs or small fixes as they're often the most needed and appreciated.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>node</category>
    </item>
    <item>
      <title>Hacktoberfest Contribution: Hiero SDK Python</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Fri, 31 Oct 2025 12:59:35 +0000</pubDate>
      <link>https://dev.to/cynthia_f/hacktoberfest-contribution-hiero-sdk-python-2cg6</link>
      <guid>https://dev.to/cynthia_f/hacktoberfest-contribution-hiero-sdk-python-2cg6</guid>
      <description>&lt;p&gt;For this week’s Hacktoberfest contribution, I worked on improving documentation for the Hiero SDK Python project. The repository provides a set of tools and abstractions for handling tokens and custom fees in the Hiero network.&lt;/p&gt;

&lt;p&gt;I found an &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/issues/680" rel="noopener noreferrer"&gt;open issue&lt;/a&gt; titled "Add module, class, and method docstrings to &lt;code&gt;custom_fee.py&lt;/code&gt;". The maintainers wanted comprehensive Google-style docstrings for the CustomFee abstract base class and its methods. The goal was to improve readability, contributor understanding, and maintainability.&lt;/p&gt;

&lt;p&gt;I had to first ask if I can contribute to the project and await approval before proceeding. I forked and cloned the repository from Github and created a new branch called &lt;code&gt;issue-680-docstrings-customfee&lt;/code&gt;. I later on added a module level docstring describing the purpose of the file and completed the issue requirements. I then committed and pushed the changes to my fork and opened a &lt;a href="https://github.com/hiero-ledger/hiero-sdk-python/pull/696" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; to the main repository. &lt;/p&gt;

&lt;p&gt;This issue helped me practice writing Google-style docstrings consistently, understand how abstract base classes work in Python and enhance my skills in GitHub contributing to another open source repository. I appreciated how clear documentation improves project accessibility for new contributors. &lt;/p&gt;

&lt;p&gt;Overall, this was a smooth one. I had to search on how to add a GPG key on GitHub as I did not have one and this was a requirement in the owners &lt;code&gt;contributing.md&lt;/code&gt; file as well as DCO signing. I understood this was to ensure professional collaboration and I liked it a sit was my first time ending up with signed commits.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>web3</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Refactoring my Repository-Context-Packager code</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 11 Oct 2025 01:21:39 +0000</pubDate>
      <link>https://dev.to/cynthia_f/refactoring-my-repository-context-packager-code-1255</link>
      <guid>https://dev.to/cynthia_f/refactoring-my-repository-context-packager-code-1255</guid>
      <description>&lt;p&gt;My Repository-Context-Packager tool packages Git repository contents into a single text file for sharing with Large Language Models (LLMs). If you're not familiar, it's a CLI app that analyzes directories, collects Git information, builds file trees, and outputs everything neatly. Here is my &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager" rel="noopener noreferrer"&gt;repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Refactoring is not about adding new features; it's about improving the code's structure without changing its behavior. I focused on making the code easier to read, maintain, and test. Let's dive into what I did, step by step, and how Git helped me manage the process. &lt;/p&gt;

&lt;h1&gt;
  
  
  What did you focus on in your improvements?
&lt;/h1&gt;

&lt;p&gt;My original files, &lt;code&gt;index.js&lt;/code&gt; and &lt;code&gt;utils.js&lt;/code&gt;, which made them hard to reuse for future implementations. I focused on breaking them into smaller, more focused units to improve my code’s modularity.&lt;/p&gt;

&lt;h1&gt;
  
  
  How did you fix your code so it would be better in each step?
&lt;/h1&gt;

&lt;p&gt;I followed a structured approach, committing each change separately to maintain a clear history.&lt;br&gt;
The &lt;code&gt;utils.js&lt;/code&gt; file was bloated with Git, file system, and configuration functions, so I extracted them into dedicated modules to improve structure and readability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;code&gt;git-utils.js&lt;/code&gt; for Git operations like &lt;code&gt;getGitInfo&lt;/code&gt; and &lt;code&gt;getRecentlyModifiedFiles&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Created &lt;code&gt;fs-utils.js&lt;/code&gt; for system operations like &lt;code&gt;buildTree&lt;/code&gt;, &lt;code&gt;traverseDir&lt;/code&gt;, and &lt;code&gt;readFileContents&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Renamed &lt;code&gt;utils.js&lt;/code&gt; to &lt;code&gt;config-utils.js&lt;/code&gt; since it contained logic for handling TOML configs.&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;cli.js&lt;/code&gt; to import correctly from the new modules.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How did your interactive rebase go?
&lt;/h1&gt;

&lt;p&gt;It went smoothly. I first practiced using the lab example before performing the rebase on this project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Did you find any bugs in your code while you did this?
&lt;/h1&gt;

&lt;p&gt;No, I did not find any bugs during the refactoring process.&lt;/p&gt;

&lt;h1&gt;
  
  
  Did you break your program while changing things?
&lt;/h1&gt;

&lt;p&gt;No, I did not. Before pushing everything to the main branch, I ran my code to make sure nothing was broken during the refactoring. The output remained identical.&lt;/p&gt;

&lt;h1&gt;
  
  
  How did it go using Git to change your project's history?
&lt;/h1&gt;

&lt;p&gt;It went well. I first created a &lt;code&gt;refactoring&lt;/code&gt; branch for isolation, committed changes separately for clarity, and then used an interactive rebase to squash all commits into one. Here is the &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/commit/e880760a3039d481fc88a041370b8c17fc45bf83" rel="noopener noreferrer"&gt;refactoring commit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Refactoring was much needed as it made my code more modular and maintainable for future work.&lt;/p&gt;

</description>
      <category>git</category>
      <category>tutorial</category>
      <category>node</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Adding a New TOML Feature, using Git Remotes and Merges on a repository.</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Fri, 03 Oct 2025 22:34:04 +0000</pubDate>
      <link>https://dev.to/cynthia_f/adding-a-new-toml-feature-using-git-remotes-and-merges-on-a-repository-2mjn</link>
      <guid>https://dev.to/cynthia_f/adding-a-new-toml-feature-using-git-remotes-and-merges-on-a-repository-2mjn</guid>
      <description>&lt;p&gt;I worked on adding a new feature to my classmate's repository, &lt;a href="https://github.com/BHChen24/repo2context" rel="noopener noreferrer"&gt;repo2context&lt;/a&gt;, a Go-based project that generates structured markdown from a repository. My task was to implement TOML configuration file support so that users could control options such as &lt;code&gt;no-gitignore&lt;/code&gt;, &lt;code&gt;display_line_num&lt;/code&gt;, and &lt;code&gt;verbose&lt;/code&gt; through a config file instead of always passing CLI flags.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did the code itself go?
&lt;/h2&gt;

&lt;p&gt;This was very challenging programming-wise since the project was written in &lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Go&lt;/a&gt;, a language I had no prior experience with. It took me a lot of time to review and understand the code, and then figure out how to implement the new feature. &lt;/p&gt;

&lt;p&gt;I filed &lt;a href="https://github.com/BHChen24/repo2context/issues/26" rel="noopener noreferrer"&gt;issue#26&lt;/a&gt; in my classmate’s repo. While going through the code, I noticed it used &lt;code&gt;Viper&lt;/code&gt; (a Go config library) to load options. I modified the project's CLI initialization to detect &lt;code&gt;.r2c-config.toml&lt;/code&gt; in the current directory and merge values so that CLI flags override config file values. &lt;/p&gt;

&lt;h2&gt;
  
  
  Did you run into any problems?
&lt;/h2&gt;

&lt;p&gt;Yes. One challenge I ran into was that the program kept printing the default scan options (&lt;code&gt;NoGitignore: false, DisplayLineNum: false&lt;/code&gt;) even though I had set them to &lt;code&gt;true&lt;/code&gt; in the &lt;code&gt;.r2c-config.toml&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did you tackle the work?
&lt;/h2&gt;

&lt;p&gt;To solve the problem, i added a merge step in &lt;code&gt;initConfig()&lt;/code&gt; so that only options not explicitly set through flags would be replaced by config file values. This ensured the TOML file was respected.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did it go using git?
&lt;/h2&gt;

&lt;p&gt;It was pretty smooth at the beginning, but I got a little confused since I usually open a pull request directly instead of starting with a &lt;code&gt;Draft Pull Request&lt;/code&gt;. I read the documentation on GitHub and figured it out. I opened this &lt;a href="https://github.com/BHChen24/repo2context/pull/27" rel="noopener noreferrer"&gt;Pull Request&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Did you find any of it difficult?
&lt;/h2&gt;

&lt;p&gt;Apart from the small Git confusion, not really. I actually enjoyed working on my classmate’s repo. We were both engaged and responsive, which made the process move faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would you do differently next time?
&lt;/h2&gt;

&lt;p&gt;I’ll practice more Git commands next time so I don’t have to constantly look them up. Tasks become easier when you know the commands by heart.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did you learn from the experience?
&lt;/h2&gt;

&lt;p&gt;I learned that even if a project looks intimidating especially in a language you’ve never used before, if you’re willing to put in the time and effort, you can still achieve your goal and gain new skills.&lt;/p&gt;

&lt;p&gt;I learned how to implement configuration file support, and I also gained valuable experience collaborating on a real project using forks, branches, and pull requests.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>go</category>
      <category>learning</category>
    </item>
    <item>
      <title>Working with Parallel Branches in my project</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Thu, 25 Sep 2025 05:12:59 +0000</pubDate>
      <link>https://dev.to/cynthia_f/working-with-parallel-branches-in-my-project-gdj</link>
      <guid>https://dev.to/cynthia_f/working-with-parallel-branches-in-my-project-gdj</guid>
      <description>&lt;p&gt;In this project, I learned how to work with parallel branches in Git to manage multiple features efficiently, each being separate on its own branch. This was new to me and it enabled me develop, test, and merge different features without interacting with the main branch.&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Overview
&lt;/h1&gt;

&lt;p&gt;My project repository is available on GitHub &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager" rel="noopener noreferrer"&gt;here&lt;/a&gt;. I created separate issues for each feature to track my work: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/issues/13" rel="noopener noreferrer"&gt;Issue 13&lt;/a&gt; implementing the Line Number Display feature, and &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/issues/14" rel="noopener noreferrer"&gt;Issue 14&lt;/a&gt; implementing the File Size Display feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Creating and working on topic branches
&lt;/h1&gt;

&lt;p&gt;I created two topic branches for the two features I wanted to implement. These branches were created specifically for working on individual features and were very useful, as any unexpected bugs would remain contained in the topic branches and not affect my main branch. &lt;br&gt;
I made changes in each branch, tested locally to ensure they worked as expected, committed with descriptive messages, and merged them back into main. The &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/commit/1fecb08c492e9567f122db3c940e2b0a96096c62" rel="noopener noreferrer"&gt;fast-forward merge&lt;/a&gt; for issue-13 was straightforward, as it was the first merge with the main branch. After the merge, I tested the code again to ensure everything was okay before moving to the next step..&lt;br&gt;
I faced some difficulties merging the issue-14 branch into main. I had a &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager/commit/011de3621787bd3c6e5e2b60694b1a3d94a32bff" rel="noopener noreferrer"&gt;conflict-merge&lt;/a&gt; which occurred because this branch modified similar areas of code. I was able to resolve the conflict and successfully merge the branch into&lt;/p&gt;

&lt;h1&gt;
  
  
  Lesson Learned
&lt;/h1&gt;

&lt;p&gt;For future projects, I will make sure I understand each command beforehand to work more efficiently. Trying to run commands and understand them at the same time was time-consuming.&lt;/p&gt;

&lt;p&gt;Working with parallel branches was an excellent way to practice real world Git workflows. I learned a lot about branch management, the merge process, and documentation.&lt;/p&gt;

</description>
      <category>git</category>
      <category>softwaredevelopment</category>
      <category>opensource</category>
    </item>
    <item>
      <title>OSD 600 - Lab 2</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Sat, 20 Sep 2025 15:48:05 +0000</pubDate>
      <link>https://dev.to/cynthia_f/osd-600-lab-2-4na6</link>
      <guid>https://dev.to/cynthia_f/osd-600-lab-2-4na6</guid>
      <description>&lt;h1&gt;
  
  
  My experience of contributing a code change to another project.
&lt;/h1&gt;

&lt;p&gt;I had never contributed to an open-source project before and doing this this first time was intimidating. It was a good way of improving my collaborative development skills, coding skills, and more importantly code understanding of a code I hadn't worked on before. I contributed a new feature to the Repository-context-packager &lt;a href="https://github.com/dharamghevariya/repo-contextr" rel="noopener noreferrer"&gt;repo-contextr&lt;/a&gt; which is a command line tool designed to package repository content for use with large language models. Below is how the process went: &lt;/p&gt;

&lt;h1&gt;
  
  
  The idea
&lt;/h1&gt;

&lt;p&gt;The feature i proposed was a &lt;code&gt;--recent&lt;/code&gt; or &lt;code&gt;-f&lt;/code&gt; flag which will allow the CLI to only include the files modified in the last 7 days. This is useful when working with large repositories, as it helps focus on relevant and recently changed files instead of packaging the entire repository.&lt;/p&gt;

&lt;h1&gt;
  
  
  Implementing the feature
&lt;/h1&gt;

&lt;p&gt;At first, i encountered a lot of difficulties with this repo as the README.md instructions were not clear and the commands to run the code were not working. We scheduled a meeting online together and I showed the issues to the repo owner, as well as the commands i used to be able to run the code from my terminal. &lt;br&gt;
I worked on &lt;a href="https://github.com/dharamghevariya/repo-contextr/issues/1" rel="noopener noreferrer"&gt;issue-1&lt;/a&gt;.&lt;br&gt;
The main steps included: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checking file timestamps: I had to do some research as I am not familiar with Python. I implemented python's &lt;code&gt;os.path.getmtime()&lt;/code&gt; function to be able to retrieve the last modified time of each file and compare it to the current date to determine if it was within the last 7 days. &lt;/li&gt;
&lt;li&gt;Integrating existing CLI options, making sure that the &lt;code&gt;--recent&lt;/code&gt; flag works well alongside existing options like &lt;code&gt;--include&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Testing the feature, by running it on its own &lt;code&gt;--recent&lt;/code&gt;, or combining it with other features (&lt;code&gt;--recent --include "*.py"&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Creating the Pull Request
&lt;/h1&gt;

&lt;p&gt;Once the above were done, I committed the changes on issue-1, pushed the issue-1 branch to GitHub and created a &lt;a href="https://github.com/dharamghevariya/repo-contextr/pull/2" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learning from my experience
&lt;/h1&gt;

&lt;p&gt;As mentioned earlier, it was very challenging to understand this code, and make sure the &lt;code&gt;--recent&lt;/code&gt; feature worked correctly with the rest of the CLI options, and avoid breaking existing functionalities. I also learned how to write a clear pull request keeping it easy to understand its purpose and my feature implementation. &lt;/p&gt;

&lt;p&gt;It was also a good experience to have a feedback from my CLI tool repository as the contributing member mentioned my README.md file was clear and easy to understand. He could follow the steps and run the code smoothly and could implement his new feature. He did not need to change many things, it was adding his new feature and updating the README.md file to reflect it. I learned about code review as it lets you have a view of your work by another person and in this way, you will easily know if you did things correctly, if everything works as expected or if you missed certain things. &lt;/p&gt;

</description>
      <category>cli</category>
      <category>opensource</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>My experience in building the CLI tool</title>
      <dc:creator>Cynthia Fotso</dc:creator>
      <pubDate>Thu, 18 Sep 2025 08:57:00 +0000</pubDate>
      <link>https://dev.to/cynthia_f/my-experience-in-building-the-cli-tool-4mnf</link>
      <guid>https://dev.to/cynthia_f/my-experience-in-building-the-cli-tool-4mnf</guid>
      <description>&lt;p&gt;The CLI (command-line) tool Repository-Context-Packager was built to analyze local git repositories and create a text file containing repository content optimized for sharing with LLMs (Large Language Models). &lt;br&gt;
I built it because I often faced the challenge of copy-pasting multiple files into an LLM when I needed help. This was time-consuming and repetitive, especially for larger projects. With this tool, I can now generate a complete report of my repository in just one step. &lt;/p&gt;

&lt;p&gt;Below are the features implemented in this project: &lt;/p&gt;

&lt;p&gt;Command Line Entry Point: I used the Commander.js library to handle commands, arguments and options. &lt;/p&gt;

&lt;p&gt;Output Formatting: I implemented a buildTree() utility function to create a text-based tree structure of directories and files. This took me sometime to be able to have a nice tree representation. The current Git commit information was included as well as a summary showing the total number of files and lines processed. &lt;/p&gt;

&lt;p&gt;File Reading and Exclusions: Some of my files like package-lock.json were over 16KB, so I had to truncate it with a note specifying the user that only the first 16KB have been included. I also excluded files like node_modules, .git. &lt;/p&gt;

&lt;p&gt;Optional Features: I integrated the .gitignore where I listed some files to be automatically excluded. I also implemented options like --output to write to a file, and --include to filter file types by extension. &lt;/p&gt;

&lt;p&gt;I am really happy with what I have built so far. It is not perfect, can still be improved but it is satisfying to see the little things we can learn each day. This first open source project enhanced my understanding of working in open source with other people, reviewing issues, fixing and closing them. I gained a lot and enhanced my knowledge on GitHub. With this tool, I can now package a repository and send it to an LLM for help in seconds, hence no more copy-pasting files one by one which is time saving. &lt;/p&gt;

&lt;p&gt;Here is the link to my Repository-Context-Packager tool: &lt;a href="https://github.com/CynthiaFotso/Repository-Context-Packager" rel="noopener noreferrer"&gt;https://github.com/CynthiaFotso/Repository-Context-Packager&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>githubprojects</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
