Project 01 · Applied AI · Local LLM
Cadence: structured intelligence from earnings calls.
A local-first AI tool that turns an unstructured earnings call into a structured, queryable dashboard in about a minute.
Premise: earnings calls are dense and slow to read at scale, and cloud AI raises privacy and cost questions for market-sensitive text.
A local large language model runs the transcript through schema-constrained decoding and feeds a Streamlit dashboard, entirely on-device. Built end to end in Python, so the transcript never leaves the machine and each run costs nothing.
StackPython · OllamaLocal LLMSchema-constrained output
Project 02 · Data · Forecasting
Demand Forecasting: the seasonal shape, the accuracy, and the variance you monitor.
A monthly demand series forecast with a seasonal model, backtested on a rolling origin against a naive baseline, then wrapped in a forecast-versus-actual variance monitor.
Premise: a forecast is decision infrastructure for replenishment and assortment, so the work is to capture the seasonal shape, earn trust on accuracy, and catch the moment the number drifts from what sells.
Holt-Winters on a real 204-month demand series holds a 6.5% WMAPE across a six-year rolling backtest, about 40% less error than a seasonal-naive baseline. A control-chart monitor reads each month's actual against forecast and flags a run of same-direction misses as a bias signal to override. Built in Python, pandas, and statsmodels, with sourced methodology.
StackPython · statsmodelsHolt-Winters · Rolling backtestWMAPE · Bias · SPC monitor
Project 03 · Data · Causal Inference
Did the Campaign Work? causal inference from a randomized experiment.
Estimating the causal effect of a marketing treatment from a 64,000-customer randomized experiment: the lift with a confidence interval, the balance check that makes it causal, who responds most, and the design math.
Premise: customers who got the email visited more, but the people you choose to email are usually your best customers, so a raw comparison confounds the campaign with who was targeted.
Randomization breaks that link: the email drives a +6.1 percentage-point visit lift (95% CI +5.5 to +6.6, z = 22), a covariate-balance check confirms the arms were comparable, the mens creative out-lifts the womens, and a power calculation sizes the next test. Built in Python, statsmodels, and scipy, with sourced methodology.
StackPython · statsmodels · scipyRCT · Causal inferenceBalance · Power · Uplift
Project 04 · Applied AI · ML Foundations
Machine Learning from Scratch: the math, by coding it.
Implementing core machine-learning algorithms from first principles, from the perceptron to neural networks and clustering.
Premise: calling a library is easy; understanding why it works means building the algorithm yourself.
An ECE421 sequence implementing a perceptron and linear regression, a neural network from scratch and then in PyTorch with a CNN, and k-means and a Gaussian mixture model, validated on real datasets.
StackPython · PyTorchNeural nets · CNNk-means · GMM
Project 05 · Applied AI · Knowledge-Based Agents
Wumpus World: reasoning under uncertainty.
A from-scratch simulator and a logic-driven agent that reasons from percepts to find the gold and survive.
Premise: an agent in a partly hidden world has to infer what it cannot see, turning local clues into safe moves.
I built the classic AI testbed in Python, a cave of pits and a Wumpus with full percepts, actions, and scoring, then a knowledge-tracking agent that infers hazards from breeze and stench cues and chooses its actions, benchmarked against a naive agent. About 800 lines, sole-authored.
StackPython · AIKnowledge-based agentSole author
Project 06 · Applied AI · Industrial Operations
Wellhead: physics-informed AI for upstream operations.
Physics-informed edge AI for oil and gas operations, with regulator-ready ESG signing built in: it survives weeks disconnected and learns across operators on aggregated gradients, not raw telemetry.
Premise: reservoir engineers reject AI they cannot mechanistically defend, and operational AI and regulator-grade emissions reporting still live in separate systems.
A scoped deployment for upstream operations: a physics-informed failure-prediction runtime rather than black-box ML, edge-deployed so it survives connectivity loss, with signed ESG telemetry co-produced at inference time. Cross-operator learning happens on aggregated gradients, never raw reservoir data, so competitive sensitivity is preserved. The north-star is unplanned downtime avoided per well, with reservoir-engineer approval rate and regulator audit-pass rate as counter-metrics.
StackPhysics-informed MLEdge deploymentESG · methane compliance
Project 07 · Data · Machine Learning
Credit Default Risk Model: rank the risk, set the policy.
An end-to-end machine-learning model that predicts default probability and turns it into a lending decision.
Premise: a lender approves on a policy, not a probability, so the hard part is the cutoff and what it costs.
A gradient-boosting model on the German Credit data reaches about 0.80 AUC, checked against a logistic baseline, with calibration and a threshold that traces the approval-versus-risk trade-off. A responsible-AI layer then audits approval-rate fairness across protected groups with fairlearn (disparate impact, equalized odds) and shows a bias-mitigation trade-off with a model card. Built in Python, scikit-learn, and fairlearn.
StackPython · scikit-learnGradient boosting · CalibrationResponsible AI · fairlearn
Project 08 · Data · Quality & Anomaly Detection
Market Data Health Monitor: catch the bad feed first.
A Python tool that ingests a markets feed, runs data-correctness checks, and flags abnormal behavior before it reaches a model.
Premise: research and trading run on clean data, and the most expensive failures start as a quiet bad feed: a gap, a stale value, or a price that should never have printed.
It runs calendar, duplicate, validity, staleness, and freshness checks, then rolling z-score anomaly detection on returns and volume, and returns a per-feed verdict on whether to hold downstream models. A companion PySpark pipeline models the feed into a star-schema DuckDB and Parquet lakehouse with per-feed data-quality SLAs and source-to-target column lineage, plus a Databricks variant that writes Delta to Azure Data Lake and an Apache Airflow DAG that orchestrates the batch with a data-quality gate. Built in Python, pandas, PySpark, and DuckDB.
StackPython · pandas · PySparkDatabricks · Azure ADLS · DeltaAirflow · Star schema · Lineage · SLAs
Project 09 · Data · Quantitative Finance
Has the Value Premium Decayed? A retrospective on HML.
A research note on the Fama-French value factor, asking how strong the premium has been across history and how much should carry into forward expectations.
Premise: treating an in-sample factor mean as a forecast is a classic error, and this note is built to expose that gap.
Using monthly Fama-French factors from the Ken French Data Library, it estimates the full-sample premium with Newey-West standard errors, tracks stability across subperiods and a 10-year rolling window, measures the value-winter drawdown directly, and closes on an honest forward read instead of a point forecast. Built in Python and statsmodels.
StackPython · statsmodelsNewey-West · RegimesFactor research
Project 10 · Data · Customer Experience Analytics
What Makes Patients Recommend? A key-driver analysis.
A from-raw-data analysis of what moves the healthcare 'would you recommend' score, the patient-experience analogue of NPS, across 2.3M CMS survey responses.
Premise: for a high-touch service the question is not the score itself but which experience drivers actually move it, and where to spend first.
Built directly on the public CMS HCAHPS survey in DuckDB and SQL, with no BI tool. A standardized key-driver regression finds nurse communication is the strongest driver of recommendation, shows the lowest-scoring dimension is a weaker lever, flags early-warning states, and ties each recommendation to cited research. Prototyped with Claude.
StackDuckDB · SQLKey-driver regressionCMS HCAHPS · 2.3M surveys
Project 11 · Data · Manufacturing Systems
Takt: a manufacturing-execution shop-floor monitor.
A working model of an MES, built in C# and SQL: it tracks the shop floor, computes the metrics a plant runs on, and flags the work centers that need attention.
Premise: a manufacturing-execution system has to turn a shift of raw machine events into the signals a plant actually acts on, starting with where time was lost and whether quality held.
It models work orders, machines, a production-event log, and defect genealogy in SQL, then computes OEE (availability times performance times quality, per Nakajima), a downtime Pareto, and first-pass yield. A support pass turns those metrics into a per-work-center verdict, OK, watch, or hold, with the reason attached, and the repo ships a runbook for triage. Built in C# and SQLite, with metric definitions anchored to the SEMI E10 and ISA-95 standards.
StackC# · SQLiteOEE · Downtime ParetoMES · ISA-95 / SEMI E10
Project 12 · Robotics · Autonomous Systems
Autonomous Maze Rover: find your place, then move.
An Arduino rover that localizes itself in an unknown maze and delivers a block to a target zone, with CAD and control code I worked on.
Premise: a mobile robot has to know where it is before it can act, and the hard part is turning noisy sensor readings into a position and a plan.
A four-person MIE444 build. The rover turns its sensor readings into a front-right-back-left signature, matches that to a stored maze map, then runs a breadth-first search to the loading zone, where a servo gripper picks up and delivers the block. I worked on the mechanical CAD and the localization and obstacle-avoidance code.
StackArduino · C++CAD · SensorsLocalization · BFS
Project 13 · Mechatronics · Embedded Systems
Automated Chess Gantry: a digital move becomes motion.
A three-axis gantry that executes online chess moves by gripping and relocating pieces, including captures.
Premise: turning a digital move into precise physical motion means coordinating steppers, a gripper, and homing without ever losing position.
An MIE438 embedded-systems design. An Arduino on a CNC shield drives three NEMA 17 steppers and a servo gripper over a serial link, with limit-switch homing and acceleration-controlled motion in firmware. A design-and-firmware deliverable backed by a costed bill of materials.
StackArduino · AccelStepperSteppers · ServoEmbedded firmware
Project 14 · Mechatronics · Analog Electronics
Oscilloscope Input Stage: from op-amp to fabricable board.
The analog front-end of an entry-level oscilloscope probe, taken from op-amp design through a manufacturable PCB.
Premise: measurement hardware lives or dies on its front-end, which shifts a wide bipolar input into a clean, safe range a converter can read.
An MIE346 two-part design. It compares op-amp architectures, settles on a TL084 topology with selectable attenuation and AC/DC coupling verified by simulation, then becomes a through-hole PCB in EAGLE with a full bill of materials and Gerber files.
StackAnalog · TL084EAGLE · PCBSimulation
Project 15 · Robotics · Control Systems
Control Systems Lab Series: from model to stable plant.
Four feedback-control labs, from equations of motion to stabilizing a real unstable plant.
Premise: a controller is only as good as the model under it, and the proof is whether the real system settles where you predicted.
An MIE404 sequence across a quarter-car suspension, power-grid voltage, an airfoil, and magnetic levitation. Each lab derives a transfer function, designs a PI or PID controller, and validates it in Simulink and MATLAB, with the airfoil PID matching its analytical rise time and overshoot within about 1%.
StackMATLAB · SimulinkPID · PI controlTransfer functions
Project 16 · Manufacturing · CAD
4-Axis CNC Milling Machine: every drawing, justified.
A concept-to-CAD design of a four-axis desktop CNC mill, with all of the engineering drawings authored by me.
Premise: a machine design is a chain of trade-offs, which mechanism to use and what it costs, all justified on paper before anything is cut.
An MIE243 design taking a CNC mill from market research and specifications through weighted concept selection and mechanism trade studies, across two CAD iterations, to a final four-axis machine. I authored the full assembly and all four sub-assembly drawings.
StackSolidWorks · CADMachine designEngineering drawings
Project 17 · Manufacturing · Assembly Automation
Caster Assembly Automation: a line for tiny parts.
A flexible automated assembly line to mass-produce two-inch chair casters from sub-inch parts.
Premise: assembling parts under 25 mm at volume is a fixturing and orientation problem before it is a robotics one.
An MIE221 manufacturing design. A rotary index table orients the bolts, transfer lines feed the washers, a programmable positioner drives the nuts, and an indexed conveyor places the wheels, all backed by a SolidWorks model with exploded views.
StackSolidWorks · CADAssembly automationManufacturing
Project 18 · Thermofluids · Experimental
Thermodynamics Lab Series: theory against the bench.
Instrumented labs validating gas-law and energy-balance theory against measured data on a two-tank rig.
Premise: theory is only as good as the bench, so these labs put thermodynamic laws against measured pressure and temperature.
An MIE210 sequence on a two-tank pressurized-air rig: ideal-gas path-independence, the first law with PID-controlled heaters, and open and transient systems with throttling and heat loss, each reduced from measured time-series and compared to theory.
StackThermodynamicsData acquisitionTheory vs experiment
Project 19 · Thermofluids · Fluid Mechanics
Open-Channel Flow: where the jump dissipates energy.
A flume experiment verifying the Bernoulli equation and characterizing a hydraulic jump.
Premise: open-channel flow is where clean theory meets friction and turbulence, and a jump that dissipates energy fast.
An MIE312 flume lab measuring flow over a sluice gate and a submerged sill, deriving downstream velocity from Bernoulli within about 0.15 m/s of measured, then classifying a hydraulic jump by its Froude number with a head-loss estimate and a discussion of error sources.
StackFluid mechanicsBernoulli · FroudeFlume testing
Project 20 · Thermofluids · Data Center Cooling
Data Center Fundamentals: cooling, power, and the rack.
A self-directed study connecting heat-transfer fundamentals to how a modern data center is cooled, laid out, powered, and kept efficient.
Premise: a data center is a heat-management problem first: every watt a server draws becomes heat that has to be moved before the hardware throttles.
It works through hot-aisle/cold-aisle airflow, sizes rack cooling from the Q = m-dot c_p deltaT energy balance, lays out racks and the utility-to-server power path with N+1 redundancy, and closes on PUE and the shift to liquid cooling. Built to bridge a mechanical-engineering background into data center infrastructure.
StackHeat transfer · AirflowRack, power · PUEAir vs liquid cooling
Project 21 · Thermofluids · Heat Transfer
Heat and Mass Transfer: keeping electronics cool.
Convection labs and a finned heat-sink design, framed around keeping electronics and batteries cool.
Premise: every chip and battery is a thermal problem, and the design question is how much heat a given sink can move before the part overheats.
An MIE313 set of labs measuring natural and forced convection on a heated block, modeling two-dimensional board heat-spreading with a finite-difference grid, and sizing a finned aluminum heat sink to hold an EV battery pack below 60 C in an Energy2D simulation.
StackHeat transferPython · FDMEnergy2D
Project 22 · Thermofluids · Application Engineering
Ember: sizing and quoting an industrial heater.
A heater sizing and quoting tool: it sizes the power for a heating application, checks watt density against the fluid limit, builds the bill of materials, and prices the quote.
Premise: sizing an industrial heater is rarely about total power. The binding constraint is usually watt density on the element, or the fluid film overheats and the oil cokes.
Given a fluid, a volume, a target temperature, and a heat-up time, Ember computes sensible heat and standby loss to size the power, then spreads it across enough elements to hold watt density under the fluid limit, which is why an oil heater needs many low-density elements. It selects a standard rating and builds a costed bill of materials and a quote. Built in Python, with the method anchored to heat-transfer fundamentals and industry watt-density guidance.
StackPythonHeat transfer · Watt densityBOM · Quoting
Project 23 · Biomechanics · Modeling and Testing
Fibrotic Myometrium Biomechanics: modeling labor forces.
Modeling how fibroids change the uterine muscle's ability to generate labor forces, where I co-led testing and modeling.
Premise: soft tissue is viscoelastic, so its mechanical behavior needs both physical testing and a model that captures time-dependence.
An MIE439 project. The team built gelatin-PVA phantoms matched to healthy and fibroid stiffness and tensile-tested them, then adapted a spring-dashpot rheological model solved symbolically in MATLAB. I co-led the mechanical testing and the mathematical-model development.
StackBiomechanicsMATLAB · RheologyTissue phantoms
Project 24 · Bioengineering · Image Analysis
Proteoglycans and Aortic Failure: measure it, then relate it.
A MATLAB image-analysis pipeline relating proteoglycan content to the mechanical failure of aortic-wall tissue.
Premise: you cannot relate biology to mechanics without first measuring it, here by quantifying proteoglycans across whole-slide tissue scans.
My MIE498 undergraduate thesis in the Simmons Lab. I wrote a MATLAB pipeline that tiles whole-slide pathology scans, isolates the stained pixels, and quantifies proteoglycan area and pooling, then related those measures to delamination strength and energy loss.
StackMATLAB · Image analysisBioengineeringUndergraduate thesis
Project 25 · Bioengineering · Signals
Physiological Control: breathing, the heart, and the signal.
A Simulink model of how breathing drives heart rate, validated against real ECG recordings.
Premise: the body runs on feedback loops, and respiratory sinus arrhythmia is one you can both model and measure.
A BME331 lab modeling respiratory sinus arrhythmia in Simulink, then analyzing recorded ECGs: annotating the P-Q-R-S-T complex, quantifying heart-rate variability, reconstructing a lead by Einthoven's law, and estimating the heart's electrical axis.
StackSimulink · MATLABECG · SignalsControl systems
Project 26 · Bioengineering · Assays
Protein and DNA Assays: measuring the unknown.
Absorbance and fluorescence assays used to back out protein and DNA concentrations from a mixed sample.
Premise: before you can engineer with a sample you have to quantify what is in it, even when protein and DNA signals overlap.
A BME440 lab combining UV absorbance with the more sensitive BCA protein assay and a SYBR Green DNA assay. Dilution series of the standards and the unknown were read on a plate reader, with standard curves near an R-squared of 0.999 interpolating the result.
StackBCA · SYBR GreenPlate readerStandard curves
Project 27 · Sustainability · Thermofluids
Water as Refrigerant: cooling without the climate cost.
A capstone designing a water-refrigerant (R718) air-conditioning system for cleantech client Enersion.
Premise: most air conditioning runs on high global-warming refrigerants, and using water as the refrigerant cuts that to near zero, if the cycle can be made to work.
An MIE491 capstone for Enersion Inc. The team reviewed refrigeration cycles and ran the thermodynamic calculations to select components for a single-stage water-refrigerant system, reaching 310 W of cooling at a theory-to-actual performance gap the report is candid about. I contributed design sections and several of the figures.
StackThermofluids · HVACSustainability · R718Cleantech capstone
Project 28 · Sustainability · Life-Cycle Assessment
Faux versus Real Leather: an LCA for Tesla.
A life-cycle assessment advising Tesla on polyurethane faux leather versus bovine leather for cabin interiors.
Premise: sustainable material choice is rarely obvious, so it needs a full life-cycle accounting rather than a gut call.
An MIE315 consultant's report running a process-based LCA in OpenLCA with the TRACI method, alongside financial and societal analyses. Faux leather came out ahead on the environmental and societal axes, with a net present value of savings around $11 billion, so the report recommends it.
StackLCA · OpenLCADesign for EnvironmentTRACI
Project 29 · Sustainability · Solar Performance Engineering
Helios: operating a solar plant against its contract.
A utility-scale PV performance engine in Python: an expected-energy model for a 100 MW single-axis-tracker plant, the Performance Ratio and yield metrics owners and lenders track, an energy-loss waterfall, a capacity test, and a fleet view that flags the plants drifting below guarantee.
Premise: a solar performance engineer is paid to hold a plant to the energy model it was financed on, measuring delivered energy against expected and attributing every lost megawatt-hour to a cause.
It models the plant with the NREL PVWatts method (plane-of-array irradiance, a cell-temperature derate, a DC-loss stack, inverter clipping, and availability), reports Performance Ratio and specific yield per IEC 61724-1, builds an energy-loss waterfall from ideal to delivered, runs an ASTM E2848 capacity test that isolates excusable losses, and flags underperforming plants across a fleet. Calibrated to empirical US-Southwest fleet data (Berkeley Lab, NREL ATB).
StackPython · NumPyPVWatts · IEC 61724-1PR · loss accounting · ASTM E2848