Malaysian in SF/London · Physics × Artificial Intelligence
Hi, it's Owen Loh
Physics × Artificial Intelligence. I turn messy real-world domains — batteries, coffee, seismic, CRISPR — into models with computable sensitivities, then build the AI and ML systems that compute, automate and transcend them.
Physics at Oxford University, on-leave building in stealth.
interactive
PourDynamics engine
A multiscale physics engine mapping brewing variables to coffee flavour.
Two coupled physics: Darcy flow of water through the porous coffee
bed (advection–dispersion), and a 2D-axisymmetric
Doyle–Fuller–Newman extraction model ported from lithium-ion
batteries — coffee and a battery are, mathematically, the same
equations — validated to sub-0.2%. A sensory layer then maps
concentrations to taste. Drag the two controls and read off
J = dy/dx: which knobs actually move the cup.
local sensitivities (finite-difference Jacobian)
∂(bitter)/∂(flow)—∂(acidity)/∂(grind)—∂(body)/∂(grind)—Drag the controls to brew a cup.
An interactive toy model — directional, not calibrated. The real engine (a DFN model validated against the analytical sphere solution) lives at github.com/owenloh/PourDynamics.
Catalon (startup cofounder)
AI automation for chemical commercial teams. Purchase-order processing, ~40 min → ~3 sec.
As startup cofounder I built the agentic pipeline behind Catalon. It reads an inbound PO email, classifies intent, resolves the customer against their ERP, extracts and price-validates every line item — chemical-synonym resolution, density-based lbs↔gal conversion, customer rules — and drafts an ERP-ready order for one-click approval. Sub-3-second latency, on top of existing systems, no rip-and-replace.
- Multi-stage state machine: deterministic prefilter → classify → SQL+LLM customer-resolve → schema extraction → self-healing retry — with circuit breaker, rate limiter and dead-letter queue.
- Schema-decoupled: a reusable core with hot-swappable per-customer “context cartridges.” Eval-driven tuning, not fine-tuning → 99%+ accuracy.
- 2 paying distributors, $60K ARR and a $1.2M pipeline within 2 months — then exited.
Subj: PO 4471 — restock please ship to our Houston dock: 2 drums acetone, technical 99.5% 500 gal isopropanol (usual grade) need by Friday — Net 30.
Real inbound POs are messy — wrong units, chemical synonyms, free text. The pipeline normalises all of it and drafts an ERP-ready order in ~3 seconds, with a human making the final one-click approval.
SeisPilot
Voice + natural language → 3D seismic navigation inside pro software “Tornado.”
Professional seismic software has a brutal learning curve and expert time is scarce. I wrapped it in an agent: describe what you want to see and an LLM turns it into live, validated commands against the application’s API — like a seismologist driving it for you.
- NL → JSON-RPC via an LLM, gated by a command validator (only whitelisted calls run), with multi-LLM fallback and a queued listener.
- 20-level undo/redo; bookmark engine; bidirectional transform between seismic (inline/crossline/depth) and Cartesian space.
- Built solo in ~3 weeks at Viridien on my own initiative; drew immediate traction from teams across China, the Netherlands, the US and Singapore.
iGEM 2025 (Oxford University)
Gold medal — high-performance CRISPR guide discovery.
The job: find guide RNAs that hit a target bacterium while sparing the commensal flora — a nearest-neighbour search by Hamming distance over millions of genomic sites. I built a two-layer engine: a trie prefix filter (exact first 13 nt) drops ~85% of candidates, then a BK-tree Hamming search over a 2-bit-packed genome handles the rest.
- Brute force is
O(N·M·L)— every target guide against every commensal guide. The hybrid isO(N·(k + log M·L)): linear in targets, with the database term dropping from M to log M. - ~2.3M indexed guides across 50 genomes; ~3 s per guide; ~2000× faster than the BLAST equivalent; 1.2 GB bit-packed vs 4.8 GB as strings; 100% accuracy. ML & algorithm lead at iGEM 2025.
The trie + BK-tree finds the nearest commensal match (mismatches in amber). At or above the threshold = off-target risk, rejected; below = a unique guide, safe to target. Real runs: ~3 s per guide over 2.3M, ~2000× faster than BLAST.
Battery State-of-Health
A cell’s health is usually read by tearing it down. I treat it as
an inverse problem instead: reconstruct the full-cell OCV from its cathode
and anode contributions, and the way they have shifted reveals exactly
which electrode lost capacity — non-invasively. The standard fit
misbehaves for NMC811–graphite because scipy.curve_fit
returns a local minimum.
- Differential Evolution for a true global fit — least-squares 0.0004 vs 0.005.
- DV_fit: differential-voltage feature-matching via optimised Dynamic Time Warping — peak/dip locations are invariant in lithiation.
- Degraded_OCV_fit over a Pchip-DTW manifold — the most consistent modes so far. NMC811–graphite, 41 cells; awaiting experimental verification.
Left: match the reconstructed OCV (solid) to the measured degraded cell (dotted). Right: the same two numbers as physical capacity — the smaller electrode sets the cell’s state of health.
more work
More across agentic AI, ML and hardware — click any to expand.
Microscopy Computer Vision Suite Four real-time microscopy image-processing modules.
Built solo at Aurox, each module from scratch in ~2 weeks, for manufacturing and QC of microscopy equipment.
- Mirror-flatness interferometry (FFT/vision); a Photoshop-like GUI for final-product testing; calibration-target alignment; triplet-lens alignment.
- OpenCV, tkinter, multithreading, camera-SDK integration — real-time throughout.
FlowR (MellowDrip) A physics-informed smart coffee brewer.
Modelling immersion vs percolation (Noyes–Whitney diffusion) showed only two variables really matter: flow rate and grind size. So I built hardware to control them.
- Measures output flow rate via the differential of two scales, feeding a PID loop on an ESP8266 (C++, real-time) that controls input flow.
- FlowR v1 proved the concept; v2 added aesthetics and a Blynk IoT app. Showcased to 150 people.
SEGYScribe AI extraction of SEG-Y seismic metadata — 90%+ accuracy.
Clients ship SEG-Y files in every imaginable format; byte locations for trace headers must usually be found by hand. This finds them.
- Chain-of-thought reasoning proposes byte-location hypotheses, statistically validated and refined in a loop until consistent.
- 80+ attribute ontology; 90%+ accuracy; ~4,000 lines across ~13 modules; built from scratch in ~2 weeks.
YT Title Tracker Makes YouTube’s invisible title A/B tests visible.
YouTube quietly A/B-tests video titles, but each viewer is locked to one “sticky” variant — so the experiments are invisible. After watching Veritasium reword the same video over and over, I wanted to actually see what was being tested, so I built a tracker.
- The trick: rather than scrape fragile HTML, it calls YouTube’s internal InnerTube API and rotates a fresh
visitorDataidentity per request — so every sample looks like a different viewer, surfacing variants a single account never could. - Watches 18+ channels via RSS, samples new uploads immediately and re-samples hourly, then posts a timestamped variant history once a title stabilizes. Flask + PostgreSQL, deployed on Railway.
Alistair-MCP The backend for my personal-assistant OS.
One assistant identity that follows me across clients, backed by a single bridge instead of a pile of disconnected integrations.
- A FastAPI bridge unifying my memory, Notion, Whatsapp, Google Calendar, Gmail, Github and a Microsoft To-Do in-tray behind one HTTP/MCP API.
- Skills are loaded at runtime from a manifest; Claude, Chatgpt or a real-time voice front end (Pipecat) streams from the model API while heavy agentic work runs in the background.