Ankush BL — Morph
adaptive— PARTICLES · —FPS
01 / IDENTITY
Auto-tour · scroll to take control

ML Engineer · 24 · Chapter 01 @ Catapult

First company. The whole production AI stack. One engineer.
Joined Mar 2024 — still building.

ML ENGINEER

Scroll to morph

D FOR SYSTEMS

Y guestbook · D systems · T trails · B bang · G sand · C clock · N night · P photo · M sound · ←→ states

02 — About

The models think here.

I'm Ankush — an ML engineer who takes models from notebook to production, alone if needed. At Catapult, my first company, I designed, trained and shipped the entire AI stack: the data, the fine-tuning, the inference, the infra, and the UIs humans use to fix what models miss.

15 systems engineered~1,000 test files 46 CI workflows1 engineer 4 models trainedDonut · 3× Qwen2.5-VL · 6-route model plane
D FOR SYSTEMS

03 — Projects I · Documents

Documents in, truth out.

IDP Engine

Stateless document AI as three Kafka capability stages — intake, understand, match — calling a Qwen2.5-VL extraction route over mTLS.

PythonaiokafkaQwen2.5-VLOTel

Platform Simulator + IDP UI

A staging double of the external platform — home of the human review screens for IDP and TM.

ReactFastAPITemporalKeycloak
intake → understand → match328 tests golden evals
D FOR SYSTEMS

04 — The Donut

Trained Donut. Yes, hence the donut.

Donut is an OCR-free document model: it looks at an invoice image and writes the JSON directly — no text extraction, no brittle coordinates. I fine-tuned it on production AP data until it held up in the wild. The swarm insisted on celebrating.

R 3.2r 1.25 OCR-freeImage→JSON
D FOR SYSTEMS

05 — Projects II · Matching

Money, matched.

Recon-Engine

Config compiles into a canonical plan — formula engine, weighted disambiguation, exact one-to-many search, allocations with full evidence.

Transaction Preparation

Extraction, fallback, validation, enrichment — garbage never reaches the matcher.

Name Match Algorithm

Entity resolution with an offline all-MiniLM-L6-v2 encoder, pinned by HF revision + SHA-256.

Reference Match System

Messy payment memos to the right invoice, deterministically 1:N.

deterministic matchersoffline MiniLM SHA-256-pinnedfull evidence
D FOR SYSTEMS

06 — Classification

Sorted, automatically.

JE Classification

Journal-entry GL classification as a closed deterministic pipeline — embedder, reranker and LLM behind per-dependency bulkheads over mTLS.

"monthly office rent — march"RENT EXPENSE 0.91
ClassificationEmbeddingsReranker
S1–S7 · closed pipelinegolden eval gate 95 test files
D FOR SYSTEMS

07 — Projects III · Detection

Normal has a shape. Wrong spikes.

Anomaly Detection

Passive, post-custody analysis as a single Temporal activity — six deterministic detector families watching the signal: numeric series, contextual, categorical, integrity, sequence, relational graph.

steady signal · one spikeFLAGGED — WITH EVIDENCE or honestly: insufficient_evidence
TemporalFastAPINumPyADE v2.2.0
6 detector families3-outcome contract 8-service compose2 SDDs
D FOR SYSTEMS

08 — Infrastructure

Shipped, not staged.

6 SageMaker routes behind an mTLS + SigV4 gateway · DOKS + Argo CD on DigitalOcean — the whole estate, declared as code, deployed and monitored by the same pair of hands.

AWS SageMakerTerraform vLLMmTLS + SigV4 DOKSLinkerd Argo CDOpenBao KyvernoKafka
D FOR SYSTEMS

09 — Contact

Let's write Chapter 02.

Catapult was Chapter 01 — an entire AI stack, solo. Now I'm looking for the problem worth the next one.

Response latency < 24h

D FOR SYSTEMS

Ankush BL — Portfolio

ANKUSH BL

ML Engineer · 24 · Chapter 01 @ Catapult (Mar 2024 — present)

I solo-built Catapult's entire production AI stack — the models, the pipelines, the infrastructure, and the human-in-the-loop UIs around them. MLOps, software, DevOps, AI: one engineer, end to end. Now: what's next.

15 systems engineered~1,000 test files 46 CI workflows1 engineer 4 models trained

Projects — 15 systems engineered, solo-built

#1 · DOCUMENT AI · KAFKA CAPABILITY

IDP Engine

WHATStateless intelligent document processing engine — three Kafka capability stages: source intake, invoice understanding, invoice matching — calling a Qwen2.5-VL-7B extraction route over mTLS.

IMPACTDocuments become structured, matched records as messages flow — no state, no babysitting.

SCALE328 test files · golden + adversarial eval harness · 5 CI workflows.

PythonaiokafkaQwen2.5-VLOTel

#2 · RECONCILIATION · DETERMINISTIC

Recon-Engine

WHATDeterministic reconciliation: a compiler turns config into a canonical plan — formula engine, weighted disambiguation, exact one-to-many collection search, allocation proposals with full evidence.

