<?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>Forem: kkrishnan10</title>
    <description>The latest articles on Forem by kkrishnan10 (@kkrishnan10).</description>
    <link>https://forem.com/kkrishnan10</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%2F3487706%2F190b9f8c-ced2-40e7-afea-ad06eac44dd4.png</url>
      <title>Forem: kkrishnan10</title>
      <link>https://forem.com/kkrishnan10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kkrishnan10"/>
    <language>en</language>
    <item>
      <title>Release 0.4</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Fri, 12 Dec 2025 19:55:08 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/release-04-36dh</link>
      <guid>https://forem.com/kkrishnan10/release-04-36dh</guid>
      <description>&lt;p&gt;For Release 0.4, I achieved the goals I set in my planning post by successfully implementing and submitting an initial category filtering feature to the &lt;a href="https://github.com/kkrishnan10/open-web-calendar" rel="noopener noreferrer"&gt;Open Web Calendar project&lt;/a&gt;. I built this by extending the event conversion logic in &lt;a href="https://github.com/kkrishnan10/open-web-calendar/blob/feature/category-filtering/open_web_calendar/convert/events.py" rel="noopener noreferrer"&gt;convert/events.py&lt;/a&gt;, learning how the icalendar library exposes event metadata, and correctly using calendar_event.categories instead of manually parsing raw ICS fields after receiving maintainer feedback. &lt;/p&gt;

&lt;p&gt;I also improved code quality by moving inline HTML styles into the project’s CSS files to match existing conventions. Throughout the process, I relied on automated tests using tox, worked in a dedicated feature branch, and updated the same pull request in response to reviews rather than opening new ones. The most important thing I learned was how open-source development is iterative and collaborative, with review feedback playing a critical role in improving both correctness and maintainability. &lt;/p&gt;

&lt;p&gt;By engaging directly with the project maintainer through GitHub reviews and documentation links, I was able to resolve issues efficiently and align my work with project standards. &lt;/p&gt;

&lt;p&gt;This experience demonstrates a complete open source workflow from planning and implementation to review and refinement and the technical details documented here should help others understand how category metadata is handled in Open Web Calendar and similar ICS based projects.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>python</category>
    </item>
    <item>
      <title>Release 0.4- Progress</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Tue, 09 Dec 2025 00:52:52 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/release-04-progress-2cbk</link>
      <guid>https://forem.com/kkrishnan10/release-04-progress-2cbk</guid>
      <description>&lt;p&gt;For my Release 0.4 progress, I spent this week digging into the Open Web Calendar codebase to understand exactly where events are parsed, how ICS data is converted to JSON, and how the frontend scheduler loads and displays those events. I was able to add category extraction on the backend by pulling the CATEGORIES field from ICS files and preparing it for JSON output. I also started exploring the frontend code to find where events are loaded so I can attach the category filter UI and filtering logic. &lt;/p&gt;

&lt;p&gt;Even though some JS files were minified and harder to read, I kept narrowing down the correct source files and now have a clear path forward for adding the filter checkboxes and connecting them to the scheduler. My next step is to finish the frontend code, test everything together, and prepare the final PR. Overall, I’m on track with my plan and feel more confident with the structure of the project.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>json</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Release 0.4- Planning</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Mon, 08 Dec 2025 06:04:11 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/release-04-planning-40be</link>
      <guid>https://forem.com/kkrishnan10/release-04-planning-40be</guid>
      <description>&lt;p&gt;For Release 0.4, I decided to work on adding category-based event filtering to the &lt;a href="https://github.com/niccokunzmann/open-web-calendar" rel="noopener noreferrer"&gt;Open Web Calendar project&lt;/a&gt;. This feature will let users filter events by category using checkboxes, which makes the calendar easier to navigate when there are many different types of events. &lt;/p&gt;

&lt;p&gt;I chose this task because it is meaningful, visible to end users, and requires me to work across both backend and frontend parts of the project, which will help me grow as a developer. My approach is to break the work into clear steps: &lt;/p&gt;

