Backend engineer in the making. I build systems from the protocol up, then measure them and fix what breaks.
Scaler School of Technology · BITS Pilani (CS, 2028) · Bengaluru
☝️ Not a mockup. Every Monday, CI compiles my HTTP/1.1 server, starts it, runs that curl, and re-renders this card from the real response.
Rendered from the benchmark results committed in each repo (bench/results/). Apple M4 Pro, Docker, wrk and k6. Local numbers for comparing designs, not production capacity.
| Project | The interesting part | |
|---|---|---|
| ⚡ | HTTP/1.1 Server Java 21 · raw sockets · 47 tests |
A bounded worker pool with 503 load shedding vs virtual threads: keep-alive connections pin platform threads, so virtual threads cut p99 by 12× |
| 🔎 | Search Typeahead TypeScript · SQLite · 67 tests |
Precomputed top-K at every trie node makes lookups O(prefix length); the cost is memory, measured at 4.4 GB for 1M terms |
| 🛡️ | ShieldWall Gateway FastAPI · Postgres · Redis · 88 tests |
PII masked before it leaves, restored mid-stream across SSE chunks; budgets reserved atomically in a Redis Lua script |
| 🧠 | Smarana Chrome MV3 · FastAPI · pgvector |
On-device embeddings and AES-256-GCM, with hybrid search fused by Reciprocal Rank Fusion |
🔬 Architecture and the bugs I fixed (click to expand)
⚡ HTTP/1.1 Server
flowchart LR
C([client]) -->|TCP| A[accept loop]
A --> Q{{bounded queue}}
Q -- full --> X[503 + Retry-After]
Q --> W[platform pool or<br/>virtual threads]
W --> P[byte parser<br/>Content-Length / chunked]
P --> H[handlers]
Fixed with a failing raw-socket test first: a lowercase content-length desynced the connection, a UTF-8 body swallowed the next request, a negative Content-Length dropped the socket, and slow clients could pin every worker.
🔎 Search Typeahead
flowchart LR
K([keystroke]) --> R{consistent-hash ring}
R --> S1[(cache shard)] & S2[(cache shard)] & S3[(cache shard)]
S1 & S2 & S3 -- miss --> T[trie · top-10 per node]
W([search]) --> B[write-behind buffer] -->|batched txn| D[(SQLite)]
Fixed 10 bugs, including buffered searches lost at the hour boundary, c++ and c-- colliding in one trie node, and a half-committed batch on a failed flush. A brute-force property test caught a trailing-space bug.
🛡️ ShieldWall Gateway
flowchart LR
C([client]) --> K[API key · sha256] --> M[mask PII] --> B[Lua budget reserve] --> U[(provider)]
U -->|SSE| S[unmask across chunks] --> C
S -. reconcile .-> B
S -. log .-> Q[[Celery]] --> P[(Postgres)]
Proved a check-then-act budget race with 50 concurrent requests (the budget fits 7; now exactly 7 succeed). Also fixed placeholder collisions that returned the wrong user's PII.
Mentored by Naomi Carrigan in the freeCodeCamp × NHCarrigan Summer 2026 cohort.
This page builds itself: render-profile.yml compiles and curls my server, reads the benchmark files from my repos, and queries the GitHub API for merged PRs. Then render.py (standard-library Python) draws the cards. No third-party stat widgets, so nothing on this page can go down.

