Raw evidence preserved
Original bytes and source values remain replayable and auditable.
Case study / 06
Confidence-gated ETL for messy merchant catalog data.
CatalogFlow is a full-stack ETL and data-quality system that transforms inconsistent merchant CSV feeds into canonical product data. It preserves raw evidence, applies deterministic schema mapping and normalization, flags duplicate or ambiguous records for review, and publishes only records allowed by a centralized data-quality policy.
Original bytes and source values remain replayable and auditable.
Only sufficiently supported transformations are applied automatically.
Low-confidence, duplicate, or invalid records route to review.
Gold data and clean exports use the same publication rules.

React and FastAPI orchestrate workflow state, storage, processing, review, and publication across explicit local and production adapters.
| Decision | Why | Tradeoff |
|---|---|---|
| Deterministic mapping instead of LLM inference | Exact names, reviewed aliases, and gated fuzzy matches are reproducible and inspectable. | Novel semantic column names may remain unresolved. |
| Transactional workflow state separate from bulk data | Review and batch state need relational transactions; raw and processed artifacts fit object or lakehouse storage. | Cross-system consistency must be orchestrated. |
| Human review as the publication boundary | Ambiguous records stay outside clean output until resolved under canonical validation rules. | Publication may depend on reviewer capacity. |

Bronze preserves the exact source. Silver keeps every processed row and its evidence. The central policy alone determines what reaches Gold and the canonical export.

Schema mapping, completeness, validity, normalization certainty, and entity evidence produce a deterministic routing score—not a learned probability.
Duplicates are never auto-merged. Review may approve, correct, reject, or hold, but it never rewrites the original automation confidence and still must pass validation and policy.
Cloud adapters are covered by tests and mocks; live AWS and Databricks validation still requires an owned environment.