&lt;p&gt;First update the ICS parser to read the CATEGORIES field, then include those categories in the JSON response, and finally build a simple UI on the calendar page that displays dynamic checkboxes and filters events through the scheduler API. &lt;/p&gt;

&lt;p&gt;Over the next weeks, I will implement each layer carefully, test with real ICS files, and refine the UI. My goal is to finish with a polished feature and a clean pull request that improves the project in a useful way.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Packaging and Releasing ContextWeaver for Lab 9</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Sat, 22 Nov 2025 03:20:29 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/packaging-and-releasing-contextweaver-for-lab-9-2e4n</link>
      <guid>https://forem.com/kkrishnan10/packaging-and-releasing-contextweaver-for-lab-9-2e4n</guid>
      <description>&lt;p&gt;For my lab, I worked on my repo &lt;a href="https://github.com/kkrishnan10/ContextWeaver/tree/main" rel="noopener noreferrer"&gt;ContextWeaver&lt;/a&gt; and I used Python’s packaging tools and published my project on TestPyPI using build and twine, since Python packages are all managed through &lt;a href="https://pypi.org/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt; and &lt;a href="https://test.pypi.org/project/contextweaver/" rel="noopener noreferrer"&gt;TestPyPI&lt;/a&gt;. The process was pretty detailed. I had to reorganize my code into a proper &lt;a href="https://github.com/kkrishnan10/ContextWeaver/tree/main/src/contextweaver" rel="noopener noreferrer"&gt;src/contextweaver&lt;/a&gt; structure, create a &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/pyproject.toml" rel="noopener noreferrer"&gt;pyproject.toml&lt;/a&gt; with all the metadata, bump versions every time I re-uploaded, build the package using python -m build, and then upload it with twine. &lt;/p&gt;

&lt;p&gt;I learned a lot about how strict packaging actually is especially versioning (you can’t reuse a version, or TestPyPI will reject it), and how the description shown on PyPI actually comes from your &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/README.md" rel="noopener noreferrer"&gt;README.md&lt;/a&gt;. My “aha” moment was realizing that I had to update the version and pull the changes locally before rebuilding, otherwise I’d keep uploading the wrong version. I didn’t need to change my code logic, but I did have to clean up my file structure and add installation sections to my README so it made sense for real users. &lt;/p&gt;

&lt;p&gt;For user testing, I asked my friend to follow only the README, and they immediately got confused about installation, Python version, and how to run the CLI. I took notes and updated the README to include installation (pip install), Python 3.10+ requirement, CLI examples, and troubleshooting. Now users can install my project with a simple pip install contextweaver, and they can run it using commands like contextweaver . -o snapshot.txt. Overall, the release process forced me to think about how a real user would experience my project, and updating the documentation made a huge difference.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Release 0.3 — Normalizing Unicode for Event Text</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Sat, 22 Nov 2025 03:11:10 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/release-03-normalizing-unicode-for-event-text-5e9p</link>
      <guid>https://forem.com/kkrishnan10/release-03-normalizing-unicode-for-event-text-5e9p</guid>
      <description>&lt;p&gt;For my second &lt;a href="https://github.com/niccokunzmann/open-web-calendar/pull/1022" rel="noopener noreferrer"&gt;PR&lt;/a&gt;, I worked on improving Unicode handling across event data, specifically addressing a &lt;a href="https://github.com/niccokunzmann/open-web-calendar/issues/946" rel="noopener noreferrer"&gt;bug&lt;/a&gt; where diacritics and accented characters were displaying incorrectly in event summaries, descriptions, and locations in &lt;a href="https://github.com/niccokunzmann/open-web-calendar/tree/master/open_web_calendar" rel="noopener noreferrer"&gt;Open Web Calendar&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;This issue affected international users whose calendars contained characters like á, ñ, ü, and ø. To fix this, I explored the ICS conversion process in &lt;a href="https://github.com/niccokunzmann/open-web-calendar/blob/master/open_web_calendar/convert/events.py" rel="noopener noreferrer"&gt;events.py&lt;/a&gt;, added a normalization function using Python’s unicodedata.normalize("NFC"), and made sure it applied consistently to all text fields before being passed to the frontend. This required reading through the ICS parser, learning how the project structures event data, and testing with sample ICS files that contained accented characters to verify the fix. &lt;/p&gt;

