Sidhu
I'm a Data Science student at Simon Fraser University who builds ML systems end to end: a fine-tuned code LLM, an inference serving stack, a query engine in Rust. Then I benchmark them honestly, negative results included.
Hi! I'm Aarmen, a data science student at SFU who spends most of his time on machine learning systems and applied AI. I got into this through the unglamorous half of it: fine-tuning models on a single consumer GPU, watching an inference server buckle under load, tracing why a benchmark score was lying to me. That's still the part I like best. I care about honest evaluation, baselines before models, and writing down the results that didn't work as clearly as the ones that did. Right now I'm building toward research on generative models, and looking for a Fall 2026 co-op where I can work on ML systems other people depend on.
GenAI-Stack-Coder
Fine-tuned Qwen2.5-Coder-7B with QLoRA on a single 12GB GPU so it writes current OpenAI, Anthropic and Ollama SDK code instead of 2023-era calls. A self-built 50-prompt benchmark went 12% to 72% with zero deprecated APIs after tuning, and the demo app's first version was written by the tuned model itself through a ~400-line agent harness.
Mailo
A multi-agent email-campaign planner on Amazon Bedrock AgentCore: a thin orchestrator delegates to three specialists over A2A, with MCP tool-calling through a Cedar-gated gateway. Zero-trust identity minted per request, per-user memory with tenant isolation, online LLM-as-judge eval on 25% of traffic, and two real bugs fixed: an IDOR in tenant identity and an MCP connection leak.
InferBench
A FastAPI + ONNX Runtime serving stack with dynamic batching, an LRU prediction cache, backpressure and INT8 quantization, hammered by six k6 benchmark scenarios from Poisson arrivals to spike tests. Every response carries a latency decomposition, and the honest negative result is written up: at saturation, no batching policy beats load shedding.
2D Visualizer
Drifting Models (Deng et al. 2026) ported from JAX to PyTorch and run on six 2D toy distributions: one forward pass at inference, no iterative sampler. Up to 500x MMD² reduction over an untrained MLP, a quiver plot that makes the drift field visible, and an honest miss kept in the writeup: concentric rings only reach ~97x.
Self-Supervised CIFAR-10
A ResNet encoder pretrained with three self-supervised objectives (MAE, VICReg, NT-Xent), feeding a class-conditional generator with FiLM conditioning, self-attention and EMA weights. Trained 200 epochs in 12 hours on an RTX 2000 Ada: 78.35% linear probe, 79.55% kNN, class-recognizable samples with clean t-SNE separation.
Plume
A SQL-style query engine in Rust from scratch: five crates covering a typed logical plan, a five-rule optimizer, seven join shapes and Kleene NULL logic over Arrow and Parquet. 79 of its 208 tests diff every result against DuckDB, so if cargo test is green the answers agree; row-group pruning cuts decoded rows 8x on a 1M-row fixture.
Strata Warehouse
An end-to-end SaaS analytics lakehouse: dlt ingests a simulated 24-month B2B business from Postgres into MinIO Parquet, dbt on DuckDB models a Kimball warehouse, and Dagster orchestrates 29 assets on daily partitions. 179 dbt tests gate quality over 11.4M usage events, feeding 6 marts and an 8-page Streamlit dashboard with a live data-driven story page.
BoardShop
A full Salesforce app for a snowboard repair shop: 4 custom objects with stacked rollups, layered Apex (trigger to handler to service to selector), a technician work-queue LWC and a pickup-ready email Flow. GitHub Actions runs Apex tests, Jest and PMD on every PR; 25 Apex + 4 LWC tests hold 95% org coverage.
Pivot
A full-stack word-ladder game with deterministic daily puzzles: an FNV-1a hash of the date seeds the same puzzle for every player worldwide, no database required. Wildcard-bucket grouping builds the 4,030-word graph in ~7 ms instead of 16M pairwise comparisons, and one BFS routine powers solving, hints and daily selection.
API Research Volunteer
Wrote Python scrapers extracting endpoint, auth, and schema metadata from 500+ public and private APIs across 10+ industries. Replaced manual cataloging and fed TeejLab's API-discovery platform: real contributions to a production product, with APIs classified by industry, function, and compliance to improve enterprise searchability.
- Calibrated logistic model predicting 3-day plant-stress spikes: ROC-AUC ~0.78 vs a 0.63 current-stress baseline, validated on a time-based split with explicit leakage prevention.
- Turned the model into a daily risk-ranked watch-list: ~2.3× lift catching stress spikes in the top 20% of plots, each alert surfacing its top controllable driver.
- Agentic RAG assistant over the operational data and a document corpus: hybrid retrieval with sentence-transformers plus safe pandas query tools, every answer cited.
- Refused three tempting-but-unsupported claims: won trust by not overclaiming.
- Modeled BC Hydro's supply-chain exposure under an overnight 25% U.S. tariff scenario, combining internal stock and lead-time data with Logistics Performance Index scores.
- Found Major Equipment plus Material & Logistics drive 70%+ of total tariff exposure, with switchgear and distribution transformers the largest single-category risks.
- Proposed a phased plan: near-term safety stock and dynamic allocation, then supplier diversification through 2028.
- Passive gait monitoring from floor vibrations: an ADXL355 accelerometer under the floorboard with an ESP32, sampling at 2-5 kHz, no wearables or cameras.
- Morlet wavelet pipeline recovers cadence, walking speed and symmetry from footstep vibrations; deliberately framed as change detection, not disease diagnosis.
- Mixed-doubles curling analytics: ends 5-7 are the optimal Power Play window, with end 5 at a -1 score differential showing the highest delta (+1.756 expected points).
- Built a Power Play Performance Index ranking 25+ national teams; timing and execution quality separate elite teams from average ones.
Aarmen Sidhu
About
I build things end to end and then hold them to a number. A Rust query engine diffed against DuckDB. A 7B code model fine-tuned until a real benchmark moved 12% → 72%. A lakehouse where 179 tests are a gate, not a hope. The through-line is honesty: I keep the negative results in.
Off the clock I snowboard (there's a Salesforce app about that here) and throw curling stones at hackathon datasets.
Stack
Languages · Rust, Python, TypeScript, SQL, Apex
ML/AI · PyTorch, QLoRA, ONNX, RAG
Data · dbt, Dagster, DuckDB, Arrow
© License
© 2026 Aarmen Sidhu. The content here (projects, numbers, words, photos) is mine: measure me against it. The site itself is an original IDE-style build, Please don't reuse my design system or my content without permission.