Personal Builds

The Lab

Things I build to answer a question rather than to ship a feature. Every number below is measured — from an evaluation report, a metrics file, or a test run — which means some of them are unflattering. The planner in the tax advisor made hard questions better and medium ones worse, and that result is on the page because it is the interesting part.

These repositories are private — happy to walk through any of them on request.

7
Projects
300+
Tests Written
2024—26
Active Period

01
2026
Active

India Tax Advisor AI

Multi-agent tax planning for Indian filers

Indian taxpayers juggle two regimes, 15+ deduction sections, and capital-gains rules that changed mid-2024 — most calculators handle one dimension at a time. This is a conversational agent that takes a full financial picture in natural language, decomposes it into sub-tasks, routes each to a specialist sub-agent with the right calculator tools, and synthesizes one answer in a single turn.

Routing is deterministic, not LLM-guessed. The intent classifier extracts structured keys (80c, capital_gain, hra) and rules map them to sub-agents, which eliminates routing hallucinations. Sub-agents write to a shared blackboard rather than passing messages, and required tax rules are pre-fetched into the prompt before the model reasons — because LLMs forget to call tools.

+12 pts
Planner lift, hard questions
67
Eval cases
8
Sub-agents
132
Source files
LangGraphLangChainFastAPIMCPMongoDBChainlitOpenRouter
02
2026
Active

Voice Agent

Outbound voice AI where the domain is config, not code

A real-time outbound calling agent that holds a natural spoken conversation, extracts entities mid-call, and scores the lead at the end. Persona, knowledge base, intent taxonomy, and scoring rubric all come from a JSON file — switching from appointment confirmation to property qualification is a config change, not a rewrite.

Two telephony providers and two entirely different voice stacks sit behind one AgentProvider contract — a hosted all-in-one, or a composed pipeline of streaming STT to LLM to self-hosted TTS. LLM tokens flush to TTS at sentence boundaries so speech starts before the reply finishes generating, and barge-in cancels the in-flight turn on voice activity. The house rule: any path that can degrade a call without raising must emit a countable event.

0.46s
Median to first sentence
157
Tests
8.7k
Lines of code
2×2
Provider matrix
FastAPIWebSocketsTwilioTelnyxDeepgramOpenRouterChatterbox TTS
03
2026
Active

The Vault

An LLM-maintained knowledge base wired into every session

Not an app — a working system for how research gets retained and reused across projects. An Obsidian vault where the agent is the librarian: raw material lands in an inbox, gets compiled into cross-linked wiki articles, and becomes available to every future session in every other repo.

Three parts. A compile workflow (CLAUDE.md defines routing, mandatory takeaways, wikilinks, two-level indexes). A custom Agent Skill that fires in any repo and consults the vault before fresh research — and encodes its own anti-patterns: don't treat it as gospel, verify load-bearing claims, don't force a connection. And a loop that closed: the voice-AI topic is research that fed the Voice Agent above, and three of its articles were written back from that build's own measured history — baselines by host, seven live-call failure modes that raised no exception, and prompting when every character is spoken aloud.

48
Articles
74k
Words
6
Domains
1
Cross-project skill
ObsidianClaude CodeAgent SkillsMCPGitMarkdown
04
2026
Active

JobPilot

An agentic pipeline built as a custom MCP server

A command-center for a structured search process: ingest postings, score fit, generate tailored documents, and enforce follow-ups deterministically rather than relying on the model to remember. Built against a written PRD with numbered requirements and phase acceptance criteria.

The interesting half is that state lives in SQLite behind a custom 10-tool MCP server — log_application, get_follow_up_queue, get_funnel_stats, check_seen_posting — so the agent queries and mutates a real schema instead of re-reading files. Document rendering goes through Puppeteer with per-market CSS templates; scouting runs on a launchd schedule.

10
Custom MCP tools
5
Tables + migrations
MCPNode.jsSQLitePuppeteerExpresslaunchd
05
2024
Shipped

Legal Document AI Enrichment

LLM enrichment over Indian legal and tax judgments

A batch pipeline that reads court and tax judgments and generates SEO titles, keywords, and issue-wise headnotes, writing structured results back into MySQL. A companion PHP stage handles the ingest problem: converting oversized court PDFs into clean structured documents.

Judgments routinely exceed the context window, so the pipeline budgets tokens explicitly with a tokenizer before dispatch and chunks around document structure rather than character counts. Generation runs in child processes so a slow or failed document can't stall the batch.

~12,100
Records processed
3
Batch runs
24
Commits
Node.jsExpressOpenAIMySQLSwaggerPHP
06
2025
Shipped

ProudStreak

A habit tracker that shipped, with the infrastructure to match

A mood-coded calendar for building a streak of good days, plus a Pomodoro focus timer. Anonymous-first onboarding — the calendar works with no signup, storing locally until a usage threshold prompts registration.

Dual-mode auth was the design constraint: email/password and Google OAuth both issue JWTs, with a linking table keyed on provider so one person isn't two accounts. Deploys build a Docker image in CI, ship the tarball straight to EC2 over SSH with no registry, and pull secrets at runtime from SSM Parameter Store via an instance role — no credentials on disk.

Co-built with Rohit Ghosh — my focus was architecture, backend, and deployment infrastructure.

142
Frontend tests
3
Services
136
Source files
Next.jsRedux ToolkitExpressPrismaPostgreSQLDockerAWS EC2
07
2025
Paused

FinanceGPT

Both sides of MCP — server and client

A financial research assistant that answers market questions by pulling live quotes, scraping filings, and searching the web. Built mainly as a proof of the full MCP round trip.

Rather than calling tools directly, it stands up its own stdio MCP server exposing market data, scraping, and search — then consumes it through a LangChain MCP client. A provider factory routes across Gemini, Anthropic, and OpenAI behind one interface, so the model is a config value.

FastAPIMCPLangChainMongoDByfinance

Want the long version?

Happy to go deeper on any of these — the architecture decisions, the evaluation results, or the parts that did not work.

Get in touch →See professional work