Projects
Selected systems and product work across data analysis, research infrastructure, developer tooling, and public-interest guidance.
Built systems
Ridge
Turns spreadsheets into findings you can audit: statistics, data-quality diagnostics, and correlations computed deterministically, with AI explanation as an optional layer that never produces the numbers.
ProofX
Open research infrastructure for bounded experimentation in discrete mathematics and integer dynamics. Built around reproducible runs, sequence analysis, and traceable research workflows.
Switchyard
A fleet CLI that runs many AI coding agents on one repository without collisions: every agent works in an isolated git worktree, with collision detection before merge. Published on npm as @switchyardhq/switchyard.
Shell Reporting System
Reporting automation developed during a data analytics internship at Shell. It supports data validation, KPI extraction, dashboard generation, and consistent operational reporting.
OmanX
Guidance system for Omani scholarship students preparing to study in the United States. It organizes official sources, checklists, and escalation paths into a clearer student onboarding workflow.
Pulse
Reads Gmail, GitHub, and Notion activity into a local ledger and produces a weekly operating review in which every factual claim carries a citation you can open. Local-first: no server, no cloud database, no account.
Receipt
Turns bank statements into plain-English spending insights, locally: semantic clustering, seven behavioral detectors, and a narrative grounded in named merchants and exact amounts.
Quant
A research-first trading scaffold: cost-aware, out-of-sample backtesting with one-bar execution delay, reported numbers pinned to committed data by a golden test, and unvalidated code quarantined where it cannot leak claims.
Merged upstream
Filesystem events on Windows
Renaming a file to a different case emitted a phantom deletion before the rename; the false event is now coalesced away. Plus a documentation correction on BaseThread daemon behaviour.
Correctness and types in a statistics library
Rank correlation returned a different answer for the same paired data depending on row order whenever values tied; ties now share their average rank. Three further fixes covering null-returning types and line endings that blocked linting on a fresh Windows clone.
Non-ASCII paths and platform assumptions
Three merged fixes to a film-negative processing tool: a Windows updater that broke on any profile path containing non-ASCII characters, POSIX-only path handling in script generation, and codepage-dependent source reads in the test suite.