Projects

Selected projects

SaaS · Sarvam Startup Program · 2026

ScrollCraft

Scroll-scrubbed websites play a frame sequence as the reader scrolls, which usually takes WebGL, an animation library or a render farm. ScrollCraft draws the frames on a canvas in the browser from a template, a prompt or your own video, lets you edit the site, and exports a self-contained bundle you can host anywhere.

  • Ran as a paid SaaS end to end: Auth.js OAuth with GitHub and Google, Razorpay and Lemon Squeezy payments with atomic fulfilment, subscription tiers, Upstash Redis rate limiting, Vercel Blob storage, Zod-validated APIs, Sentry monitoring and Vitest tests.
  • Part of the Sarvam Startup Program: Sarvam's LLM powers the in-editor copy assistant, which rewrites a section's words in one undo step and never touches layout, colours or links.
  • Then made fully free and open source: no accounts, no database, no paywall. The editor, 21 templates and the export all run in the browser, and uploaded video never leaves the device.
  • Exports are plain HTML, CSS and JavaScript with no dependencies, and score 100 on Lighthouse for performance, accessibility, best practices and SEO.
  • Also ships as a Claude Code plugin with the same export contract, so a site built by the skill opens in the hosted editor. 62 stars and 189 merged pull requests.

Next.js 16 · React 19 · TypeScript · Canvas · Sarvam LLM

scrollcraft.space ↗examples ↗source ↗

Competition · team Inno8 · 2026

Amazon ML Challenge 2026

Three sources describe the same businesses in the US, India and France with no shared identifiers, and planted decoys copy a real business while changing one detail. The task is to list, for every reference business, the records that describe it. F0.5 scoring makes a wrong merge worth four times a missed match, and France appears only in the test set, with no labels and a different address format.

  • 0.940 to 0.988642 in about 44 hours, on one 16 GB laptop plus free Kaggle T4 and P100 GPUs.
  • Local validation disagreed with the leaderboard until we found why: test carries 1.887 times as many unmatched records per business as train. Reweighting false positives by it made local and public gains move together.
  • Blocking in DuckDB on IDF-weighted rare keys keeps the true entity for 98.13% of pairs; two LightGBM stages then score all 19.2 million candidates.
  • Four fine-tuned multilingual E5 cross-encoders read only the 902,470 uncertain pairs, which is what kept them affordable, with a LightGBM stacker over their scores.
  • France was handled without labels: a two-model guard, a fixed threshold, and rules gated by hand-read audits and label-free fingerprints.

Python · LightGBM · DuckDB · PyTorch · Multilingual E5

write-up ↗

Tesseract Hackathon 2026 · 2026

impact-adjoint

Simulate a bouncing ball in JAX the natural way and jax.grad returns exactly 0.0 for a derivative whose true value is +0.09, because the impact moves the trajectory in a way the step-by-step derivative never sees. impact-adjoint fixes this with classical saltation-matrix event sensitivities from a Julia solver, served through a Tesseract boundary, then uses the gradients to design structures whose function only exists because of impacts.

  • Two components that disagree about how to differentiate, forward-mode duals with analytic event handling in Julia and reverse-mode tracing in JAX, composed into one jax.grad through tesseract-jax.
  • Inverse design: a 24-parameter resilience separator that sorts particles by how far they bounce, terrain that routes different inlet speeds to different cups, and a 1.12 m miss cut to 2.7 cm through five bounces.
  • Bayesian calibration with NUTS: material parameters recovered with the truth inside both 95% intervals, from 23,440 gradients through the containerised solver over HTTP.
  • Checked against solver-independent oracles, including a multi-bounce closed form derived in exact arithmetic that agrees to 7e-12.
  • Turned up two silent wrong-gradient bugs in Tesseract itself, both fixed upstream in tesseract-core #667 and tesseract-jax #236. Archived on Zenodo with a DOI.

Julia · JAX · Tesseract · NumPyro · Docker

docs and demo ↗source ↗DOI ↗

New SciML package · author and maintainer · 2026

PETScDiffEq.jl

PETSc ships a large, well-tested library of time integrators (TS) used across HPC codes, but reaching it from Julia meant writing against PETSc directly. PETScDiffEq.jl puts TS behind the common SciML interface, so an ODEProblem, SplitODEProblem or DAEProblem is solved with PETSc by changing one argument to solve.

  • Wraps PETSc's explicit Runge-Kutta, Rosenbrock-W, BDF and theta, Gauss-Legendre IRK, ARK IMEX, multirate and DAE solvers, plus a pass-through to any other PETSc TS type.
  • PETScAdjoint exposes PETSc's discrete adjoint, and reversed time spans let SciMLSensitivity adjoints run through the package.
  • Analytic and matrix-free Jacobians, mass matrices, dense output, tstops, callbacks and the full integrator interface.
  • Registered in the Julia General registry, v0.3.0 released September 2026; the wrapper bugs it exposed were fixed upstream in PETSc.jl.