&lt;p&gt;Compared to my earlier assignments, this PR felt more like real open-source work, debugging a subtle data-handling issue, updating backend code, and manually validating changes across the UI. This contribution helped me get comfortable modifying a larger codebase and taught me how to approach encoding problems that don’t always produce obvious errors but have a real impact on user experience.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Release 0.3 — Fixing All-Day Events Displaying as Two Days</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Sat, 22 Nov 2025 03:04:51 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/release-03-fixing-all-day-events-displaying-as-two-days-1k9p</link>
      <guid>https://forem.com/kkrishnan10/release-03-fixing-all-day-events-displaying-as-two-days-1k9p</guid>
      <description>&lt;p&gt;For my first &lt;a href="https://github.com/niccokunzmann/open-web-calendar/pull/1021" rel="noopener noreferrer"&gt;PR&lt;/a&gt; in Release 0.3, I decided to fix an issue in the &lt;a href="https://github.com/niccokunzmann/open-web-calendar" rel="noopener noreferrer"&gt;Open Web Calendar&lt;/a&gt; project where all-day events were showing incorrectly as two-day spans. This &lt;a href="https://github.com/niccokunzmann/open-web-calendar/issues/940" rel="noopener noreferrer"&gt;bug&lt;/a&gt; had been reported by multiple users and required me to go deeper into the frontend event-rendering logic in &lt;a href="https://github.com/niccokunzmann/open-web-calendar/blob/master/open_web_calendar/static/js/calendar.js" rel="noopener noreferrer"&gt;calendar.js&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I started by running the project locally, comparing real ICS behavior, reading the DHTMLX scheduler documentation, and tracing how the app determines whether a start and end time represent a one-day duration. Eventually I discovered that ICS all-day events use an exclusive end date, which meant the calendar was interpreting them as starting at midnight on Day 1 and ending at midnight on Day 2. &lt;/p&gt;

&lt;p&gt;My fix adjusted the date-handling logic so that if both timestamps begin at 00:00, the end date is automatically shifted back by one day. I tested this using multiple ICS files and confirmed that the calendar now displays all-day events cleanly as a single day. This PR pushed me to analyze JavaScript code more deeply than I did in Release 0.2, and it helped me better understand how calendar systems handle date boundaries.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Lab 8- OSD 600</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Fri, 14 Nov 2025 22:02:24 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/lab-8-osd-600-43k2</link>
      <guid>https://forem.com/kkrishnan10/lab-8-osd-600-43k2</guid>
      <description>&lt;p&gt;For this lab, I set up GitHub Actions in my &lt;a href="https://github.com/kkrishnan10/ContextWeaver" rel="noopener noreferrer"&gt;ContextWeaver&lt;/a&gt; repo by creating a &lt;a href="https://github.com/kkrishnan10/ContextWeaver/tree/main/.github/workflows" rel="noopener noreferrer"&gt;workflow&lt;/a&gt; file that runs pytest every time I push to main or open a pull request, and it was actually helpful because I could see right away when I broke something in &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/src/scanner.py" rel="noopener noreferrer"&gt;scanner.py&lt;/a&gt; and when it got fixed. After that, I created a new branch and added more tests to my own project, then opened a &lt;a href="https://github.com/kkrishnan10/ContextWeaver/commit/64b94f2bb302f1ed65a735f13a2605e5c3cc9039" rel="noopener noreferrer"&gt;PR&lt;/a&gt; to make sure CI was working properly. &lt;/p&gt;

