Selected work.

Systems, products, and the decisions behind them.

TradeAI

Same rules. Less stress.

Result
1.6 Sharpe and 2.0 Sortino ratios (annualized), with an 8% max drawdown, in live equity trading since March 2026 (about seven months).
Why
Steadier results than my own trading: the same rules every trading day, without emotional decisions.
Built
LightGBM models with feature and inference pipelines, a daily rebalance planner, execution through Alpaca, a PostgreSQL trade ledger and a Next.js dashboard.
How it runs
A daily rebalance, sized by volatility. Plans are announced in Telegram and, if trading is enabled and checks pass, execute unless I reject them before the close.
Explore TradeAI
  1. Before
    1. 01ManualI planned and traded by hand.
  2. Build and validate
    1. 02TrainLightGBM models on historical data.
    2. 03BacktestThe strategy tested on past data.
    3. 04Paper tradeReal market, no real money.
  3. Live
    1. 05AssistedTradeAI plans positions; I add my judgement and place the orders by hand.
    2. 06AutomatedIt trades through Alpaca unless I veto it in Telegram.

Kubernetes on EC2

Built from the ground up.

Why
To learn Kubernetes from the ground up instead of relying on a managed EKS control plane, and to find out the real trade-offs.
Built
A kubeadm cluster on EC2 provisioned with Terraform, Jenkins pipelines to development and production, and an ALB with TLS and subdomain routing.
On top
A separate internal tool, a ticket board with a Rails API and a Next.js frontend, shipped through the same pipelines.
Trade-offs
Pros: it cost less than a managed control plane. Cons: upgrades, node joins and add-ons became my maintenance, and one control-plane node meant no high availability, a risk I accepted knowingly.
Explore Kubernetes on EC2
  1. ProvisionTerraform · VPC · EC2
  2. Bootstrapkubeadm · control plane + workers
  3. Add-onsLoad balancer controller · DNS
  4. DeliverJenkins pipelines
  5. RouteALB · TLS · subdomains

Real-Time Market Analytics Pipeline

A path for every event.

Built
Kafka ingestion, Spark Structured Streaming over 1m, 5m, 15m and 60m windows, an S3 Parquet data lake and a FastAPI dashboard on AWS.
Key decision
Event-time windows with a 2-minute watermark, so late candles still land in the right window without unbounded state.
Daily batch
EventBridge, Lambda and SSM start a Spark job that computes 43 lagged ML features and forward-return labels.
Infrastructure
Terraform provisions the VPC, four EC2 instances and the S3 bucket.
Explore Real-Time Market Analytics Pipeline
  1. yfinance — 1-minute candles
  2. Producer — EC2 · every 60 s
  3. Kafka — 3 partitions, keyed by symbol
  4. Spark Streaming — 1m / 5m / 15m / 60m windows
  5. S3 + PostgreSQL — lake + serving store
  6. FastAPI — API + dashboard

More to explore.

  1. SYNCDKeeping the interface in sync.An early-stage startup for local events, built outside our classes and jobs. I built its interface in Next.js and TypeScript, with API updates in Ruby on Rails.
  2. Market-Stress Exposure ScalingTest the idea. Follow the evidence.Can daily market-stress signals improve a long-only momentum strategy by scaling its exposure? I compared LightGBM and logistic-regression overlays with simple rules, and a simple drawdown rule beat the models.Course research · TECH-GB.2350 Robo Advisors & Systematic Investing
Explore earlier work