- Engineered a prototype to capture real-time traffic data from IoT sensors and cameras.
- Applied SAC reinforcement learning for adaptive traffic-signal control, improving throughput ~75% and doubling average vehicle speed in rush-hour simulations.
- Cut average trip time ~30% versus fixed-timer baselines across 4 SUMO scenarios, with a web dashboard for live KPI monitoring.
A builder who cares about the whole system, from first commit to a running server.
I started programming because I wanted to understand how things actually work, then kept building until the process itself became the thing I enjoyed most.
Most of what I know, I learned by building and breaking real things: shipping features, tracing bugs to their root, standing up servers, and cleaning up my own mistakes. Somewhere along the way the interesting part stopped being individual snippets of code and became the system around the work, how context flows, how decisions get recorded, how something moves from an idea to a running service.
I think in workflows. I keep a centralized context so my tools don't repeat each other, I document decisions as I make them, and I treat security and correctness as steps I don't skip. I use AI to move faster, but I own the final code, its quality, its security, and whether it actually holds up.
What I can say plainly: I know how to organize real engineering work, deploy it, and keep it running, and I get sharper with every project.
A few things worth showing, not everything I've built.
Fewer projects, more depth. Each is here for the judgment and engineering it took, not to pad a list. Open one to read the short case study.

The problem
Most simple combat agents are scripted or reward-blind: once you find a pattern they stop adapting and become memorization. Mahoraga is an environment built to make adaptation, reward shaping, and agent behavior inspectable turn by turn, not a black box.
What made it interesting
A FastAPI backend exposing reset / step / model-status served a 4-bit-quantized Qwen2.5-3B LoRA agent with a rule-based fallback, deployed to Hugging Face Spaces via a multi-stage Docker build. The agent was fine-tuned with an iterative reward-weighted SFT loop (Unsloth + TRL) using rejection sampling and expert-trajectory seeding over five training rounds.
National in-person finalist, backed by a compact, testable environment with 33 unit tests over its mechanics and reward logic.
View on GitHub
The problem
The knowledge to answer "why did pump P-204A fail twice this month?" is scattered across manuals, work orders, inspection reports, SOPs, and incident logs. Finding it means digging through all of them by hand, and a wrong answer on a plant floor is expensive.
What made it interesting
A FastAPI backend doing GraphRAG: pgvector semantic search over ingested documents plus a NetworkX knowledge graph with multi-hop asset → document → failure links. Three grounded agents (root-cause, compliance-gap, lessons-learned), a no-source-no-answer guardrail, and retrieved text treated as untrusted input to defend against prompt injection. Every response is structured JSON: answer, confidence, citations, missing evidence, and next actions. Embeddings run locally; the LLM is swappable between a free hosted tier and local Ollama.
Measured with RAGAS: 100% top-5 retrieval hit-rate, 0.82 answer faithfulness, ~3.9s to answer versus ~12 minutes of manual search. Built at a hackathon by two; I led the backend and applied-AI core.
View on GitHub Live demo
What it does
A full community toolkit: music, leveling, moderation, and admin tooling, maintained continuously in production rather than shipped once and forgotten. Long enough in service that the interesting work became keeping it fast and stable under real load.
What made it interesting
A Lavalink / wavelink music pipeline, and a migration of core database access from synchronous psycopg2 to async pooling (aiopg / asyncpg) to stop the event loop from blocking. Leveling renders rank cards on the fly with Pillow, and a hot cog load / unload / reload interface allows updates without downtime.
Six years in production across 25+ cogs and 70+ commands, still serving its community today.
View on GitHubWhere I have worked, and what I have earned.
A development system, not a pile of AI tools.
Ignoring AI in 2026 is a mistake. Leaning on it without research or judgment is a bigger one. So I do both, I understand the problem myself, then use AI to move fast on the parts that shouldn't be slow.
I do the thinking first. I dig into the problem, read the docs, and form a direction myself. I don't outsource understanding, that's the part that's actually mine.
Then AI does the heavy lifting. With sharp prompts and full project context, I use it to accelerate the build, not to decide what to build or to hand me code I can't read.
Every tool shares one brain. Claude, Antigravity, and Codex all read the same context and write to the same log, so nothing repeats and nothing gets lost between them.
My main driver: coding, architecture, and reasoning across the whole system. Most of the build runs through here.
My Gemini-powered agentic IDE for frontend and UI. I reach for it on interface work, visual iteration, and a fresh second angle.
Scoped implementation and quick edits: an extra set of hands and a cross-check on focused tasks.
A shared decision log. Every action, fix, and issue gets written down, so any tool, or me next week, can pick up exactly where things left off.
One tool can request another's opinion; the answer lands in the same log. No repeated work, no wasted tokens, no lost reasoning between tools.
Before anything is published I review the diff for exposed secrets and obvious risks. Secrets live in gitignored env files, never in the repo.
The final gate is me reading the code, confirming it does what it should, then committing and deploying. The tools accelerate; the judgment stays mine.
I use AI to cut repetition and raise throughput, but I keep ownership of the final code, its security, and its quality.
I deploy and run what I build.
Not one-click-and-forget. My projects run on Ubuntu VMs I provision and manage myself, with the application and database deliberately kept on separate hosts.
The app is hosted on an Oracle Cloud Ubuntu VM. The database is a self-hosted PostgreSQL instance on its own Ubuntu VM, currently on Google Cloud, separated on purpose, so application and data have independent lifecycles, networking, and failure domains.
Running my own machines means I actually deal with the parts a managed platform hides: SSH, firewall rules, updates, service management, connection strings, and backups. It's more work, and that's the point, it's where the real systems understanding comes from.
I'd rather understand a system end-to-end than push to a platform and forget it exists.
Tools I actually reach for.
Grouped by what they're for, not listed as a badge wall. Each cluster is a part of how the work gets done.
Python
Where most of my backend work lives. From there I move across the stack, systems-level in C++, and full-stack web in the JavaScript world.
Claude
Three assistants, one shared brain. Claude leads the build; Antigravity covers frontend; Codex fills in scoped work, all coordinated through shared context and handoff files so nothing repeats.
Ubuntu + PostgreSQL
Software that actually runs somewhere, on VMs I provision and manage myself. Application and database deliberately split across two clouds.
Security review
The habits that keep the work trustworthy over time, checked before anything ships, not assumed on the way out.
Watch the handoff happen.
A small extra. A live re-enactment of the cross-tool handoff described above, not a screen recording. Real files, real steps, one shared context.
The full portfolio brief goes into Claude Opus 4.8, in plan mode.
plan modeClaude plans the whole build, and I approve it, before a line is written.
plan approvedIt writes the site and seeds the shared .ai-sync files both tools read.
context.md · handoff.mdFrom the taskbar I open Antigravity on the very same repo.
same contextAntigravity reads handoff.md, picks up mid-task, and fixes the nav alignment bug.
nothing lostWhat I care about when I build.
Centralize context
One source of truth every tool reads, so nothing gets re-derived or repeated.
Document decisions
Write down the why as it happens. A clear log is worth more than perfect memory.
Amplify, don't outsource
AI speeds up output; it doesn't replace understanding what the code does.
Verify before pushing
Security and correctness get checked at the gate, never assumed on the way out.
Own the full system
From local code to a running server, I'd rather understand the whole path.
Clean over clever
Prefer quiet, correct execution to noisy complexity that impresses no one useful.
First things that ran
Picked up programming to understand how software actually works, and started the Discord bot that is still in production today.
Engineering school
Started B.E. Computer Engineering at Thapar, and began shipping projects end to end, learning as much from what broke as from what worked.
AI tools, used with intent
Started using AI assistants deliberately, coordinating them instead of prompting at random.
Shared context & logs
Introduced centralized context and a shared log so tools hand off cleanly and decisions stay recorded.
Self-hosting
Moved from localhost to real infrastructure, provisioning and running services on my own cloud VMs.
Complete software systems
Building more complete systems, with the process, infrastructure, and review discipline to back them.