Kaiki Quadros Ferreira

ENPT

Monte Alto · SP

Eu faço software que
conversa com máquina.

Sou o desenvolvedor por trás dos sistemas de uma empresa de manutenção de CNC. Escrevi desde o motor que envia programas pela porta serial até o assistente de IA que ajuda o técnico às 2 da manhã. Tudo sozinho, do zero, e rodando todo dia.

Aberto a propostas C++ · Qt · Python · Flutter

Ver o que eu construí Experimentar agora

Kaiki Quadros Ferreira

O software, rodando

Telas reais dos sistemas em uso na SMI — não são maquetes. Clique para ampliar.

18.299documentos processados pela IA
1.038.300trechos indexados para busca
14marcas de máquina atendidas
9sistemas construídos sozinho

DNCC++ · Qt · RS-232

O software que conversa com a máquina pela porta serial.

Tela de operação do DNC: programa carregado, status da sessão e LEDs dos sinais RS-232
OperaçãoOs oito sinais da linha RS-232 monitorados ao vivo — é por eles que o software sabe se a máquina está aguentando.
Configuração RS-232: baud, paridade, controle de fluxo, EOF, buffers e timing
Configuração por máquinaCada CNC quer uma combinação diferente. Buffers, controle de fluxo e leitura de sinais a cada 1 ms.

MAIAFastAPI · RAG · Flutter

A assistente que responde dúvidas técnicas a partir do acervo da empresa.

Apresentação da MAIA com exemplo de pergunta sobre alarme SV0433 em comando Fanuc e a resposta técnica
A pergunta que o técnico faz de verdade“No Fanuc, alarme SV0433 no eixo X” — e a resposta chega em passos verificáveis, não em texto genérico.
Painel da base técnica: 18.299 documentos processados, 18.272 fontes ativas e 1.038.300 trechos indexados
Base técnicaCada documento passa por revisão humana antes de entrar no índice. Nada é indexado só por estar numa pasta.
Tela inicial do chat técnico da MAIA com sugestões de perguntas sobre encoder, servo drive e alarmes
Chat técnicoAs sugestões pedem fabricante e modelo de propósito — pergunta vaga puxa fonte errada.
Três telas do aplicativo móvel: resposta com fontes, painel operacional e projetos por máquina
No bolso do técnicoO mesmo sistema no celular, onde o problema acontece — com resposta, painel e conversas organizadas por máquina.

SMI FilesFlutter · Supabase · offline-first

Ordens de serviço e o registro fotográfico do que foi consertado.

Lista de ordens de serviço pendentes, com número, setor e data de cada uma; os nomes dos clientes estão ocultados
Fila de ordens de serviço84 OS pendentes, cada uma com setor, tipo e vínculo com a OS principal. Os nomes dos clientes foram ocultados nesta captura.
Tela inicial do SMI Files com ações para criar ordem de serviço, explorar OS e abrir checklists
InícioCriar OS, explorar as existentes e manter os checklists — em duas telas de distância.
Galeria de 28 fotos de um inversor de frequência em manutenção, organizadas dentro de uma ordem de serviço
Registro da OS28 fotos de um inversor aberto na bancada. É esse registro que sustenta o laudo e o orçamento depois.

O que eu construí

Nove sistemas. Sete com código aberto — clique no nome para ver.

Chão de fábrica

dnc-serial-engine

uso diário

C++17QtRS-232

Envia programas G-code para comandos CNC sem perder um caractere — e sem ficar lento.

Por que isso é difícil

Um comando dos anos 80 tem alguns kilobytes de buffer e nenhuma forma de dizer o quanto está cheio. Você recebe um único aviso — XOFF — e ele chega atrasado.

Rápido demais, a máquina perde caracteres em silêncio enquanto corta aço. Devagar demais, um trabalho de 40 minutos vira quatro horas. O motor trata isso como malha de controle: acelera enquanto a máquina drena, recua no instante do XOFF.

O diário de engenharia registra a depuração em máquina rodando — inclusive a correção que criou um novo problema.

