Things I've Built

Everything I build, all of it open source on GitHub: 74 repositories so far. The tools I still use come first, then fixes I've sent upstream to open source projects I rely on, then the things I built at hackathons, most of them live. The rest are exercises and experiments, and they stay on GitHub.

Tools

  • BrandPulseWatches Reddit, Amazon, YouTube, the Play Store and Indian news for your brand, and raises an alert with a reply already drafted in your voice when a thread starts to blow up.Go
    Catches brand crises before customers do
  • open-redisSpeaks RESP2 so any Redis client works. Strings, lists, key expiry and pipelining, with no dependencies beyond the Go standard library. Runs at 80 to 90 percent of real Redis throughput in redis-benchmark.Go
    A Redis-compatible server written from scratch in Go
  • MacroscopeLive ↗A mobile-first PWA: tap what you ate, watch your remaining macros, and let the “eat next” engine fill your biggest gaps without blowing calories. Tracks sleep, training and weight with streaks.TypeScript
    Macro and habit tracker that tells you what to eat next
  • HeyDotLive ↗Say “Hey Dot” and it reads your screen with a local vision-language model and speaks back a short answer. No cloud APIs, no data leaving your machine.Python · 1★
    A voice assistant that never leaves your laptop
  • PostPilotA Chrome extension that drafts a post with images and tags, then publishes it to several platforms at once and keeps a history of everything sent.TypeScript · 1★
    Write once, post to LinkedIn, X and Dev.to
  • RecordScrapeRecord clicks in a real browser, pick elements visually, then replay the session headless on a schedule. Exports JSON or CSV from a Flask dashboard.Python · 23★ · 1 fork
    Record a browser session once, scrape it forever
  • RecallEnginePoint it at a JSON file and search it with boolean queries, BM25, TF-IDF, local embeddings or a hybrid of both, as a library, a CLI or an HTTP API.Python · 17★ · 10 forks
    Keyword, BM25, semantic and hybrid search from one import
  • PowerDialerA Chrome extension that walks Salesforce Lightning and extracts leads, contacts, accounts and opportunities into one clean view, with their cross-object links.JavaScript
    Pulls CRM records straight out of Salesforce

Upstream Contributions

  • GoMy C.GoString(nil) docs change is merged into Go. In review: without -o, go build -buildmode=c-shared on Windows named the DLL with no extension, and renaming it afterwards does not help because the name is baked in at link time, so it now defaults to .dll. With cgo disabled, a failed build now names the files that were silently dropped. go env GOGCCFLAGS no longer prints a temp directory that changes on every run. And a pattern like .../../ is rejected instead of quietly turning into a different one.5 CLs
    Windows DLL names, cgo build errors, go env output and package patterns in the go command
  • CloakBrowserHumanized clicks missed elements off-screen horizontally because scroll-into-view only moved the y axis. Separately, several browsers launched at once on a fresh machine corrupted the shared install; each now extracts into its own staging folder and renames it into place, fixed across the Python, JS and .NET clients. Both fixes are merged into CloakBrowser.2 PRs
    Humanized clicks on wide pages, and safe parallel first launches
  • NasikoCapability generation panicked on agent manifests with multi-byte characters. The other four: the CLI now validates A2A 1.0 AgentCards, prints workflow steps 1-based so --edit-step edits the right one, and parses the repo list in the github clone picker. The serialization tests also build again.5 PRs
    A server crash on non-English manifests, and four more fixes
  • NushellIn Nushell, update cells was the odd one out: you named the columns to change with a --columns list, while select, reject and the into commands take them as plain arguments. It now takes them as rest arguments and --columns is deprecated, still working with a one-time warning and merging with any rest columns. Empty lists and spreads still mean "update nothing", and integer column names coerce the same way either way. Merged into Nushell.1 PR
    update cells takes its columns like select and reject do
  • AvoIn Avo, the Rails admin framework, clicking Select All on a paginated table showed an overlay wider than the table, so it scrolled sideways into empty space; I sized it to fit. Actions with a polymorphic belongs_to field only received the type in handle and silently dropped the id; both now come through. The media library blob page crashed with a 500 when the record a file was attached to had been deleted; it now shows the record type and id instead. Edit pages with file fields looked the record up again on every read, 17 times for a post with a cover; they now do it only when an upload is pending, taking that page from about 190ms to 43ms, and association frames stop loading the parent record twice. Icons read and parsed their SVG file on every render; avo-icons now reuses the rendered markup. I also stopped a generator spec from deleting the dummy app's committed files on every test run. Since then, forms warn before you leave with unsaved changes, fields gained hide_if_blank and autofocus options, has_many fields a per_page option and has_one fields a linkable one, array resources show their record count, and badge fields edit as a select on forms. On the fix side, actions with a belongs_to field no longer crash when several records or none are selected, plugin field types work in the avo_field helpers, Go back from a belongs_to link returns to the index you came from, and a flaky nested belongs_to spec stopped failing CI on every pull request. The latest batch lets actions hide their confirm or cancel button, falls back to the model's attribute translations for field labels, adds link_to_record on number and date columns, shows date picker month and weekday names in the app's locale, and makes tags fields in select mode fetch suggestions again after a value is picked. All 22 are merged into Avo.22 PRs
    Edit page performance, unsaved change warnings, new field options and action fixes
  • SupabaseIn supabase-py, any auth event other than sign-in or token refresh reset the database, storage and functions clients to the anon key, even while the user was still signed in. After update_user or an MFA verify, row level security hid the user's own rows and aal2 policies never applied. I made every event that carries a session keep its token, reproduced it against a local Supabase stack before and after, and Supabase merged it. Realtime in supabase-py went silent for good when the server closed the socket normally, while still reporting itself connected; it now reconnects. S3 downloads in Supabase Storage now honour If-Match, so a file overwritten mid-download no longer comes back half old and half new; that fix is merged too. And storage.info() in supabase-js returns the metadata keys you uploaded unchanged, instead of turning user_id into userId.4 PRs
    User tokens after MFA, silent realtime, mixed S3 downloads and renamed storage metadata
  • CrushCrush, Charm's AI coding agent, capped bash tool output at 30k display columns. NUL and other control bytes are zero columns wide, so running cat on a binary file or a SQLite database skipped truncation entirely and sent the whole file to the model; 1 MiB of NULs came back untouched. The budget now counts grapheme clusters, and the head and tail are cut on cluster boundaries so an emoji is never split.1 PR
    Binary output no longer slips past the bash tool's output limit
  • CobraCobra, the Go CLI framework behind kubectl and the GitHub CLI, prints a "Completion ended with directive" line to stderr during shell completion. In programs that point stderr at stdout, that line landed after the directive, and the shell scripts read the last stdout line as the directive, so completion broke. The line is now skipped when stderr is stdout, with a test that fails before the fix. In review.1 PR
    Shell completion no longer breaks when stderr goes to stdout

