Skip to content

Working inside codebases I did not design.

Every entry below is a pull request I wrote for someone else's project. Forks are not contributions and are not listed, and neither are pull requests that were closed without merging. Merge status is checked against the GitHub API rather than assumed.

Merged
6
Open
23
Projects
9
First PR
2021

Counts cover 2026 onward. The 6 docs pull requests from 2021 and 2022 are listed separately at the end. Status verified 2026-11-12.

PictoPy

AOSSIE's desktop photo gallery, which tags faces and objects on the device. Tauri, React and a Python backend.

6 merged6 open
  1. MergedJul 2026

    Remove stale face clusters after folder deletion

    Deleted folders left their face clusters visible in the gallery, and clustering never started on a first tagging pass. Four independent causes behind one report: a bootstrap gap in the incremental clustering branch, a missing HAVING filter that kept empty clusters queryable, a return-shape bug that made recluster raise before it could clear them, and a React Query cache tag that never invalidated.

    • Python
    • SQL
    • React Query
    • Debugging
    +392 −2 · 5 files
    AOSSIE-Org/PictoPy #1392
  2. MergedJul 2026

    Accessibility and controls-visibility for the video player

    The player's progress bar was invisible to assistive technology and its controls hid themselves while paused. Exposed the seek bar as a real slider with keyboard seeking, gave every control a state-aware label, and made hidden controls non-interactive rather than merely transparent.

    • TypeScript
    • React
    • Accessibility
    • Testing
    +290 −36 · 3 files
    AOSSIE-Org/PictoPy #1374
  3. MergedAug 2026

    Run lint checks without releasing the gated CI jobs

    Fork pull requests need maintainer approval, and that approval is all-or-nothing, so a 44-second lint job could never run without also releasing the expensive build jobs. Moved lint to its own pull_request_target workflow, hardened with empty permissions, no secrets, an explicit head checkout without credentials, and an install that runs no scripts.

    • CI
    • GitHub Actions
    • Supply-chain safety
    +62 −37 · 3 files
    AOSSIE-Org/PictoPy #1442
  4. MergedJun 2026

    Fix zoom behaviour that only broke in production builds

    Scroll-to-zoom fell back to the library default in production because the custom wheel listener depended on an internal wrapper that was not always mounted on the first effect run. Attached the listener to a container the component owns instead, so zoom anchors to the cursor only on axes that actually overflow.

    • TypeScript
    • React
    • Production debugging
    +2309 −499 · 12 files
    AOSSIE-Org/PictoPy #1295
  5. MergedMay 2026

    Auto-close inactive merge-conflicted pull requests

    Maintainers were manually chasing pull requests that had gone stale behind merge conflicts. Added a workflow that closes them once they have been conflicted and untouched long enough to be abandoned.

    • CI
    • Maintainer tooling
    +58 −0 · 1 file
    AOSSIE-Org/PictoPy #1289
  6. OpenJun 2026

    Run global reclustering as a background job

    The frontend aborted every request after ten seconds, so reclustering a large library failed in the UI while the backend kept running to completion. Moved reclustering to a polled background job that refuses to start a second pass while one is running, and gave the slow search endpoints their own timeout.

    • Python
    • React
    • Background jobs
    +888 −88 · 14 files
    AOSSIE-Org/PictoPy #1349

Plane

An open-source project management tool, used as an alternative to Jira and Linear.

3 open
  1. OpenNov 2026

    Keyboard selection in selects without a search field

    Twenty-seven selects, including work item priority, member role and module status, opened with Enter and then ignored every navigation key, because base-ui drives list navigation from a search input these selects do not have. The select now moves focus to the list when there is no search field, with tests that fail before the change.

    • TypeScript
    • React
    • Accessibility
    • Testing
    +143 −3 · 5 files
    makeplane/plane #10232
  2. OpenNov 2026

    Keep the mobile calendar's selected day on screen

    On mobile, moving to another month or week kept the old selected day, so the list under the calendar went empty and quick add created work items on the wrong date. The selected day is now derived from the range on screen, including weeks with hidden weekends, and was checked step by step across every navigation control.

    • TypeScript
    • React
    • Mobile
    +27 −6 · 1 file
    makeplane/plane #10223

