Skip to content

AI & Automation Engineer

Integrations · AI Agents · ERP

Mechatronics Engineer with 3+ years building production systems, focused on AI, automation and system integration. I turn manual processes and ambiguous requirements into reliable solutions, connected to the platforms a business already runs on.

Guadalajara, MexicoSpanish (native) · English (B2)

90+

custom ERP modules in the codebase

285

commits · 3rd of 5 contributors on the ERP monorepo

10

shipped projects documented as case studies

Selected work

Source code for employer and client projects is proprietary and not published. These are write-ups: the problem, what I built, the stack, and my actual role — with commit counts where they are verifiable.

ERP & IntegrationAI & AgentsAutomation & PlatformsIndustrial Systems

How I build

The same three ideas show up in almost everything above. They are what separate a demo from a system that survives contact with an operation.

Integration fabric

A conversation can become a verified business transaction.

Platforms are useful when the handoff is explicit: intent becomes a tool call, the workflow validates state, and the ERP commits the result.

WhatsApp
n8n
Claude
Odoo
PostgreSQL
CONTEXT / 12TOOL CALL / ERPSTATE / VERIFIED
integration sketch / typed once● READY
type PlantSignal = { deviceId: string shiftId: string units: number } const result = await reconcile({ idempotencyKey: event.id, source: "machine", payload: signal, }) if (!result.duplicate) { await erp.production.post(result.validated) }

From a machine reading to a number the business can trust

The equipment reports how much it produced. People on the floor record it too, and the two rarely match exactly. So the machine reading is stored as evidence first, checked against what operators logged, and only then used for decisions and costing — moving through captured, validated and costed states.

intake pipeline · schematic
  • 00.01telemetry device → intake tray
  • 00.02intake idempotency key matched · duplicate dropped
  • 00.03reconcile machine output vs. shift capture
  • 00.04validate variance within tolerance
  • 00.05post production validated · costed
A record should never save twice
Drivers and plant operators work where the signal drops. When the app doesn't hear back, it retries — and a careless system books the same delivery, or sends the same message, twice. So every save I build first checks whether it already happened. The technical name is idempotency; on the floor it's just the difference between inventory that matches reality and inventory that doesn't.
Everyone sees the same number, at their own level of detail
An operator, a plant manager and finance all need the same production figure — but not the same detail, and not the same permissions. I calculate it once and present it differently per role, instead of letting a dashboard quietly become a second version of the truth. One source of truth, several surfaces.
Fix the data where it's created, not in the report
A daily sales cut that decides what 'today' means in the wrong timezone will be wrong every single day. Same with tax rounding, or which company a record belongs to. Patching the report hides the error; fixing it where the record is written removes it.

Stack

What I reach for. Depth varies — the ERP and automation side is where I have the most production mileage.

AI
OpenAIClaudeBotpressPrompt engineeringConversational agents
Automation
n8nPower AutomateWebhooks
ERP
Odoo 18PythonPostgreSQLOWL
Web
Next.jsReactTypeScriptTailwind CSSVite
Integration
REST APIsWhatsApp BusinessMeta APIStripeMercado Libre
Microsoft 365
Power AppsPower AutomateSharePoint
Other
GitMQTT / IoTMetabaseVercel

Contact

Open to AI engineering, automation and integration roles — remote or in Guadalajara.