IMPACTEvery allocation ships with its proof — reconciliation you can audit, not just trust.

SCALE109 test files · mechanically enforced layer order · client wheels pinned by SHA-256.

PythonFormula engineKafka

#3 · DATA PIPELINES · KAFKA

Transaction Preparation

WHATThe stage upstream of matching — extraction, fallback, validation, enrichment, so every transaction arrives canonical.

IMPACTGarbage never reaches the matcher.

SCALE16 test files · 8 CI workflows · import-linter enforced architecture.

PythonValidationEnrichment

#4 · NLP · KAFKA WORKER

JE Classification

WHATJournal-entry GL classification as a closed deterministic pipeline (S1–S7) — embedder, reranker and LLM dependencies behind per-dependency bulkheads over mTLS.

IMPACTA daily accounting bottleneck becomes a message; failures stay in their bulkheads.

SCALE95 test files · golden eval gate · 3 CI workflows.

ClassificationEmbeddingsReranker

#5 · ENTITY RESOLUTION · 1:N

Name Match Algorithm

WHATDeterministic, config-driven entity-name matcher — Kafka capability AND library — with a baked-offline all-MiniLM-L6-v2 CPU encoder pinned by HF revision and weights SHA-256.

IMPACT"Tech Pvt Ltd" meets "Technologies Private Limited" — deterministically, offline, auditable.

SCALE31 test files · private mTLS scoring server · client SDK pinned by consumers.

MiniLMSentence-TransformersmTLS

#6 · STRING ALGORITHMS · 1:N

Reference Match System

WHATThe reference-string sibling: deterministic 1:N matching of messy payment memos to invoices — same capability+library architecture.

IMPACTFreehand memo fields stop breaking automation.

SCALE38 test files · released as a digest-pinned image on GHCR.

1:N matchingDockerGHCR

#7 · ADE v2.2.0 · TEMPORAL

Anomaly Detection

WHATPassive, post-custody anomaly analysis as a single Temporal activity — six deterministic detector families (numeric series, contextual, categorical, integrity, sequence, relational graph).

IMPACTSuspicious patterns surface with evidence — and "insufficient_evidence" is an honest answer.

SCALE8-service docker-compose · 3-outcome contract · 2 SDDs.

TemporalFastAPINumPy

#8 · MLOPS · AWS SAGEMAKER

Model Hosting

WHATThe AWS model plane, designed and declared in Terraform: six SageMaker inference routes (idp-vlm, llm-email, llm-tm-extraction, je-reranker, je-embedder, je-llm) behind an mTLS + SigV4 gateway, with a vLLM GPU serving image.

IMPACTOne authenticated front door for every model in the estate.

SCALE22 Terraform files · scale-to-zero autoscaling · 102 test files.

TerraformSageMakervLLMSigV4

#9 · DEVOPS · DIGITALOCEAN

Estate Hosting

WHATThe DigitalOcean substrate, declared as code: DOKS clusters, Linkerd mTLS mesh, OpenBao secrets (5-of-3 Shamir), Argo CD GitOps, Kyverno admission.

IMPACTThe whole estate is one repository — versioned, reviewable, reproducible.

SCALE32 test files · sha256-pinned Helm charts.

DOKSLinkerdArgo CDOpenBao

#10 · PLATFORM · KAFKA

The Capability Plane

WHATThe wire and runtime authority: versioned execution contracts (canonical JSON + SHA-256 digests, AsyncAPI) plus a one-attempt Kafka worker runtime — transactional exactly-once results, Postgres attempt ledger with RLS tenant isolation, fencing.

IMPACTEight topic pairs, one discipline — every capability speaks the same language, or doesn't speak.

SCALE8 Kafka topic pairs · immutable wheels with hash manifests.

KafkaPydanticExactly-onceRLS

#11 · FULL-STACK · TEST HARNESS

Platform Simulator + IDP UI

WHATA staging double of the external platform — operator UI (React + Radix + Vite), tenant/identity, Temporal orchestration, Kafka publication, custody receipts, deterministic failure injection — home of the human review screens for IDP and TM.

IMPACTThe whole estate can be rehearsed end-to-end before it touches anything real.

SCALE138 OpenAPI paths · 194 test files · 15 CI workflows.

ReactFastAPITemporalKeycloak

#12 · FINE-TUNING · PYTORCH

Model Training

WHATThe models themselves: Donut trained OCR-free, and three vision-language models fine-tuned from Qwen2.5-VL for invoice extraction.

IMPACTTemplates died here — pixels in, JSON out.

SCALE4 models trained · custom invoice corpus · served via the model plane.

PyTorchQwen2.5-VLDonutHF

Stack & keywords

PyTorchQwen2.5-VLDonut KafkaTemporalFastAPI ReactTerraformAWS SageMaker vLLMDOKSArgo CD PythonSQLLinuxGit

Contact — let's write Chapter 02

Response latency < 24h. Catapult was Chapter 01 — an entire AI stack, solo. Now looking for the problem worth the next one.