I build the things that sit between a stopwatch and a stochastic process:
F1 strategy models, matching engines, volatility surfaces, and the maths that holds them up.
The maths, twice · On track · In the market · Under the bonnet · Hire exchange · Team radio
A race and a market pose the same problem: make a decision under uncertainty, against the clock, with someone faster than you trying to make it first. Most of my repos are one of these five ideas, worked out on one side of the pit wall or the other.
| The idea | 🏎️ On track | 📈 In the market |
|---|---|---|
| Fit a curve, act on the residual | predictive-tire-engine: where the tyre is on its degradation curve | svi-scanner: where Deribit quotes sit off a fitted SVI surface |
| Spend a scarce resource at the right moment | apex-racing-live-strategy: the pit window, traded against tyre and fuel | lob-engine: TWAP / VWAP / POV execution schedules |
| Separate signal from noise | f1-performance-intelligence: telemetry, read by an AI race engineer | rmt-covariance: Random Matrix Theory strips noise out of correlations |
| Events cluster | One safety car and half the field pits on the same lap | hawkes-lob: do BTC trades self-excite like order books do? |
| Milliseconds are the margin | A 2-second stop wins the undercut; a 4-second one hands it back | limit-order-book: no locks on the hot path · market-pipeline: 35 ms end to end |
An F1 trilogy, built in race order: predict the tyre, read the car, make the call.
| Stint | Repo | What it does |
|---|---|---|
| 1 · Predict | predictive-tire-engine | Tyre degradation predictor with a D3 dashboard on live telemetry |
| 2 · Read | f1-performance-intelligence | Telemetry dashboard with an AI race engineer on the radio |
| 3 · Decide | apex-racing-live-strategy | Race strategy simulator: tyre and fuel modelling, pit-stop optimisation |
Microstructure: where prices actually get made
| Repo | What it does |
|---|---|
| limit-order-book | Deterministic limit order book and matching engine in C++20. Determinism is tested, not hoped for |
| lob-engine | Price-time priority LOB in std-only Rust, plus TWAP / VWAP / POV execution algorithms |
| hawkes-lob | Hawkes process model testing whether BTC trades self-excite |
| market-pipeline | Binance WebSocket → Redis → FastAPI, 35 ms end to end |
Volatility and risk: where prices get questioned
| Repo | What it does |
|---|---|
| svi-scanner | Fits an SVI volatility surface to Deribit options, then hunts for where the market disagrees with it |
| rbergomi-engine | Rough-volatility pricing: Monte Carlo with control variates, calibrated to live SPX options |
| rmt-covariance | Covariance cleaning with Random Matrix Theory vs Ledoit-Wolf, with walk-forward backtests |
| cognitive-convergence-detector | Flags when institutional signals converge: crowded positioning as an early warning for systemic risk |
| 151-trading-strats | 151 strategies across 18 asset classes, after Kakushadze & Serur (2018) |
The equations these repos are built on. If you read these before the tables, we'll get along.
SVI smile · svi-scanner. Total implied variance at log-moneyness
Rough Bergomi · rbergomi-engine. Variance driven by a Volterra process whose Hurst exponent
Hawkes intensity · hawkes-lob. Every trade raises the odds of the next one, and the effect decays. The process stays stable while the branching ratio
Marchenko–Pastur · rmt-covariance. With
The pit-stop inequality · apex-racing-live-strategy. The back-of-envelope version: box on lap
More probability than finance: Projects holds experiments in probability calibration, decision theory and betting.
Greenfield repos are the easy part. Getting a change merged into someone else's codebase is the part I'm proudest of: 11 merged so far, mostly in quant libraries and developer tooling.
Quant and research
- ArturSepp/QuantInvestStrats#192: reconstruct instrument P&L across missing quotes, so contributions still sum to NAV
- ArturSepp/QuantInvestStrats#225: run the offline quickstart with sockets patched to raise, so a network call can never pass silently
- ArturSepp/QuantInvestStrats#227: map every printed quickstart output to the Python object that produced it
- bloomberg/causal-ts#83: guard batched ParCorrGPU precision inverses, falling back to OLS instead of inverting an ill-conditioned matrix
- bloomberg/causal-ts#85: pair all 30 example notebooks with Jupytext scripts, so changes review as
.pydiffs - bloomberg/causal-ts#86: set up all-contributors, seeded with every human contributor
Compilers, runtimes and tooling
- swiftlang/swift#93473: retry each clone/update in
update-checkout, instead of re-fetching all 51 repositories when one flakes - affaan-m/ECC#3590: accept JSONC comments in
opencode.jsonwhile checking config membership duringecc install - morluto/rea#4219: honour package-main selection for trailing-slash directory references
- morluto/rea#4511: keep CommonJS
require(`mod`)dependencies visible in the source graph - tt-a1i/archify#986: add class, tree, timeline and waterfall promoted-type recipes
17 open PRs in the pit lane, awaiting review
| Project | PR |
|---|---|
| swiftlang/swift#93581 | clearer errors for inherited-only type attributes |
| sympy/sympy#30901 | short-circuit is_irreducible for univariate polynomials over CC |
| openai/tiktoken#623 | restore manylinux2014 x86_64 wheels |
| google-research/timesfm#552 | actionable errors when optional backends fail to import |
| microsoft/qlib#2386 | drop pkg_resources from collect_info.py |
| goldmansachs/gs-quant#409 | size the default correlation window on cleaned returns |
| google/adk-go#1903 | send live tool responses through the sender goroutine |
| crewAIInc/crewAI#8490 | filter pull requests before limiting GitHub issues |
| dagster-io/dagster#34361 | exclude dbt v2 unit tests from fusion result events |
| ray-project/ray#67476 | bump the starlette floor past known CVEs |
| openyurtio/openyurt#2843 | fall back to an interface address when there is no default route |
| bloomberg/bde#320 | fix MSVC /bigobj flags for bsl and bdlar |
| jaegertracing/jaeger#9839 | align built-in skill descriptions with the index |
| jaegertracing/jaeger#9842 | restore the MCP tool limit tunables |
| morluto/rea#3525 | recover structured tool arguments sent as JSON text |
| jankrepl/deepdow#152 | __sub__ / __rsub__ on the Loss class |
| topoteretes/cognee-community#202 | Raindrop.io data-source connector |
A prediction market on my own commit count. A GitHub Action quotes a range every midnight IST and settles the trade the next night.
38 sessions · 89% hit rate · best streak 18 · 24 exact / 6 near / 4 beat / 4 miss
📊 2026-10 earnings report: 31 sessions, 87% hit rate, probability +23.7pts. Another month, another set of predictions nobody asked for.
| Date (IST) | Forecast | Shipped | Result | Δ pts | Hire probability |
|---|---|---|---|---|---|
| 2026-11-07 (today) | 3–4 | ⏳ | Market open | ||
| 2026-11-06 | 3–4 | 3 | ✅ Exact hit | +1.25 | 32.33% |
| 2026-11-05 | 3–4 | 4 | ✅ Exact hit | +1.50 | 31.08% |
| 2026-11-04 | 3–4 | 4 | ✅ Exact hit | +1.50 | 29.58% |
| 2026-11-03 | 3–5 | 2 | 🟢 Near hit | +0.90 | 28.08% |
| 2026-11-02 | 3–5 | 3 | ✅ Exact hit | +1.00 | 27.18% |
| 2026-11-01 | 3–6 | 4 | ✅ Exact hit | +0.97 | 26.18% |
| 2026-10-31 | 3–6 | 5 | ✅ Exact hit | +1.03 | 25.21% |
| 2026-10-30 | 3–6 | 3 | ✅ Exact hit | +0.60 | 24.18% |
| 2026-10-29 | 3–6 | 4 | ✅ Exact hit | +0.67 | 23.58% |
| 2026-10-28 | 5–6 | 3 | ❌ Miss | +0.25 | 22.91% |
| 2026-10-27 | 5–6 | 5 | ✅ Exact hit | +1.33 | 22.66% |
| 2026-10-26 | 5–8 | 6 | ✅ Exact hit | +1.25 | 21.33% |
| 2026-10-25 | 5–8 | 6 | ✅ Exact hit | +1.25 | 20.08% |
| 2026-10-24 | 3–8 | 6 | ✅ Exact hit | +1.25 | 18.83% |
How does this work? (a.k.a. why is this in my README)
- Every day at 00:05 IST a GitHub Action forecasts a range for the day: the 7 day trailing window, trimmed — the smallest and largest are dropped, so one monster day can’t turn every forecast into a shrug. It lands about half the time.
- Counts are the commits that still exist on my repos' default branches, so
git logagrees with me. GitHub's contribution graph never retracts a commit — rebased and amended work stays counted forever, and it claimed 74 for a day with 38 commits in it. - The next midnight it fetches my real commit count and settles the trade.
- Points follow the work: 0 for a day with no commits, up to 1 for matching the top of the range, and up to 1.5 for beating it. Streaks add a small bonus.
- Landing inside the range is a hit, 1 under is a near miss, further under is -0.25, and no commits on a day that expected work is -0.5.
- Shipping more is never punished. Beating the top of the range is the best possible day, and the score keeps climbing with the overshoot.
- Market manipulation means one thing only: 10+ commits within 60 minutes in this profile repo — the only way to game the contribution graph. Overachieving a low forecast across real repos is not a crime. Penalty: -1.5 pts.
- Visitors: 👍/👎 on today's voting issue to predict whether the bot hits. No prize, just bragging rights.
- Monthly: on the 1st, an earnings report summarises the previous month.
- Probability is 100% fiction. The 100% real part: I actually ship code, and I'm actually looking for a job.
Off the racing line, but still running.
18 more repos: AI tooling, fintech, and native apps
AI tooling and agents
| Repo | What it does |
|---|---|
| mcp-vetter-agent | AI agent that audits MCP servers before you connect to them |
| Codeinsight | Ask questions about any repo in plain English; see the architecture it infers |
| edge-mem | Offline-first edge knowledge engine with Qdrant-backed cloud federation |
| intellex | Natural-language requests → clean, source-backed datasets |
| vizql | Visual SQL explainer: watch a query execute step by step |
| vizarch | System architecture diagrams from plain English, as SVG |
| commit-archaeology | Commit history → feature eras, who broke what, and the bus factor |
| dependency-time-machine | Any repo + any past date → that project's snapshot, plus what shipped since |
| impact-lens | Impact and sustainability media analysis, before/after comparison |
| J.A.R.V.I.S | Finds issues matching your skills, plans the contribution, drafts the PR |
Fintech
| Repo | What it does |
|---|---|
| ptm-recovery-agent | Recovers failed Paytm payments, measuring true incremental lift |
| rzp-recovery-agent | Same for Razorpay: causal, not just "recovered count" |
| FinCortex_Finvigators | AI CFO assistant: spend, cashflow forecasting, planning |
Platforms, native apps and utilities
| Repo | What it does |
|---|---|
| ORION | Real-time geopolitical risk dashboard: energy supply chains and conflicts |
| textdistance-rs | Rust port of textdistance: 43 algorithms, 77–1788× faster than Python |
| agent-office-app | macOS SwiftUI app running multiple AI agents with streaming, cost tracking and task queues |
| PRESENT | macOS menubar attendance tracker with safe-skip maths and lecture reminders |
| internship-tracker | Scrapes 270+ companies and sends daily digests via Telegram |
Open to full-time roles in quant research, trading systems, or anywhere a strategy call is really a maths problem. Motorsport included.
- GitHub: @hemv-857 (you're here)
- Email / LinkedIn: in the profile sidebar
Skip the cover letter and give me a concrete problem: a matching-engine latency bug, a wing of the vol surface that won't fit, or a one-stop that should have been a two-stop. I'll have opinions before the call ends.
Box, box. · MIT