&lt;p&gt;For the partner part, I used &lt;a href="https://github.com/RiverDave/rust-cli-tool" rel="noopener noreferrer"&gt;rust-cli-tool&lt;/a&gt; repo, which was totally different from mine since it uses Rust and cargo test instead of Python and pytest. Writing a test in someone else’s project felt weird at first, but once I made a simple sanity test it was fine and it passed with their CI too. &lt;/p&gt;

&lt;p&gt;Overall, setting up CI made me realize how useful it is because it catches mistakes right away, and it really does stop you from accidentally pushing broken code. The main CI setup and testing across repos went smoothly and now I understand why teams rely on this so much.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>testing</category>
      <category>python</category>
      <category>github</category>
    </item>
    <item>
      <title>Lab 7 - Testing with pytest</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Sat, 08 Nov 2025 02:30:37 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/lab-7-testing-1o32</link>
      <guid>https://forem.com/kkrishnan10/lab-7-testing-1o32</guid>
      <description>&lt;p&gt;For Lab 7, I used &lt;a href="https://docs.pytest.org/en/stable/" rel="noopener noreferrer"&gt;pytest&lt;/a&gt; and pytest-cov in my repo &lt;a href="https://github.com/kkrishnan10/ContextWeaver/tree/main" rel="noopener noreferrer"&gt;ContextWeaver&lt;/a&gt; because they’re simple, popular, and well-documented tools for testing in Python. I added them to my &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/requirements.txt" rel="noopener noreferrer"&gt;requirements.txt&lt;/a&gt;, installed them in my virtual environment, and created a &lt;a href="https://github.com/kkrishnan10/ContextWeaver/tree/main/tests" rel="noopener noreferrer"&gt;tests&lt;/a&gt; folder with a &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/tests/conftest.py" rel="noopener noreferrer"&gt;conftest.py&lt;/a&gt; file so my test files could import modules from src. &lt;/p&gt;

&lt;p&gt;I started by writing unit tests for &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/tests/test_ignore.py" rel="noopener noreferrer"&gt;ignore.py&lt;/a&gt; to check how it handled default, &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/.gitignore" rel="noopener noreferrer"&gt;gitignore&lt;/a&gt;, and extra patterns, then added integration tests for &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/src/main.py" rel="noopener noreferrer"&gt;main.py&lt;/a&gt; to make sure the CLI worked correctly with different ignore options. &lt;/p&gt;

&lt;p&gt;At first, one of my tests failed because of how my pattern matching worked, which helped me understand how *.py behaves in subdirectories. Running coverage showed that ignore.py had 100% coverage, while the overall project had 23%, so I could clearly see what still needed more testing. &lt;/p&gt;

&lt;p&gt;I realized how much automated testing improves confidence in my code, especially for catching small mistakes early, and I will definitely keep using pytest for future projects.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>github</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hacktoberfest Final Week</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Fri, 31 Oct 2025 01:03:00 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/hacktoberfest-week-4-51jo</link>
      <guid>https://forem.com/kkrishnan10/hacktoberfest-week-4-51jo</guid>
      <description>&lt;p&gt;For my final Hacktoberfest contribution, I worked on &lt;a href="https://github.com/Seed-Pursuit/Hacktoberfest-2025-DSA/issues/18" rel="noopener noreferrer"&gt;Issue #18&lt;/a&gt; which was “Rotate Array by K Positions” in the &lt;a href="https://github.com/Seed-Pursuit/Hacktoberfest-2025-DSA" rel="noopener noreferrer"&gt;Seed-Pursuit&lt;/a&gt; repository. The issue didn’t have a full description, so I interpreted it as the standard DSA problem of rotating an array to the right by k positions. &lt;/p&gt;

&lt;p&gt;To prepare, I explored the repository’s structure and confirmed it was written in Java, then set up my local environment and created a new branch for the fix. I reviewed different rotation methods and chose the optimal reverse-based approach, which rotates the array in O(n) time and O(1) space. My implementation reverses the entire array, then the first k elements, and finally the remaining ones, ensuring all cases work even when k exceeds the array length. &lt;/p&gt;

