Bhavya Dhoot
Quantitative Developer AI Systems Engineer
I build trading and automation systems that run unattended in production. Four of them are running on this page — scroll, or get in touch.
Numbers that
survive diligence.
Whatever the
business is losing.
“Just tell me every morning which payments did not land.”
reconcile(bank, ledger) → exact, tolerance, exceptions with reasons
“I need yesterday’s sales by SKU before my nine o’clock.”
ingest(ERP, quick‑commerce) → one cited dashboard, by 06:00
“Our supply paperwork lives in a WhatsApp folder.”
extract(documents) → typed ledger rows, same day
“Production plans against last week’s numbers.”
plan(demand, stock) → a daily schedule, no analyst in the loop
“Nobody picks up after seven.”
agent(voice) → qualified, logged, routed, transcript attached
Here is the first one, running. Two passes: exact reference and amount, then a normalised reference inside an amount and date tolerance, because feeds disagree about spacing, casing and value dates. What survives both is an exception with a stated reason — never a silent drop. The other four are the same job in a different part of the business.
Sample bank and ledger feeds bundled with this page, invented for it. No client data, and nothing about any client's architecture. The matching logic is real and runs in your browser; the counts above are whatever it just produced.
Health Factory case study →
Five inputs,
one call.
The variance engine standardises every input against its own history, then combines them on fixed weights. One number, one regime, and every term in the sum visible.
The five readings are a sample bundled with this page, not a live feed. The z-scores, the weighted composite and the regime call are computed from them in your browser. This is the shape of the Kronos NSE engine, not its production data.
Kronos NSE source →
Price an option,
live.
The same Black-Scholes engine from the pricing terminal, running in your browser. Move the inputs and watch the payoff, the present value, and the Greeks respond.
Then solve it
in fewer steps.
Adjacent strikes carry adjacent implied vols, so the previous answer is already close to the next one. Seeding Newton with it instead of a fixed guess is most of the cost gone. The figures below were measured in your browser, on this page, a moment ago.
Newton-Raphson with a bisection safeguard, checked against a round-trip through Black-Scholes before it runs. Iterations, not milliseconds: at this size wall clock is dominated by timer resolution and JIT warm-up, while the iteration count is exact. Note the worst case barely moves — warming the start cuts the mean, not the tail, because the tail is the first strike in the chain, which has no previous answer to inherit.
Options pricer source →
Things I have
shipped.
Let's build
something
precise.
Dubai, UAE · remote-friendly