Não há nada de Windows dentro do motor: a mesma base compila e passa nos testes em Linux, Windows e macOS a cada commit.

dnc-android

uso diário

Qt 6QMLJNI

O mesmo motor num tablet fixado na máquina, no lugar do notebook no carrinho.

As cinco falhas invisíveis

Android não tem porta serial. Para chegar no RS-232 é USB OTG, chip FTDI e uma ponte JNI até uma biblioteca Java.

Receber funcionou de primeira. Enviar, não — e nenhuma das cinco causas gerava erro: um timeout zerado prendia a thread de leitura e as escritas sumiam em silêncio; um poller disputava a conexão mil vezes por segundo sem lock; e um pedido de controle de fluxo era recusado por divergência de nome, seguindo como se tivesse dado certo.

Essa última eu confirmei lendo o bytecode da biblioteca.

esp32-dnc-firmware

descontinuado

FreeRTOSESP32

Antes do tablet: um ESP32 com web embarcada e cartão microSD dentro do painel.

O que ficou dessa versão

Seis tarefas FreeRTOS e buffers circulares sem trava separando a serial do cartão e do servidor web — para que uma escrita lenta no SD nunca interrompesse o fluxo de bytes indo para a máquina.

O tablet substituiu o aparelho, mas o firmware continua público: é o mesmo problema resolvido em bare metal.

Inteligência artificial

maia-cnc-assistant

uso diário

PythonFastAPIRAGFlutter

A MAIA responde dúvidas de manutenção a partir do acervo técnico da empresa, por app e WhatsApp.

Por que não é um chatbot comum

Quando um comando dispara alarme às 2 da manhã, a resposta existe — num PDF de 400 páginas que ninguém consegue pesquisar, ou na cabeça do técnico que está dormindo.

Resposta errada aqui machuca alguém, então existe uma política de segurança explícita antes de responder. Documento só entra na base depois de revisão humana. E há teto de custo de IA por requisição, por dia e por mês, para um loop de retry não queimar o orçamento de madrugada.

118 testes automatizados rodando a cada commit.

SMI IA

protótipo

FlutterSupabaseOpenAI

O primeiro experimento de chat técnico, que virou a base do que hoje é a MAIA.

Gestão e campo

smi-files

em teste

FlutterSupabase

Ordens de serviço, apontamentos, checklist com assinatura e mídias por OS — tudo num app só.

Offline-first, e por quê

Técnico dentro de fábrica não tem sinal. O app grava local e mantém uma fila de sincronização com reenvio automático, então o trabalho nunca depende da rede.

Antes disso eu tinha três aplicativos separados. Consolidei em um só quando ficou claro que manter três divergindo era pior que reescrever.

Checklist SMI

substituído

FlutterPDF

Checklist de campo com assinatura digital, foto e relatório em PDF gerado no aparelho.

Controle SMI

substituído

Flutter

Gestão de técnicos e clientes — o primeiro passo antes da consolidação.

Relatórios SMI

substituído

Flutter

Relatórios de atendimento para a equipe de manutenção industrial.

milkdim

protótipo

FlutterSupabase

App de pedidos e painel administrativo para uma distribuidora de alimentos.

fbb-quotes

protótipo

Flutter

Orçamentos e pedidos — fora do mundo industrial, para provar que a stack viaja.

Experimente você mesmo

Dois dos problemas acima são mais fáceis de sentir do que de ler. Rodam no seu navegador — nada é enviado para lugar nenhum.

Com o que eu trabalho

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

Formação em Automação Industrial (FATEC, cursando), Desenvolvimento de Sistemas (ETEC) e Comandos Elétricos (SENAI) — é por isso que eu transito nos dois lados da máquina.

Vamos conversar

Se você tem uma máquina que precisa falar com um computador, ou um sistema que precisa existir e ninguém quer construir, provavelmente eu já resolvi algo parecido.

Mandar um e-mail WhatsApp LinkedIn GitHub