Kaiki Quadros Ferreira

ENPT

Monte Alto, Brazil

I build software that
talks to machines.

I am the developer behind the systems of a CNC maintenance company. I wrote everything from the engine that streams programs down the serial port to the AI assistant that helps a technician at 2 AM. Alone, from scratch, and in use every day.

Open to opportunities C++ · Qt · Python · Flutter

See what I built Try it now

Kaiki Quadros Ferreira

The software, running

Real screens from the systems in daily use at SMI — not mockups. Click to enlarge.

18.299documents processed by the AI
1.038.300passages indexed for retrieval
14machine brands supported
9systems built single-handed

DNCC++ · Qt · RS-232

The software that talks to the machine down the serial port.

DNC operation screen: loaded program, session status and RS-232 signal LEDs
OperationThe eight RS-232 line signals monitored live — they are how the software knows whether the machine is keeping up.
RS-232 settings: baud, parity, flow control, EOF, buffers and timing
Per-machine settingsEvery CNC wants a different combination. Buffers, flow control, and signal polling every 1 ms.

MAIAFastAPI · RAG · Flutter

The assistant that answers technical questions from the company archive.

MAIA overview showing a question about alarm SV0433 on a Fanuc control and the technical answer
The question a technician actually asks“Fanuc, alarm SV0433 on the X axis” — and the answer comes back as checkable steps, not generic prose.
Technical base panel: 18,299 documents processed, 18,272 active sources and 1,038,300 indexed passages
Technical baseEvery document passes human review before entering the index. Nothing is indexed just for sitting in a folder.
MAIA technical chat home screen with suggested questions about encoders, servo drives and alarms
Technical chatThe prompts ask for make and model on purpose — a vague question pulls the wrong source.
Three mobile app screens: answer with sources, operational dashboard, and projects by machine
In the technician pocketThe same system on the phone, where the problem happens — answers, dashboard, and conversations organised by machine.

SMI FilesFlutter · Supabase · offline-first

Work orders and the photographic record of what was repaired.

List of pending work orders showing number, shop area and date for each; customer names are obscured
The work-order queue84 pending orders, each with its shop area, type and link to the parent order. Customer names are obscured in this capture.
SMI Files home screen with actions to create a work order, browse existing ones and open checklists
HomeCreate a work order, browse the existing ones, and maintain the checklists — two screens away.
Gallery of 28 photos of a frequency inverter under repair, organised inside a work order
The work-order record28 photos of an inverter opened on the bench. This record is what backs the report and the quote afterwards.

What I built

Nine systems. Seven of them open source — click a name to read the code.

Shop floor

dnc-serial-engine

daily use

C++17QtRS-232

Streams G-code to CNC controllers without dropping a character — and without being slow.

Why this is hard

A controller from the 1980s has a few kilobytes of buffer and no way to say how full it is. You get one warning — XOFF — and it arrives late.

Too fast and the machine silently drops characters while cutting steel. Too slow and a 40-minute job becomes four hours. The engine treats this as a control loop: it speeds up while the machine drains and backs off the instant XOFF arrives.

The engineering log records the debugging done on live machines — including the fix that created the next problem.

There is nothing Windows-specific inside the engine: the same tree compiles and passes its tests on Linux, Windows and macOS on every commit.

dnc-android

daily use

Qt 6QMLJNI

The same engine on a tablet bolted to the machine, replacing the laptop on a cart.

The five invisible faults

Android has no serial port. Reaching RS-232 means USB OTG, an FTDI chip and a JNI bridge into a Java library.

Receiving worked immediately. Sending did not — and none of the five causes raised an error: a zeroed timeout parked the reader thread so writes vanished silently; a poller fought for the connection a thousand times a second with no lock; and a flow-control request was rejected over a name mismatch, then carried on as if it had worked.

I confirmed that last one by reading the bytecode of the library itself.

FreeRTOSESP32

Before the tablet: an ESP32 with an embedded web UI and a microSD card inside the panel.

What this version left behind

Six FreeRTOS tasks and lock-free ring buffers separating the serial line from the card and the web server — so a slow SD write could never interrupt the byte stream feeding the machine.

The tablet replaced the device, but the firmware stays public: it is the same problem solved on bare metal.

Artificial intelligence

maia-cnc-assistant

daily use

PythonFastAPIRAGFlutter

MAIA answers maintenance questions from the company technical archive, through an app and WhatsApp.

Why this is not an ordinary chatbot

When a controller throws an alarm at 2 AM the answer exists — in a 400-page PDF nobody can search, or in the head of the technician who is asleep.

A wrong answer here injures someone, so an explicit safety policy runs before replying. A document only enters the index after human review. And there are AI cost ceilings per request, per day and per month, so a retry loop cannot burn the budget overnight.

118 automated tests run on every commit.

SMI IA

prototype

FlutterSupabaseOpenAI

The first technical-chat experiment, which became the groundwork for MAIA.

Management and field work

smi-files

in testing

FlutterSupabase

Work orders, time entries, signed checklists and per-order media — all in a single app.

Offline-first, and why

A technician inside a factory has no signal. The app writes locally and keeps a sync queue with automatic retry, so the work never depends on the network.

Before this I had three separate apps. I consolidated them into one when it became clear that keeping three of them diverging was worse than rewriting.

Checklist SMI

superseded

FlutterPDF

Field checklists with digital signature, photos and a PDF report generated on the device.

Controle SMI

superseded

Flutter

Technician and customer management — the first step before consolidation.

Relatórios SMI

superseded

Flutter

Service reports for the industrial maintenance team.

milkdim

prototype

FlutterSupabase

Ordering app and admin panel for a food distributor.

fbb-quotes

prototype

Flutter

Quotes and orders — outside the industrial world, to prove the stack travels.

Try it yourself

Two of the problems above are easier to feel than to read about. They run in your browser — nothing is sent anywhere.

What I work with

C++17 Qt / QML Python FastAPI Flutter iOS / macOS RS-232 USB host / JNI FreeRTOS ESP32 PostgreSQL pgvector RAG Supabase Docker Caddy CMake GitHub Actions

Studying Industrial Automation (FATEC), on top of Systems Development (ETEC) and Electrical Control Systems (SENAI) — which is why I am comfortable on both sides of the machine.

Get in touch

If you have a machine that needs to talk to a computer, or a system that needs to exist and nobody wants to build, chances are I have solved something close to it.

Email me WhatsApp LinkedIn GitHub