Projects¶
Two projects · one system of evidence
A portfolio of services, and the template it produced¶
Everything here is two projects. The ML-MLOps Portfolio — one monorepo with three production services. And the Production Template — the open-source system that packaged what those services taught.
The ML-MLOps Portfolio¶
The portfolio is not three models — it is one production system that happens to serve three of them. Each service ships with its FastAPI contract, test suite, Docker image and Kubernetes manifests; around them sits the shared MLOps surface: Terraform-provisioned GKE and EKS clusters, Kustomize overlays per environment, GitHub Actions CI/CD with quality gates, MLflow tracking, Prometheus + Grafana monitoring, and the incident writeups that prove the system was operated, not just deployed.
395+ automated tests and 18 architecture decision records hold it together — every non-trivial choice is documented with the alternatives it rejected.
How to review it
Pick one service and follow its evidence chain: metrics → serving path → deployment → incident. The debugging deep dive on BankChurn is the strongest 10-minute read.

The three services inside the portfolio — each with its own deep-dive page:
churn classification
BankChurn Predictor¶
AUC 0.87 90% coverage FastAPI · K8s · SHAP
Cost-aware churn classification — and the serving incident that went from 81% errors to 0% at half the CPU.
financial nlp
NLPInsight Analyzer¶
80.6% accuracy 98% coverage CPU-only serving
Financial sentiment with an explainable, low-cost inference path — the heavier transformer documented as a rejected trade-off.
demand forecasting
ChicagoTaxi Pipeline¶
R² 0.96 6.3M rows PySpark · temporal CV
Demand forecasting at scale with strictly temporal validation — and the data leak that was caught before the metrics were published.
All the infrastructure, testing, security and monitoring proof behind the portfolio lives in one place:
The Production Template¶
The second project is what the first one taught: an open-source starter system that encodes the portfolio's production lessons as reusable defaults. Scaffold a new ML service and it arrives with the serving and training patterns, deployment overlays and operating guardrails already in place — the mistakes the portfolio paid for once, prevented by default.
Inside the box: a FastAPI serving scaffold with the single-worker + ThreadPoolExecutor pattern, training pipelines with quality gates (metric, fairness, leakage), 6 env×cloud Kustomize overlays for GCP and AWS, Terraform modules, CI/CD that signs images and attests SBOMs (SLSA L2), closed-loop drift monitoring, 32 documented anti-patterns and 28 ADRs.
Its differentiator is the governed AI-assisted development layer: behavior rules, skills, workflows and an audit trail that keep agentic coding reviewable and bounded — engineered, not hidden.
Why it matters
The portfolio proves I can build and operate ML services. The template proves I can turn that experience into a system other teams can adopt.