RICARDO RAMA

Integration engineer

I connect hardware, legacy systems and AI in industrial production — where software fails in the open.

Production system — integration map
Production system — integration mapData flows from the shop floor (PDA, scanner and camera) into a CakePHP + MySQL API, which integrates over SOAP and REST with the Nodum ERP. Two branches extend the core: a computer-vision system (YOLOv8 on Jetson) feeding the line, and AI agents operating on the data.SHOP FLOORPDA · Scanner · CameraTRACEABILITY APICakePHP · MySQLSOAP · RESTERP NODUMNodumVISIONYOLOv8 · Jetsonfeeds the lineAI AGENTSAnthropic APIoperates on data

Ricardo Rama — IT Analyst at Somil (automotive seating for Stellantis). My code runs on a real production line: operators, PDAs, scanners and an old ERP. Not demos.

Available for remote workMontevideo, Uruguay

01 /

Systems in production

Real problems on the line, and the technical decisions behind them. No proprietary code, no production data.

Layer 1 — Backend & integrations

Traceability system

  • CakePHP
  • MySQL
Context
I maintain and extend a traceability system I didn't write. It records every seat that leaves the line.
Constraint
The codebase is legacy and shared between two developers. Changes can't break the running line or the audit trail Stellantis depends on.
Technical decision
I work additively: new features hang off the existing data model instead of rewriting it, and I read current behavior from the schema before touching code.
Trade-off
Additive changes keep the line safe but accumulate around an aging design — I trade architectural purity for continuity of production.
Result
Each seat stays traceable end to end while the system keeps growing, without a rewrite.

ERP integration

  • SOAP
  • REST
  • Nodum ERP
Context
Traceability and the Nodum ERP each hold half the truth about a seat. They have to stay in sync.
Constraint
The ERP is a system I don't control and can't change. It exposes SOAP and REST endpoints with its own rules and failure modes.
Technical decision
I integrate against its contract, not its internals, and instrument every call so a failure points to a cause instead of a generic error.
Trade-off
Defensive integration and logging look like overhead — until the ERP misbehaves, when they're the only thing that tells you where the problem is.
Result
The two systems stay consistent, and when a sync fails I can attribute it to the ERP's state — a closed accounting period, out-of-stock — instead of guessing.

Operational dashboards

  • Metabase
  • SQL
Context
Operations needs to see the line's state in terms it acts on, not raw tables.
Constraint
The rules that matter live in plant procedure and people's heads, not in the schema — and there's no dedicated analytics backend to lean on.
Technical decision
I translate plant rules into SQL and expose them as Metabase dashboards, keeping the logic in queries close to the data instead of a separate service.
Trade-off
SQL-in-dashboards is fast to ship and easy to change, but pushes complexity into queries that take discipline to keep readable.
Result
Operations uses these dashboards every day to run the line.

Layer 2 — Software that touches the physical world

In-line visual inspection

  • Python
  • YOLOv8
  • TensorRT
  • ONNX
  • Jetson Nano
Context
Missing parts on a finished seat are expensive to catch late. A camera on the line can flag them before the seat moves on.
Constraint
Inference has to run on a Jetson Nano at line speed — limited compute, no cloud round-trip — and hold up on the real, messy dataset, not a clean benchmark.
Technical decision
My part: training and iterating the detector, redesigning the class taxonomy against the real dataset, exporting to ONNX/TensorRT for the Jetson, deploying on the line, and integrating detections with traceability.
Trade-off
TensorRT on edge hardware buys the latency the line needs but costs portability — the model is tuned to that device and pipeline.
Result
Missing-part detection runs on the line and feeds back into traceability.

Team project. The orientation CNN classifier was a colleague's work; my contribution is the detector, its taxonomy, the edge deployment and the traceability integration.

Layer 3 — AI applied to real systems

AI on real systems

  • Anthropic API
  • Claude Code
Context
The systems I work on already exist and are messy. AI is useful here only if it operates on that reality, not on a clean demo.
Constraint
Output that feeds real systems can't be trusted blindly — every datum has to be accountable to a source.
Technical decision
I build agents and automations with the Anthropic API and Claude Code, with source traceability baked into the pipeline: everything that comes out either traces to a real source or is flagged as an assumption.
Trade-off
Demanding provenance on every field slows the pipeline and rules out some fully-automatic shortcuts, in exchange for output I can defend.
Result
AI tooling that plugs into systems already in production, where a wrong value has consequences.

03 /

Personal projects

Built outside work, on my own stack.

Explorador de Playas UY

  • React
  • TypeScript
  • Leaflet
Problem
There was no single place to explore and compare Uruguay's beaches by real features — infrastructure, surf, accessibility — instead of scattered blog posts.
Decision
Map-first with Leaflet and client-side multi-criteria filtering over layered geodata, so exploration is visual and instant rather than a list that reloads.

QuiroLog

  • React
  • TypeScript
  • IndexedDB
  • PWA
Problem
Surgeons need to log procedures between operations — without connectivity and without handing patient data to a server.
Decision
Local-first PWA on IndexedDB: no backend, no accounts. Data stays on the device and the app works fully offline, which removes the privacy problem instead of managing it.

Filtro de MercadoLibre

  • Chrome Extension
  • JavaScript
Problem
Car searches on MercadoLibre are flooded with misleading and miscategorized listings that waste a buyer's time.
Decision
A Chrome extension that filters results in the page via the DOM, with no dependency on MercadoLibre's API or any backend — it works even though I don't control the platform.

04 /

Contact

Open to remote roles. The fastest way to reach me is email.

Location
Montevideo, Uruguay
Download CV