Layer5

The Layer5 community website, in the middle of a move from Gatsby to Hugo.

1 open
  1. OpenNov 2026

    URL inventory and per-collection checks for the Hugo migration

    Moving the Layer5 site from Gatsby to Hugo needed a way to tell which live URLs the new site still serves. Built an inventory of all 1,483 URLs from the sitemap, the redirects and the deployed build, and a CI check that reports what is missing per collection, so each collection can become a hard gate once it is migrated.

    • JavaScript
    • CI
    • Hugo
    • Site migration
    +397 −25 · 8 files
    layer5io/layer5 #8337

Jaeger

The web UI for Jaeger, the CNCF distributed tracing platform.

1 open
  1. OpenNov 2026

    Correct screen reader roles for expand toggles

    Expand and collapse controls in the trace view used role="switch", so screen readers announced them as on/off switches. Moved them to buttons with aria-expanded, and compared Chrome's accessibility tree before and after.

    • TypeScript
    • React
    • Accessibility
    +75 −61 · 16 files
    jaegertracing/jaeger-ui #4718

Joplin

The templates plugin for Joplin, the open-source note-taking app.

4 open
  1. OpenOct 2026

    Fix a regex that lost its whitespace class in a template literal

    The pattern that finds special variables was built in a template literal, where \S collapses to a plain S, so a variable named my_template_title was mistaken for template_title and using the template threw an error. Escaped it, removed the lint suppression that had been hiding the warning, and added a regression test.

    • TypeScript
    • Regex
    • Testing
    +30 −2 · 2 files
    joplin/plugin-templates #181

Rocket.Chat

An open-source team chat platform.

3 open
  1. OpenJun 2026

    Fix DeepL attachment translation returning 403

    Attachment translation authenticated with DeepL's deprecated auth_key query parameter, which the API had stopped accepting. Switched it to the header-and-POST method the rest of the integration already used.

    • TypeScript
    • API integration
    +9 −1 · 2 files
    RocketChat/Rocket.Chat #41121

OpenWISP

Open-source network management for routers and Wi-Fi: an Ansible role and the Python libraries behind it.

3 open
  1. OpenJul 2026

    Keep the Django log owned by the web server user

    The cron jobs ran from root's crontab, so when the Django log rotated the new file belonged to root, and every process running as www-data then failed at startup. Moved the jobs to the application user, created the log ahead of time with the right owner, and added regression tests for both.

    • Ansible
    • Linux permissions
    • Provisioning
    +99 −0 · 3 files
    openwisp/ansible-openwisp2 #632

GoogleTest

Google's C++ testing framework.

1 open
  1. OpenJun 2026

    Flags to suppress individual startup notes

    GoogleTest prints filter, shard, and shuffle notes at startup with no way to silence them individually, which makes long filter strings drown the output. Added three independent boolean flags, each defaulting to the current behaviour.

    • C++
    • Testing
    +246 −9 · 11 files
    google/googletest #4989

Personal open source

My own public repositories. A different thing from contributing to a project you did not start, so they are counted separately.

  • ChronoOS

    Rust

    A Rust no_std x86_64 hobby operating system, documented down to which claims are runtime-verified.

  • TensorTrail

    Python

    A NumPy-backed neural network framework with a readable autograd engine and 137 tests.

  • ASCII Camera

    TypeScript

    A real-time webcam-to-ASCII renderer, MIT licensed with contribution guidelines.

View all repositories

Have an interesting problem?

I am most useful on the ones that cross a boundary: a product decision that turns out to be a data-model decision, or a bug that only reproduces in production. If that sounds like yours, I would like to hear about it.

vanshajpoonia06@gmail.com