Hackathon Builds

  • ComplaintBuddy AITell it your complaint and an AI agent calls the company, explains the problem, and keeps trying until you get a refund or replacement, with live progress as it works. I led Team OnCall Engineers.Winner · CodeClash 2.0 · 3★
    An AI that phones customer service for you
  • PocketPharmaLive ↗Photograph a medicine and Gemini Vision identifies it, then scraping pipelines find generic alternatives with the same formula. 96% image matching accuracy over 200+ test images, and 40 to 70% potential savings for users.2nd · Live the Code 3.0
    Snap a medicine, find its cheaper generic
  • Sustainable MilesLive ↗Book an EV cab or bus for up to 70% less than regular transport, then earn most of the fare back as reward points on the Diamante blockchain to spend on your next ride. Built with Team Debug Squad at InnovateX 2024, DTU.Top 10 & Special Mention · InnovateX · 1★
    Book eco-friendly rides for 70% less
  • Legal SaathiLive ↗A RAG system with multi-agent orchestration that gives cited answers on the BNS and BSA acts, plus a Twilio call bot with conversation memory for legal help over the phone. Under 2.5s responses and 92% factual accuracy. Demoed live at Mastercard Gurugram to 20+ attendees.Top 15 · Code the Cubicle 3.0
    Indian law, answered by chat or phone call
  • SheScapeBuilt at Code for WIE 3.0, MSIT New Delhi.3rd & Top 10 · Code for WIE 3.0
    A women's safety platform
  • WearWiseLive ↗Combines smartwatch vitals like SpO2 and HRV with your symptoms, then writes a diagnostic report with source citations. 94% retrieval accuracy with ChromaDB and answers in under 1.3s. Demoed live at Microsoft Gurugram to 20+ attendees.Top 10 · Code for Bharat
    Diagnoses your health from your smartwatch
  • Audily AILive ↗Paste a video and get its knowledge back as a short text or audio summary, minus the hour of watching.Hackathon build · 3★
    YouTube videos, summarised into audio and text
  • SuperVisionLive ↗People with ADHD and dyslexia struggle to read for long without drifting. SuperVision paces text so you can read up to 10x faster, deployed on Cloudflare Workers with a video demo.Hackathon build
    Read anything up to 10x faster, built for ADHD and dyslexia
  • SpeechLingo AITranslates video into other languages within minutes using IBM Watson, built for a hackathon on accessible education in rural areas.Hackathon build · 3★
    Translates videos into local languages in minutes

All 74 repositories on GitHub →