&lt;p&gt;The final file, DSA/RotateArrayByK.java, includes a main() method for testing, where users can input n, the array elements, and k, to see the rotated output. Before coding, I researched similar solutions on GeeksforGeeks to verify my approach and syntax. The main challenge was understanding the repo’s submission style and ensuring my code matched its conventions. &lt;/p&gt;

&lt;p&gt;Once completed, I pushed my changes to GitHub and created &lt;a href="https://github.com/Seed-Pursuit/Hacktoberfest-2025-DSA/pull/33" rel="noopener noreferrer"&gt;Pull Request&lt;/a&gt;. This experience helped me improve my confidence in contributing to open-source projects, practice Git branching and PR etiquette, and apply algorithmic logic in a real project environment.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>github</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Code Reading Analysis – Repomix Ignore Feature</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Mon, 27 Oct 2025 18:31:50 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/code-reading-analysis-repomix-ignore-feature-mem</link>
      <guid>https://forem.com/kkrishnan10/code-reading-analysis-repomix-ignore-feature-mem</guid>
      <description>&lt;p&gt;For Lab 6, I studied how &lt;a href="https://github.com/yamadashy/repomix" rel="noopener noreferrer"&gt;Repomix&lt;/a&gt; implements its ignore functionality to learn from an established open-source project before extending my own tool. Repomix goal is to bundle repository content while automatically excluding unneeded files using patterns from .gitignore, configuration files, and default rules. &lt;/p&gt;

&lt;p&gt;While reading its source code, I focused on the modules responsible for loading ignore files, merging pattern lists, and testing whether a file should be skipped. I used GitHub Code Search and git grep to locate functions like load_gitignore(), merge_patterns(), and should_ignore(), and I also reviewed related tests and pull requests to understand how the maintainers verified their behavior.&lt;/p&gt;

&lt;p&gt;Through this code reading exercise, I learned that Repomix design is modular and extensible, it separates pattern gathering, normalization, and filtering into different components, which makes debugging and reuse easier. The feature also uses recursive matching for directory globs (**/) and negation handling (!pattern), concepts I later adapted in my own implementation. &lt;/p&gt;

&lt;p&gt;I realized how important small helper functions and clear naming conventions are when reading other people’s code. Reading “with a goal” focusing specifically on how patterns are loaded and applied helped me stay focused instead of getting lost in unrelated parts of the repository.&lt;/p&gt;

&lt;p&gt;Overall, examining Repomix taught me practical lessons in open-source code navigation and feature design. It showed me how to analyze real-world projects to guide improvements in my own work. This directly inspired the Git-Aware Ignore System I later wrote for my project &lt;a href="https://github.com/kkrishnan10/ContextWeaver" rel="noopener noreferrer"&gt;ContextWeaver&lt;/a&gt;, which merges default patterns, .gitignore entries, and user-provided globs into a unified filter. Reading Repomix’s code first made implementing this feature far easier and more intentional.&lt;/p&gt;

</description>
      <category>code</category>
      <category>git</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Lab 6: Writing the Git-Aware Ignore Feature in My Project</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Mon, 27 Oct 2025 18:14:28 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/lab-6-writing-the-git-aware-ignore-feature-in-my-project-5420</link>
      <guid>https://forem.com/kkrishnan10/lab-6-writing-the-git-aware-ignore-feature-in-my-project-5420</guid>
      <description>&lt;p&gt;After exploring how Repomix handled file-ignoring logic, I wrote the same type of feature in my own project, ContextWeaver. My goal was to make my repo &lt;a href="https://github.com/kkrishnan10/ContextWeaver" rel="noopener noreferrer"&gt;ContextWeaver&lt;/a&gt; automatically skip irrelevant files such as node_modules, build folders, and logs while scanning repositories. &lt;/p&gt;