Julia · PETSc · SciML · MPI

source ↗

Open source · SciML · 2026 - now

OrdinaryDiffEq.jl

OrdinaryDiffEq.jl is the solver library behind DifferentialEquations.jl. I work on the time integrators themselves: new method families, the machinery they share, and the correctness of the adaptive stepping underneath.

  • Added the spectral deferred correction family as a new subpackage with TU Hamburg: nine sweepers verified against the qmat reference, adaptive step control and the MIN-SR diagonal sweepers. Parallel-across-nodes and IMEX sweeps are in review.
  • Implemented the MRI-GARK multirate infinitesimal family (ERK22a/b, ERK33a, ERK45a, IRK21a, ESDIRK34a, ESDIRK46a) plus MIS2, MRAB, MREEF and MREIL.
  • Implemented IMEX SDIRK and ESDIRK schemes (ARS222, ARS232, ARS443, BHR(5,5,3), IMEX-SSP) behind one tableau abstraction shared across the family.
  • Found and corrected an error in a published multirate order condition, caught by convergence-order tests with negative controls.
  • Fixed adaptivity, Jacobian reuse and error estimation across the BDF, FIRK and Rosenbrock families.

Julia · SciML · Numerical methods

source ↗

Open source and tools

Open source CLI · npm and Homebrew · 2026

Kitbash

Every coding agent reads skills in its own format, so teams keep one hand-written copy per agent plus CI to stop them drifting apart. Kitbash defines one open format, KSF, governed by RFCs, and compiles it to each agent's native layout.

  • Compiles to ten agents, including Claude Code, Cursor, Copilot, Zed, Cline, Devin, Gemini CLI and Aider, plus the AGENTS.md floor and an opt-in Agent Plugins target.
  • Measures each output's standing token cost: the same instructions cost about 40 tokens per session on an agent that lazy-loads and about 560 on one that cannot.
  • Content-hash lockfile with drift detection, stale-output pruning, and a strict mode that fails the build on budget overruns.
  • Zero-dependency CLI, published to npm and Homebrew.

TypeScript · Node.js

docs ↗source ↗

CNCF · LFX Mentorship proof of concept · 2026

Meshery MCP Server

Built for the CNCF LFX Mentorship (Term 3, 2026): a Model Context Protocol server exposing Meshery's REST API to AI clients, designed so that nothing sensitive can leave the cluster through it.

  • Serves over stdio and Streamable HTTP, with three tools and a MeshSync cluster resource.
  • Cookie-based authentication with a secret-exclusion posture: Kubernetes Secrets and spec and status payloads are never fetched.
  • Unit and in-memory end-to-end tests run under the race detector in CI.

Go · Model Context Protocol · Kubernetes

source ↗

SciML Small Grants Program · 2026

DAE benchmarks for SciMLBenchmarks.jl

A funded project to give SciML's DAE solvers harder problems to be measured against, taken from the Bari IVP test set.

  • Eight problems: Andrews' squeezing mechanism, car axis, wheelset, water tube system, Fekete, charge pump, slider-crank and the two-bit adding unit.
  • Each in three formulations: mass matrix, residual DAE and ModelingToolkit index-reduced.

Julia · ModelingToolkit.jl · DAE

source ↗

Meshery, MeshSync, KubeEdge, Kubernetes SIGs · 2025 - 2026

CNCF upstream contributions

Fixes in the Go codebases of Meshery, MeshSync, KubeEdge and the Kubernetes SIGs.

  • An informer-store data race guarded with RWMutex, UUID label parsing, and a silent wrong-port service endpoint resolution.
  • Contributions to apiserver-network-proxy (Konnectivity) and KubeEdge CI toolchain alignment.

Go · client-go · Kubernetes

Meshery ↗

Earlier projects

  • FaceGuard

    Mobile · 2026

    Offline-first facial recognition and liveness detection for Android and iOS, with on-device MobileFaceNet inference, blink and smile challenges, and a local SQLite store.

    React Native · Expo · TFLite · TypeScript

    source ↗

  • PredictEdge

    Tata Technologies InnoVent 2026 · 2026

    An edge-AI remaining-useful-life prototype on the CMAPSS dataset, with INT8 TFLite inference running on a Raspberry Pi and a live dashboard.

    Python · TFLite · Raspberry Pi

    dashboard ↗source ↗

  • Smart Campus Issue Reporting

    Web · 2025

    A web system for reporting and managing campus infrastructure issues, backed by Firebase.

    JavaScript · Firebase

    source ↗