Software engineer, B.Tech CSE student at BIT Mesra (graduating May 2028), and Joint Secretary of ACM BIT Mesra for 2026–27. I ship software that real users depend on, and I fix bugs in open-source projects I don't maintain.
Looking for: SDE, forward-deployed and DevOps/platform internships and new-grad roles, in India or remote. Portfolio: playlikeboy.github.io · Resume: PDF (tailored: SDE · FDE · DevOps) · Email: sh20raj@gmail.com · LinkedIn · Peerlist
| Project | What I did | Evidence |
|---|---|---|
| Bitotsav '26 | Tech lead for BIT Mesra's festival, ~5,000 participants. Built registration, team and points workflows, the admin panel, and signed-QR entry that keeps working in no-network zones (Redis in front of PostgreSQL). Ran it live. | Write-up |
| SopKit | 605+ browser tools that process files client-side, with no uploads and no server compute. Built and run solo. 4.3M+ requests and 213K+ visits in 30 days. | Analytics post · repo |
| CampusLoop | Student-only network gated by college email (accepts the domains of 1,350+ Indian colleges): feeds, marketplace, polls, time capsules. Next.js, PostgreSQL, Cloudflare Workers, WebSockets. | repo |
| IndexFast | MCP server on Cloudflare Workers that submits URLs to Google, Bing and IndexNow from inside an IDE. TypeScript, Hono. | repo |
| Project | Pull request | Language |
|---|---|---|
| google-gemini/gemini-cli | #20778: cancelling a turn now also cancels the in-flight chat-compression request (AbortSignal threaded through the execution layers) | TypeScript |
| mofa-org/mofa | #1577: replaced a panicking unwrap() in cron schedule parsing with error handling · #1587, #1594: #[non_exhaustive] on public enums · plus 5 docs PRs |
Rust |
| preactjs/preact | #5331: allow the list attribute on every valid input type |
TypeScript |
| codex-team/editor.js | #3040: hide "Convert to" when there is nothing to convert to | TypeScript |
The gemini-cli and MoFA PRs were authored from my previous account, @SH20RAJ. That account no longer exists, so GitHub shows their author as "ghost". The gemini-cli merge commit carries my name.
In review: Go fixes in kmesh (a CNI nil-pointer panic, duplicate DNS refresh loops) and Jaeger (sampling config validation), plus Lexical, Radix UI and micromark. Each fix comes with a reproduced, filed issue (bug journal). Every number here is linked to its source on playlikeboy.github.io/proof. The full list refreshes automatically:
Upstream pull requests from @playlikeboy — 2 merged · 15 in review (+2 draft) · 17 issues filed (updated 2026-11-12, refreshed automatically)
Merged
| Merged | Repository | Pull request | What it does |
|---|---|---|---|
| 2026-11-01 | codex-team/editor.js | #3040 fix(inline-toolbar): do not show "Convert to" when there is nothing to convert to | Inline toolbar hides the "Convert to" entry when no conversion target exists. |
| 2026-10-25 | preactjs/preact | #5331 fix(types): allow list attribute on all valid input types | Type definitions allow the list attribute on every valid input type. |
In review
| Opened | Repository | Pull request | What it does |
|---|---|---|---|
| 2026-11-12 | traceroot-ai/traceroot | #3013 fix(worker): keep OTLP bytesValue attributes instead of dropping them | |
| 2026-11-12 | ParadevAI/Paradev | #9668 fix(desktop): hide favorite models the current session does not offer (draft) | Hides favorite models the current session does not offer (refs #9597). Draft until CI is green; CLA signature pending. |
| 2026-11-10 | kmesh-net/kmesh | #1989 fix(cni): print the previous result when CNI_ARGS cannot be loaded | kmesh-cni prints the previous CNI result instead of panicking with a nil dereference when CNI_ARGS cannot be parsed. |
| 2026-11-10 | kmesh-net/kmesh | #1987 fix(dns): key the refresh queue by domain to avoid duplicate loops | DNS refresh queue is keyed by domain, so repeated xDS updates for one hostname no longer start duplicate refresh loops. |
| 2026-11-05 | kmesh-net/kmesh | #1983 waypoint: compare dataplane-mode label case-insensitively like the daemon | kmeshctl waypoint compares the istio.io/dataplane-mode label case-insensitively, matching the daemon's enrollment check. |
| 2026-11-02 | codex-team/editor.js | #3041 fix(sanitizer): merge sanitize rules for the same tag instead of overwriting them | Sanitizer merges rules declared for the same tag instead of overwriting them. |
| 2026-11-02 | jaegertracing/jaeger | #10024 fix(sampling): Reject out-of-range params in file strategies | File-based remote sampling now rejects probabilistic params outside [0,1] and rate limits outside int32 at startup and on hot reload, instead of serving them to SDKs. |
| 2026-11-01 | meta/lexical | #9705 [lexical-react][lexical-playground] Feature: Draggable individual list items (draft) | |
| 2026-11-01 | kmesh-net/kmesh | #1977 utils: decide command success by exit status, not stderr | utils.Execute decides success by exit status; stderr output alone (e.g. iptables-legacy warnings) no longer counts as failure. |
| 2026-10-31 | asyncapi/website | #5880 fix: resolve edit links that 404 for bindings and specification pages | Fixes edit-page links that returned 404 for bindings and specification pages. |
| 2026-10-31 | asyncapi/studio | #1397 test(studio): add jest runner and unit tests for server-api and specification services | Adds a Jest runner and unit tests for the server-api and specification services. |
| 2026-10-25 | radix-ui/primitives | #4252 fix(Select): gate hideOthers on positioned state to avoid hiding active trigger (#4250) | |
| 2026-10-25 | radix-ui/primitives | #4251 fix(DismissableLayer): tie inside pointer capture mark to event identity (#4249) | |
| 2026-10-24 | meta/lexical | #9458 [lexical-markdown] Feature: Support ordered lists that use the ')' delimiter | |
| 2026-10-22 | micromark/micromark | #255 fix(core-commonmark): allow ordered list with leading zeros to interrupt paragraph | |
| 2026-10-22 | pingdotgg/t3code | #23775 fix(server): suppress redundant keybindings change emission on unchanged revalidation | |
| 2026-10-22 | meta/lexical | #9447 [lexical-markdown] Bug Fix: Preserve NodeState, mode and detail of text nodes with tabs on import |
Issues reported upstream (bugs found, reproduced and documented; several carry a ready fix)
| Opened | Repository | Issue | Status | Note |
|---|---|---|---|---|
| 2026-11-12 | mcp-use/mcp-use | #3083 docs/examples: add a Cloudflare Workers deployment example + v2 docs page for the TypeScript server | open | |
| 2026-11-12 | traceroot-ai/traceroot | #3012 bug(worker): OTLP bytes_value attributes are dropped at ingest (extract_attribute_value has no bytesValue branch) | open | |
| 2026-11-11 | kmesh-net/kmesh | #1992 CI: unit-test job runs ./pkg/... only, so ctl/ tests never execute | open | |
| 2026-11-10 | drizzle-team/drizzle-orm | #6667 [BUG]: drizzle-kit pull with camel casing turns FIRST_NAME into firstNAME since rc.5 | open | drizzle-kit pull camel-cased FIRST_NAME as firstNAME since rc.5. Fix with tests is ready on the fork branch fix/kit-pull-camel-screaming-snake; drizzle-orm limits PR creation to collaborators, so the branch is linked from the issue. |
| 2026-11-10 | kmesh-net/kmesh | #1991 kmeshctl secret create fails with AlreadyExists when the existing secret has no spi | open | |
| 2026-11-10 | kmesh-net/kmesh | #1990 mcp: get_mesh_namespaces misses namespaces labelled istio.io/dataplane-mode=kmesh (case mismatch with the daemon) | closed | |
| 2026-11-10 | kmesh-net/kmesh | #1988 kmesh-cni: CmdAdd panics with a nil dereference when CNI_ARGS cannot be loaded | open | |
| 2026-11-10 | jaegertracing/jaeger | #10116 ES/OpenSearch SPM queries grouped by operation are capped at 10 operations per service | open | |
| 2026-11-10 | jaegertracing/jaeger | #10115 [Bug]: Elasticsearch SPM call rates are low by (lookback-1)/lookback and zero when ratePer <= step | open | |
| 2026-11-10 | jaegertracing/jaeger | #10114 [Bug]: Prometheus metrics reader sends the wrong rate window for ratePer values that are not a single unit | open | |
| 2026-11-05 | kmesh-net/kmesh | #1982 kmeshctl waypoint: dataplane-mode label compared case-sensitively, disagrees with the daemon's enrollment check | open | |
| 2026-11-02 | jaegertracing/jaeger | #10023 [Bug]: File sampling provider serves out-of-range probabilistic and ratelimiting params | open | |
| 2026-11-01 | kmesh-net/kmesh | #1980 pkg/utils: HashName maps are read by the dual-engine bpf dump while the workload processor writes them (concurrent map crash) | open | |
| 2026-11-01 | kmesh-net/kmesh | #1979 mcp: config_dump tool returns 404 when the optional mode argument is omitted | closed | |
| 2026-11-01 | kmesh-net/kmesh | #1978 pkg/dns: repeated AddDomainInQueue calls for one hostname start duplicate refresh loops that never stop | open | |
| 2026-11-01 | kmesh-net/kmesh | #1976 pkg/utils: Execute reports failure whenever the command writes to stderr, even on exit 0 | open | |
| 2026-10-21 | json-schema-org/website | #2576 🐛 Bug: Headings with inline code or formatting produce truncated anchor IDs, breaking TOC and internal links | closed |
Languages: TypeScript, JavaScript, Go, Rust (contributions), Python, C++, SQL, Bash Backend & data: Node.js, Hono, Express, FastAPI, PostgreSQL, Redis, Drizzle, WebSockets Infra: Docker, GitHub Actions, GitLab CI, Cloudflare Workers, Linux AI: OpenAI / Claude / Gemini APIs, RAG, vector search, Model Context Protocol
In October 2026 I moved my work from @SH20RAJ to this account. About 190 repositories are public here. Most are older experiments and libraries I no longer maintain; the pinned repositories and the projects above are the ones to look at. The complete archive is in the sh20raj-backup org and on GitLab. Pull requests from before the move show as "ghost" on GitHub.
Elsewhere: Dev.to · YouTube (StackShade) · npm · Codeforces


