# Cristóbal Castrillón

- **Event:** [Meta Global AI Developer Hackathon](https://cerebralvalley.ai/e/meta-ai-developer-hackathon)
- **When:** Oct 26, 12:00 PM – Nov 4, 9:00 PM (EST)
- **Where:** Online
- **Team:** [Cristobal Castrillon](https://cerebralvalley.ai/u/castri)
- **GitHub:** https://github.com/cristobalcastrillon/porter
- **Demo video:** https://youtu.be/noBMZMP02yQ
- **Gallery:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery
- **Page:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3820

Porter is an agent that migrates messy data into any API, safely.

I run data migrations for enterprise customers of a SaaS platform. Every one starts with an undocumented export: cryptic column names, three date formats, "Good" / "good" / "G", units inside numbers. Someone spends days working out what each column means before a single record moves. A chatbot can guess a mapping faster, but it doesn't say where it's unsure, it can't be trusted to rewrite rows, and nothing stops a half-finished import from creating duplicates when it is run again.

Porter splits the work: the model reads and decides, deterministic code touches the data, and a person approves.

1. Profile: Python computes statistics for every column. Muse Spark describes what each column means, its formats and units, and every spelling of each category.
2. Map: Muse Wonder proposes how to fill each field of the target API from its schema, with a confidence score and its reasoning. When the data can't settle a business rule (for example, what diameter a tree stump should get), it asks instead of guessing.
3. Approve: fields under 0.85 confidence and every open question wait for a person. Nothing is written before that.
4. Transform and dry run: a deterministic engine applies the approved mapping. For fields it can't express, Muse Wonder writes one small Python function, once, which is reviewed and checked (no unapproved imports, exec, eval or file access). Every row is validated against the target schema, and each rejected row is listed with its reason.
5. Write: batched upserts keyed on the primary key, with retries and backoff on 429 and 5xx errors and a checkpoint after every batch. A killed run resumes where it stopped, and running it again never creates duplicates.

Benchmark on 3 seeded variants of a 5,000-row sample of the 2015 NYC Street Tree Census, with known correct answers: 99.85% of cells correct after transform, 0 rows rejected, $0.70 in model cost per migration.

## More from Meta Global AI Developer Hackathon

- [HOLD](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3817)
- [SoveriegnForensics](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3818)
- [RewardHive](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3819)
- [Collerk](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3821)
- [Your Shoot buddy](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3822)
- [ClearSwath](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3823)

---

Markdown version of https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/3820. Site index for agents: https://cerebralvalley.ai/llms.txt · full text: https://cerebralvalley.ai/llms-full.txt