&lt;p&gt;To achieve this, I created a new module called ignore.py and integrated it into &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/src/main.py" rel="noopener noreferrer"&gt;main.py&lt;/a&gt;. The &lt;a href="https://github.com/kkrishnan10/ContextWeaver/blob/main/src/ignore.py" rel="noopener noreferrer"&gt;ignore.py&lt;/a&gt; file merges default ignore patterns, .gitignore entries, and any custom globs provided through the --ignore flag. In the main script, these patterns are used by a helper function should_skip() that decides whether each file should be kept or excluded.&lt;/p&gt;

&lt;p&gt;I also added new CLI options such as --ignore, --no-default-ignores, and --verbose. When running the command "python3 src/main.py . --verbose", the program lists every file with “ADD” or “SKIP,” giving a clear view of what gets included. The resulting file list is saved to contextweaver_output.txt, making the tool more user friendly and Git-aware.&lt;/p&gt;

&lt;p&gt;This was my first time reading another project’s source code to learn a feature and then reimplementing it myself. It showed me how to adapt ideas while writing cleaner, modular code. The next steps are already planned in my Issues page: &lt;a href="https://github.com/kkrishnan10/ContextWeaver/issues/7" rel="noopener noreferrer"&gt;adding nested .gitignore support&lt;/a&gt;, &lt;a href="https://github.com/kkrishnan10/ContextWeaver/issues/8" rel="noopener noreferrer"&gt;handling negation patterns (!pattern)&lt;/a&gt;, &lt;a href="https://github.com/kkrishnan10/ContextWeaver/issues/9" rel="noopener noreferrer"&gt;benchmarking performance&lt;/a&gt;, and &lt;a href="https://github.com/kkrishnan10/ContextWeaver/issues/10" rel="noopener noreferrer"&gt;improving documentation&lt;/a&gt;. Through this lab, I learned how open source developers plan incremental improvements, file Issues, and build on one another’s work to make software evolve continuously.&lt;/p&gt;

</description>
      <category>git</category>
      <category>ignore</category>
      <category>repomix</category>
    </item>
    <item>
      <title>Week 3 – Adding a New API to the Public APIs Repository</title>
      <dc:creator>kkrishnan10</dc:creator>
      <pubDate>Mon, 20 Oct 2025 06:30:59 +0000</pubDate>
      <link>https://forem.com/kkrishnan10/week-3-adding-a-new-api-to-the-public-apis-repository-11p</link>
      <guid>https://forem.com/kkrishnan10/week-3-adding-a-new-api-to-the-public-apis-repository-11p</guid>
      <description>&lt;p&gt;For my third Hacktoberfest contribution, I decided to work on the &lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;Public APIs&lt;/a&gt; repository, which collects free and open &lt;a href="https://github.com/public-apis/public-apis/issues" rel="noopener noreferrer"&gt;APIs&lt;/a&gt; that developers can use for learning or building projects. It already had the Hacktoberfest topic, so it was a great choice for a simple yet meaningful contribution.&lt;/p&gt;

&lt;p&gt;I added a new entry for the Art Institute of Chicago API to the Art &amp;amp; Design category. This API provides free access to artworks and museum data, making it an excellent resource for anyone interested in art or cultural data projects. I updated the README.md following the project’s contribution rules, kept the description short, formatted the table correctly, and ensured the entry stayed in alphabetical order.&lt;/p&gt;

&lt;p&gt;The process taught me how strict formatting can be in large open-source repositories and how even a one-line addition needs to follow established contribution guidelines. I also learned how to use the contributor checklist to verify spacing, description length, and commit squashing before submitting.&lt;br&gt;
Once I pushed my branch and opened the &lt;a href="https://github.com/public-apis/public-apis/pull/4862" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;, GitHub showed that the repo already carried the Hacktoberfest topic, so the PR automatically counted toward my progress. Seeing my name appear among contributors felt rewarding—it reminded me that open source values every improvement, no matter how small.&lt;/p&gt;

&lt;p&gt;Next, I plan to explore a project where I can contribute a small code or configuration fix, continuing to move from documentation toward hands-on development tasks.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>github</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
