In-depth write-ups of the projects I build.
Cumulant (ETHGlobal New York 2026) · 43,855 lines · TypeScript, Solidity · Jun 2026
Structured products on prediction markets, built for Circle Arc with USDC as both collateral and gas. Four Solidity products run on a shared parimutuel engine: USDC-collateralized binary markets, fixed-weight baskets, senior and junior risk tranches with a payout waterfall, and principal-protected notes that return capital while funding upside. A separate Distribution Markets surface quotes off-chain against the market's own implied curve, letting a user shape a full probability distribution and trade the difference between the two, with Arc USDC escrowed on-chain at open and resolver-signed payouts at settlement. An Express and viem backend reads every market, basket, tranche, and note off-chain as JSON and never custodies user funds, while a Next.js frontend on Dynamic signs every buy, deposit, redeem, and sell from the connected wallet. Deployed end-to-end on Arc testnet from a 66-market seed. Selected as one of 10 finalists out of 232 submissions and won the Arc prediction-market bounty.
Tape Context · 2,301 lines · Python · Jun 2026
A local desk tool for equity sales and trading: flag a notable option trade on the tape and it aggregates the full picture (option and stock snapshot, vol percentile and implied move, short interest, earnings and economic-event reaction studies, and SEC 13D/13G/8-K filings) into one dashboard panel and a copy-paste dossier for an LLM summary. Runs entirely on
127.0.0.1off the Bloomberg Desktop API and SEC EDGAR, with SQLite caching to stay inside the terminal's rate limits.
The KelpDAO rsETH Exploit & DeFi's Composability Trap (Artemis × DormDAO) · Long-form · May 2026
Long-form research with Michael Green on the April 2026 KelpDAO rsETH stress event across LayerZero and major lending venues, tracing how a single cross-chain approval moved a nine-figure rsETH balance out of Ethereum escrow without a matched burn, how that showed up as tighter backing for bridged holders than headline mainnet prices suggested, how supplier behavior flowed through to Aave WETH balances, and why the episode lines up with prior bridge governance failures (Ronin, Nomad, Wormhole, Resolv USR) more than a flaw in restaking math alone. The piece draws on primary on-chain timelines and public post-mortems to argue that bridge verifier setup and disclosure belong in collateral onboarding and ecosystem incentives, and it ends on the coalition-style DeFi United relief compared with a single backstop. One of three winners of the Artemis × DormDAO Research Competition out of 60+ submissions.
Senthos (SCBC Hackathon) · 42,825 lines · TypeScript, Rust · Apr 2026
A Solana protocol that turns curated Polymarket markets into tradable bundles, built around a five-stage NLP filter that decides which live markets are eligible before anything is priced and a trained correlation model that sizes a bundle from the joint behavior of its legs rather than pricing each leg in isolation. On-chain, the Anchor and Rust programs senthos_vault and senthos_ppn run on devnet against published program IDs, handling bundle-vault deposits, per-leg resolution, finalization, and note minting. An Express and TypeScript backend runs the Polymarket bridge, Supabase-backed catalogs, the filter pipeline, and the correlation model that feeds pricing, then adds a backend USDC lending and repo market where basket and tranche positions post as collateral to borrow USDC. A Next.js 16 frontend ships the wallet-connected bundle, tranche, note, lending, and portfolio flows. Won 1st place at the SCBC hackathon and Best Use of Solana.
AgentHire (SCBC Hackathon) · 28,970 lines · Python, JavaScript · Apr 2026
Agent marketplace on Avalanche Fuji that matches buyers and sellers of autonomous agents, with USDC routed through x402-style machine payments and gasless permits into escrow alongside ERC-8004 identity, on-chain reputation, slashable developer stake, and auction-based clearing when bids compete. Implemented in Flask and SQLAlchemy with Jinja2 templates and ethers.js wallet flows, using Python web3 to execute permit, deposit, and settle on Fuji without a standalone Node.js payment service. Integrated Akash-hosted inference (Qwen 2.5 Coder 7B), MCP tool discovery, Telegram streaming, Teleporter/ICM cross-subnet messaging, and a ChainTransaction-backed refresh path that keeps marketplace aggregates aligned to indexed Fuji activity between sparse blocks. Automated security gates are paired with structured human review before escrow completes payout. Won 1st place at the SCBC hackathon for agentic payments on Avalanche.
Cronos On-Chain Research (Penn Blockchain Conference) · 11,367 lines · Python · Mar 2026
Institutional-grade research pipeline for the Cronos (CRO) blockchain ecosystem built as a standalone investment thesis. Engineered an async distributed downloader with multi-endpoint RPC failover and checkpoint/retry across 29GB of raw block data. Ran 12 analytical modules covering the full ecosystem: behavioral bot classification using activity fingerprinting, wash-trading isolation via graph cycle enumeration and DEX direction-reversal detection, wallet clustering with Union-Find on funding-source and gas-price fingerprints, Gini coefficient holder concentration, Nakamoto coefficient validator tracking, DEX microstructure analysis, and staking emission sustainability modeling. Cross-chain peer benchmarking against BNB and OKB provided valuation context, feeding into a revenue-multiple model with bull/base/bear scenarios built on protocol fee projections and TVL trajectory assumptions. Layered in Reddit sentiment analysis across thousands of posts to capture community sentiment as a forward-looking signal alongside the on-chain fundamentals. Delivered as a 12-page interactive Streamlit dashboard covering every analytical layer from network health through valuation. Won 1st place in the Penn Blockchain Conference research competition.
Dramaalert (Penn Blockchain Hackathon) · 11,459 lines · Python, TypeScript · Mar 2026
An autonomous Polymarket trading agent that ingests 20+ real-time data sources (GDELT's 100-country news firehose, Wikipedia edit-velocity spikes that lead breaking news by 5 to 15 minutes, RSS, Reddit, and cross-platform prices from Kalshi, Metaculus, and Manifold) and distills them into 9 independent trading signals, each expressed as a Bayesian likelihood ratio (VPIN order-flow toxicity, cross-market arbitrage, news, an LLM superforecaster, Wikipedia velocity, Reddit sentiment, order-book spread, and resolution proximity among them). The signals fuse in log-odds space with structured correlation damping into a calibrated posterior probability and a 90% confidence interval, and every position is sized with a fractional (0.25x) Kelly criterion under proper fee math and portfolio-level exposure caps. It paper-trades by default or runs against the live Polymarket CLOB, with a React dashboard plus REST and WebSocket APIs streaming every signal and update in real time, and zero required API keys. Won 1st place and the Polymarket bounty at the Penn Blockchain Hackathon.
Laytus Protocol · 53,431 lines · Python, Solidity, TypeScript · Jan 2026
Structured position protocol on Robinhood Chain that lets users take positions on correlated outcomes across multiple prediction markets in a single atomic transaction. The pricing engine uses a Gaussian copula to model joint outcome distributions across correlated markets, with dynamic vig that adjusts spread based on real-time liquidity and correlation confidence. Correlation estimates are produced by an ensemble ML model (LightGBM + XGBoost) trained on historical market outcome data, with features covering market category overlap, shared resolution authorities, and time-to-resolution alignment. The backend is split into 7 FastAPI microservices handling quoting, order management, correlation inference, position tracking, settlement orchestration, and user state, each deployable independently. Quote integrity is enforced through EIP-712 typed structured data signing verified end-to-end between the Python quoting service and the Solidity settlement contract, preventing quote manipulation between issuance and on-chain submission. The settlement state machine manages the full position lifecycle: open, partially resolved, fully resolved, and clawed back, with on-chain transaction submission handled by a keeper that monitors resolution oracle feeds. Frontend built in React with real-time market data streaming and position P&L tracking. Won 2nd place ($40K) at the Arbitrum Open House in New York and reached the quarterfinals of the ADI bounty at ETHDenver.
Crypto Research (Midwest Blockchain Conference) · 41,881 lines · Python · Nov 2025 - Jan 2026
Blockchain forensics research targeting Pi Network combining NLP, on-chain analytics, and statistical modeling into a unified fraud assessment framework. Applied Levenshtein similarity clustering to Play Store review data to surface coordinated fake review campaigns, and cross-referenced technical claims against independent third-party sources across multiple verification dimensions to produce a composite credibility index. On the on-chain side, used chi-squared validated random sampling via the Horizon API to test whether reported activity distributions were consistent with organic usage, fit ARIMA models to exchange inflow time series to identify structural breaks, and ran Granger causality tests to determine whether social sentiment shifts directionally predicted on-chain activity or were simply coincident. Generated log-normal synthetic baselines validated via Kolmogorov-Smirnov tests to benchmark observed metrics against organic growth expectations. Delivered a Streamlit dashboard with network topology visualization, whale wallet activity timelines, and a fraud scoring breakdown. Won 1st place out of 57 teams in the Franklin Templeton Digital Assets research pitch competition.
GTO Poker Trainer · 10,389 lines · JavaScript · Nov 2025
Fully client-side poker training engine with no server dependency. Implements a 3-pass Fisher-Yates shuffle, a 9-rank hand evaluation hierarchy, and Omaha's mandatory 2+3 rule via exhaustive combination enumeration. The GTO layer computes optimal bet frequencies using pot odds, equity, and position, with a bluffing engine based on the Minimum Defense Frequency formula and an ICM calculator for tournament stack pressure. Supports 5 game variants (Texas Hold'em, Omaha, PLO, Pineapple, Crazy Pineapple) with 2-10 players, double board variants, and a Player Profiler tracking VPIP and PFR stats across sessions.
Plasma Donation Research · 10,102 lines · Python · Oct - Nov 2025
Economic behavior research treating plasma donation as a behavioral signal for household financial distress. Collected 80,000+ Reddit posts from 75+ subreddits using PRAW and Pushshift, applied VADER sentiment scoring, and built a composite Financial Distress Index from 7 FRED indicators. Ran Granger causality tests, Transfer Entropy, and Pearson/Spearman rolling correlations to measure lagged relationships between economic stress and donation activity. Found 10 statistically significant relationships, including a peak correlation of r=0.81 at a 3-month lag between U6 unemployment and plasma donation post volume.
Gappify Notification Bot · 1,630 lines · Python · Oct 2025
Airflow DAG on GCP Composer that orchestrates monthly accrual cycle reminders across seven finance teams. Reminder schedules are defined in a YAML template with business day offsets relative to MEC. The DAG integrates with Google Calendar to resolve due dates dynamically, queries an internal database for Slack member ID resolution, and sends channel summaries and personalized DMs with exponential backoff retry on all Slack API calls. It reduced manual follow-up work by approximately 80%.
FP&A Reminder Bot · 1,238 lines · Python · Oct - Nov 2025
Slack notification system for FP&A task accountability. Reads a task completion matrix from Google Sheets via service account auth, resolves owner emails to Slack member IDs through the Google People API, and sends personalized DMs with batch rate limiting (batch size 10, 0.5-second delays). Includes dry-run mode for pre-MEC validation and structured logging throughout the delivery chain.
Data Analysis Pipeline · 1,107 lines · Python · Jan 2026
General ledger mapping and month-end reconciliation pipeline. A UnifiedGLMapper loads 4,029 account mapping patterns across 22 types and ranks candidates by priority and confidence when multiple patterns match, reaching 99.07% accuracy across historical backtests. The daily pipeline deduplicates source exports, flags accounts with variance beyond configurable thresholds, and generates formatted Excel reports with conditional formatting for finance reviewers.
Terraform Config · 473 lines · Python · Nov 2025
GCP infrastructure automation for the internal finance tool stack. Covers service account provisioning, IAM bindings, Cloud Function deployments, and API enablement. Includes a GoogleOAuthManager with an interactive setup wizard, predefined scope configs per bot, and a base64 export utility for storing credentials as Airflow Variables in GCP Composer without plaintext secrets in deployment configs.
App Scripts · 2,083 lines · Google Apps Script · Jun - Oct 2025
Seven Google Apps Script automations for internal finance workflows: a Sheets-to-Calendar sync with color mapping and duplicate prevention, a CCIL Fair Value Classifier, a FloQast MEC status updater, a Flux Analysis tool for period-over-period GL variance, a Google Drive Linker, and two Slack bots handling incident routing and internal workflow notifications.
For the high-level overview, head back to github.com/tharune.