I'm a 2nd-year CS student (CGPA 9.25, Dean's List) who likes building things that actually run: LLM agent systems, machine-learning models, and the occasional computer-vision experiment.
Most recently I was a full-stack dev intern at Tech Mahindra, building multi-agent LLM pipelines. Before that I co-authored two computational-materials papers (Int. J. Hydrogen Energy, IF 8.3, and Surfaces & Interfaces) and trained deep-learning models at a 5G research lab.
Off the clock I ship side projects: 17 public repos and counting. Always up for research and engineering opportunities.
Read full details
An Automotive After-Sales AI Command Center, a 3-tier LangGraph agent hierarchy automating warranty claims, product recalls, and parts management. Four role-based portals: Customer (guided intake chat + live status tracker), Manager (approval queue + AI reasoning chain + live agent monitor + audit log), Dealer (open jobs + parts inventory), and Admin (recall management).
Structured output, not tool-calling, the LLM returns a Pydantic decision object; plain Python handles all DB queries and business logic, keeping decisions deterministic and testable. Tiered autonomy, low-cost, high-confidence, low-fraud claims auto-approve; everything else queues for manager review. Policy RAG, every decision cites the exact warranty clause it relied on, so the reasoning is grounded in actual policy, not invented by the model.
A dedicated fraud node scores each claim against the vehicle's and owner's claim history. An LLM-as-judge eval pipeline runs labelled claim scenarios through the real pipeline and scores reasoning quality, measuring decision and coverage accuracy, not just uptime. CSAT collection is built in: customers rate resolved claims 1–5 stars; the manager dashboard tracks average satisfaction alongside approval rate and automation rate.
Backend: Python · FastAPI · LangGraph · SQLAlchemy · Pydantic · SQLite (dev) / PostgreSQL (prod) · 40 pytest tests (LLM calls monkeypatched for offline runs)
Frontend: Next.js · TypeScript · SSE live agent monitor via EventSource
LLM: Groq · DeepSeek · Ollama · Docker Compose for full-stack local runs
Read full details
End-to-end replication of a published IEEE paper for automatic modulation classification, a core problem in 5G spectrum intelligence. The network classifies raw 1024-sample I/Q radio snippets across 10 modulation schemes with no domain-engineered features. Two architectures from the paper's specification: a VGG-style 1D CNN (159,818 parameters) and a ResNet variant with skip connections (165,507 parameters). Also designed and implemented a confidence-based abstention gate. All training done on a 12-core CPU with no GPU.
10-class model: 66.3% overall accuracy on 16,000 held-out examples (random baseline = 10%). Five anchor classes (FM, AM-DSB-WC, OOK, 16QAM, 64QAM) each exceed 96% precision. 8PSK absorbs ~47% of all misclassifications at low SNR, a pattern that matches the paper's findings. The confidence gate lifts effective accuracy to 90% while still answering 68% of inputs; validated by a 26 dB SNR separation between answered (+14 dB) and abstained (−12 dB) signals. Warm-up on 3 classes: 81.1% VGG / 82.1% ResNet, 99.4% on clean signals.
The dataset provides no per-example SNR labels. Designed a blind estimation approach using two independent signal statistics: spectral flatness and lag-1 autocorrelation, neither requiring knowledge of the modulation scheme. The two proxies agreed at r = −0.996, validating the method and enabling full reproduction of the paper's accuracy-vs-SNR curve without metadata.
Python · TensorFlow · Scikit-learn · NumPy · Matplotlib · DeepSig RadioML 2018.01A (19.5 GB, memory-mapped)
Read full details
An Automotive After-Sales AI Command Center, a 3-tier LangGraph agent hierarchy automating warranty claims, product recalls, and parts management. Four role-based portals: Customer (guided intake chat + live status tracker), Manager (approval queue + AI reasoning chain + live agent monitor + audit log), Dealer (open jobs + parts inventory), and Admin (recall management).
Structured output, not tool-calling, the LLM returns a Pydantic decision object; plain Python handles all DB queries and business logic, keeping decisions deterministic and testable. Tiered autonomy, low-cost, high-confidence, low-fraud claims auto-approve; everything else queues for manager review. Policy RAG, every decision cites the exact warranty clause it relied on, so the reasoning is grounded in actual policy, not invented by the model.
A dedicated fraud node scores each claim against the vehicle's and owner's claim history. An LLM-as-judge eval pipeline runs labelled claim scenarios through the real pipeline and scores reasoning quality, measuring decision and coverage accuracy, not just uptime. CSAT collection is built in: customers rate resolved claims 1–5 stars; the manager dashboard tracks average satisfaction alongside approval rate and automation rate.
Backend: Python · FastAPI · LangGraph · SQLAlchemy · Pydantic · SQLite (dev) / PostgreSQL (prod) · 40 pytest tests (LLM calls monkeypatched for offline runs)
Frontend: Next.js · TypeScript · SSE live agent monitor via EventSource
LLM: Groq · DeepSeek · Ollama · Docker Compose for full-stack local runs
Read full details
A replication of the VGG-style 1D CNN from O'Shea, Roy & Clancy (IEEE J-STSP 2018) for automatic modulation classification. The network takes raw I/Q radio samples and identifies the modulation scheme, no Fourier transform, no hand-crafted features. Also implemented a ResNet variant with skip connections for comparison. Both models trained on a CPU in ~5 minutes.
VGG CNN: 81.1% overall test accuracy, 99.4% on clean signals, matching the paper's high-SNR result. ResNet: 82.1% overall. The bottleneck is data quality (noise), not architecture: both models hit the same noise ceiling, which reproduces the S-curve the paper reports.
With no per-example SNR labels in the dataset, SNR was estimated blind using two signal statistics, spectral flatness and lag-1 autocorrelation. The two proxies agreed at r = −0.996, validating a method for recovering the accuracy-vs-SNR curve without metadata.
Python · TensorFlow · Scikit-learn · NumPy · Matplotlib · DeepSig RadioML 2018.01A (19.5 GB, memory-mapped)
A DFT (VASP) study decorating porous Holey Graphyne with single vanadium, chromium, or niobium atoms for hydrogen storage, reaching ~14 wt% capacity, more than double the DOE target, with release near room temperature.
Read the full summary
Hydrogen carries more energy per kilogram than any conventional fuel and burns cleanly, but it is notoriously hard to store: compressed-gas tanks are bulky and dangerous, and liquefying it wastes energy. Storing it in a solid, where the gas clings to a material's surface and is released on demand, is the safer route. For that to be practical the U.S. Department of Energy requires at least 6.5 wt% capacity and a binding strength of roughly 0.2 to 0.6 eV per H₂ molecule: strong enough to hold on, weak enough to let go near room temperature.
The material is Holey Graphyne (HGY), a flat carbon sheet with a regular pattern of holes, decorated with a single vanadium, chromium, or niobium atom sitting over its octagonal ring, the most stable site, with binding energies of 4.04, 4.84 and 3.14 eV (all negative, indicating stable binding). Every result comes from density functional theory in VASP, with the DFT-D3 correction for weak van der Waals forces and the HSE06 hybrid functional for an accurate band gap; ab-initio molecular dynamics and nudged-elastic-band calculations test the material's stability and whether the metal atoms drift.
The metal grips hydrogen through the Kubas interaction, in which electrons flow back and forth between the metal's d-orbitals and the H₂ molecule, holding it without breaking the H to H bond, which only stretches from 0.74 to about 0.78 Å. Each metal atom holds up to 16 H₂ molecules arranged in three layers, with adsorption energies between 0.17 and 0.58 eV per molecule (negative values, squarely inside the DOE's ideal window). With two metal atoms per unit cell that reaches 32 H₂ and gravimetric capacities of 14.09 wt% (V), 14.02 wt% (Cr) and 11.93 wt% (Nb), all well beyond the 6.5 wt% target.
Van 't Hoff estimates place the hydrogen-release temperature near ambient (326 K for vanadium, 273 K for chromium, 386 K for niobium), which is ideal for fuel cells. Just as important, the metal atoms stay put: their migration barriers (3.87 to 4.27 eV) dwarf the available thermal energy (~0.05 eV), so they can't wander and clump into clusters, and molecular-dynamics runs at 350 K confirm the sheet stays intact. The authors conclude that transition-metal-decorated HGY is a strong, reusable hydrogen-storage candidate and call for experimental follow-up.
A spin-polarised DFT (VASP) study of nickel-, palladium-, and platinum-doped hBNX monolayers as toxic-gas sensors, with Pt-hBNX reaching room-temperature sensitivity of order 10¹⁵ for CO.
Read the full summary
Trace amounts of gases like carbon monoxide, ammonia and hydrogen fluoride are hazardous, so cheap, portable, highly sensitive detectors are valuable. Two-dimensional materials make attractive sensor surfaces because an adsorbed gas changes their electrical resistance, but many of them, on their own, react too weakly to the gases to be useful.
This work uses hexaboronitroxene (hBNX, B₈O₃N₉H₆), a newly proposed porous 2D framework of boron, oxygen, nitrogen and hydrogen. Its surface is activated with a single nickel, palladium or platinum atom, each binding preferentially over a nitrogen site (binding energies −1.03 to −1.66 eV). Everything is computed with spin-polarised density functional theory in VASP (PBE functional, DFT-D3 dispersion correction), with ab-initio molecular dynamics for thermal stability and nudged-elastic-band calculations to confirm the metal stays anchored. The five target gases are CO, CO₂, NH₃, CS₂ and HF.
Pristine hBNX only physisorbs the gases weakly and has a wide 3.74 eV band gap, so it barely responds. Adding the metal atom changes both: it introduces new electronic states, narrows the gap (to 0.72–1.54 eV), and lets the gases chemisorb strongly, for example Ni–NH₃ at −1.94 eV or Pt–CO at −2.17 eV. Because a resistance-based sensor's signal comes from how much the band gap and charge distribution shift when a gas lands, these larger changes translate directly into higher sensitivity.
Sensitivity, estimated from the band-gap change, is highest for Pt-hBNX, reaching the order of 10¹⁵ for CO, 10¹⁴ for CO₂ and 10¹³ for HF at room temperature, making it the strongest, most broadly responsive platform. Ni-hBNX is a specialist, extremely selective for CS₂ (~10¹⁷), while Pd-hBNX trades raw sensitivity for the best recovery, making it the most reusable. Performance holds up to 400 K, and a 3.58 eV migration barrier keeps the platinum firmly in place, positioning transition-metal-doped hBNX as a versatile, thermally resilient family of gas sensors.
Read full details
End-to-end replication of a published deep learning paper for automatic modulation classification, a core problem in 5G spectrum intelligence and cognitive radio. The network takes raw 1024-sample I/Q radio snippets and predicts which of 10 modulation schemes produced them, learning directly from signal waveforms with no domain-engineered features. Two architectures implemented from the paper's specification: a VGG-style 1D CNN (159,818 parameters) and a ResNet variant with skip connections (165,507 parameters), both trained with Adam and early stopping on a 12-core CPU with no GPU.
10-class model: 66.3% overall accuracy on 16,000 held-out examples (random baseline = 10%). The aggregate number understates model quality: five anchor classes representing physically distinct modulation families (FM, AM-DSB-WC, OOK, 16QAM, 64QAM) each exceed 96% precision. The confusable PSK family (BPSK/QPSK/8PSK) and QAM ladder (16/64/256QAM) are where errors concentrate, which is exactly what signal theory predicts. 8PSK absorbs ~47% of all misclassifications at low SNR, a pattern that emerged from the confusion matrix and matches the paper's findings. On the simpler 3-class warm-up task, VGG reached 81.1% overall and 99.4% on clean signals, reproducing the paper's high-SNR benchmark.
A model that guesses on noise-destroyed signals is worse than one that knows when to stay silent. Designed and implemented an abstention gate using softmax confidence scores: when the model's certainty falls below a tuned threshold, it abstains rather than guessing. Result: 90% accuracy on answered signals while still responding to 68% of inputs, compared to 66.3% when forced to answer everything. Verified that the gate genuinely tracks signal quality: answered signals show median SNR +14 dB and abstained signals −12 dB, a 26 dB separation confirming the gate is functioning as intended.
The dataset provides no per-example SNR labels, making it impossible to plot accuracy vs. SNR directly. Designed a blind estimation approach using two independent signal statistics: spectral flatness (flat spectrum = noise-dominated) and lag-1 autocorrelation (uncorrelated adjacent samples = noise). Neither statistic requires any knowledge of the modulation scheme. The two independent proxies agreed at r = −0.996 across the test set, validating the method and allowing full reproduction of the paper's S-curve without access to metadata.
DeepSig RadioML 2018.01A: 2.55 million examples across 24 modulation schemes, 19.5 GB on disk. The dataset cannot fit in RAM. Implemented memory-mapped I/O using NumPy's mmap mode, reading only required rows via index-based slicing. Sampled 8,000 examples per class across 10 classes (80,000 total), applied unit-variance normalization, and produced a stratified 80/20 train/test split. Full pipeline runs in under 20 seconds on a CPU laptop.
Read full details
An Automotive After-Sales AI Command Center built as a Tech Mahindra internship project. A 3-tier LangGraph agent hierarchy automates warranty claims, product recalls, and parts management, with a human in the loop for every high-stakes decision. Four role-based portals: Customer (guided intake + status tracker), Manager (approval queue + AI reasoning chain + live agent monitor), Dealer (open jobs + parts inventory), and Admin (recall management + audit log).
Customer/Dealer/Admin portals talk to a FastAPI REST + SSE backend. Claim intake returns in milliseconds via FastAPI BackgroundTasks; the LangGraph pipeline runs asynchronously. The master orchestrator routes each claim through domain pipelines (warranty → recall → parts), then either auto-finalises low-risk claims or pauses at human-in-the-loop interrupt() for a manager to approve or reject with full reasoning visible.
Structured output, not tool-calling, the LLM returns a Pydantic decision object; plain Python handles all DB queries and business logic. This makes decisions deterministic and fully unit-testable. Tiered autonomy, low-cost, high-confidence, low-fraud claims auto-approve; everything else queues for review. Thresholds are configurable. Policy RAG, the system cites the exact warranty clause it relied on (e.g. SWIFT-AC-01), so every decision is grounded in the actual policy, not invented by the model.
A dedicated fraud node scores each claim against claim history for the vehicle and owner, flagging unusual patterns. A separate LLM-as-judge eval pipeline runs labeled claim scenarios through the real pipeline and scores reasoning quality, measuring decision accuracy and coverage accuracy, not just "does it run." CSAT collection is built in: customers rate resolved claims 1–5 stars, and the manager dashboard tracks average satisfaction alongside approval rate, automation rate, and total claim cost.
Backend: Python 3.12 · FastAPI · LangGraph · SQLAlchemy · Pydantic · SQLite (dev) / PostgreSQL (prod) · pytest (40 tests, LLM calls monkeypatched for offline runs)
Frontend: Next.js · TypeScript · four role-based portals · SSE live agent monitor via EventSource
LLM providers: Groq (fast, recommended for demos) · DeepSeek (strong reasoning) · Ollama (local, zero cost)
Infrastructure: Docker Compose (Postgres + backend + frontend) · AWS-ready (ECS Fargate, RDS Aurora, S3, Cognito, SQS mapped)
Read full details
Most focus apps block distracting sites and put up a wall, which makes you want to turn the tool off. Sidestep does the opposite: when you reach for a distracting site during a focus session, it quietly redirects you to one of your own saved useful links instead. Same impulse, better destination. Substitution, not blocking.
Substitution engine, during a session, any site on your list redirects to a useful link you saved. Bunny companion, an animated pixel bunny hops while you focus and sleeps on the redirect page (no guilt screen). Thought parking lot, jot down the stray thought that pulled you away; it waits in the popup rather than becoming a rabbit hole. Focus timer, Pomodoro timer keeps running in the background even with the popup closed. Freedom window, allow one site for 5, 15, or 30 minutes without disabling the whole session.
One background service worker (Chrome Manifest V3) owns the timer and watches page navigations. The popup sends it commands and reads state from storage, so sessions survive popup closes. The redirect page and popup are both built in Svelte 5 using WXT's hot-reload dev tooling. No external dependencies at runtime.
Read full details
Customer, browse menu by category, place orders item by item, apply gift codes. Chef, live queue of active orders with per-item status updates. Employee, log incoming ingredient batches, view supplier options per ingredient. Supplier, manage the ingredients they supply, update pricing, confirm deliveries. Manager, full control: add/edit menu items and ingredients, run demand forecasts for a target date with a configurable safety margin, issue gift codes, view allergen and category metadata.
Business logic lives in MySQL stored procedures, order placement, batch logging, and supply updates are all called via callproc, not raw SQL in Python. FastAPI surfaces them through a typed REST API with JWT role-based access control: each endpoint uses require_role() to gate access. Custom MySQL SIGNAL errors (SQLSTATE 45000) bubble up as HTTP 400s with user-facing messages, so the DB enforces constraints and the API surfaces them cleanly.
The manager can trigger a forecast for a target date with a configurable safety multiplier (default 1.5×). The system looks back at historical order quantities per ingredient and projects how much stock will be needed, so the kitchen never runs short mid-service.
Python · FastAPI · MySQL · Pydantic · JWT (python-jose) · Vanilla JS / HTML dashboards (no framework) · pytest test suite
Read full details
All game objects extend an abstract HoleOccupant class. Each type implements its own whack(), returning +100, −500, or +1000, so the game engine never needs instanceof checks. Adding a new object type requires one new class and zero changes to existing code.
A two-thread design: the EDT (Event Dispatch Thread) handles all GUI rendering and user clicks; a separate game engine thread owns the 60-second countdown and spawns objects every 500ms (60% mole, 30% bomb, 10% bonus). All engine → GUI updates go through SwingUtilities.invokeLater(). Graceful shutdown: closing the window interrupts the engine thread which exits by setting keepGameRunning = false.
HighScoreException (checked) handles file I/O for the serialized high-score list at ~/.whackamole/highscores.dat. InvalidGameStateException (unchecked) catches programming errors like accessing a non-existent hole. Top 10 scores persist across sessions and survive moving the game folder.