São Paulo, Brasil · remoto Disponível

Bruno Silva

Engenheiro de software full stackFundador da BC Consultoria e Desenvolvimento de Softwares

Foco TypeScript · Node.js · Go · React · React Native · C# / .NET · PostgreSQL · IA aplicada · RAG

Me apresente um problema. Eu entrego o sistema que resolve.

Em números

  • 4+anos construindo e sustentando software
  • 4produtos em produção de ponta a ponta
  • 12integrações entregues: ERP, SEFAZ, gateways, crawlers e APIs
  • 1 mi+registros processados por mês
Veja como cada um foi construído

01

Quatro sistemas que o negócio usa todo dia.

Todos os estudos de caso

Fiscal e ERPRedes de varejo de moda com ERP Linx · matriz e filiais · 2024 — 2026

Steuer

Notas fiscais que chegam sozinhas e entram conferidas no Linx.

Plataforma fiscal multiempresa que capta toda NF-e, CT-e e NFS-e emitida contra os CNPJs do cliente, guarda XML e PDF prontos para consulta e lança a entrada conferida direto no banco do ERP Linx, dentro da rede da loja. O time fiscal para de redigitar nota e passa a tratar só as exceções que o sistema aponta.

12 milnotas fiscais processadas por mês
90%das entradas no Linx sem digitação
42tabelas do Linx integradas pelo gateway

O que entreguei

  1. Captura com retomada
  2. Entrada automática no Linx
  3. Steuer Connector

Stack: Bun · Fastify · TypeScript · Zod · Prisma · MySQL +12

Ver estudo de caso

02

O que sustenta cada entrega.

  1. Integrações

    Conecto sistemas que não foram feitos para conversar: notas do PlugStorage e do PlugNotas até um Linx on-premise, EPIs validados na base CA-EPI, centenas de milhares de empresas no Elasticsearch. Sempre com retry e rastreabilidade.

    Linx · PlugStorage · PlugNotas · CA-EPI · Elasticsearch

    Aplicado em01 Steuer02 Kippis03 LeadSpector

  2. Automação

    Rotina manual vira processo que roda sozinho: filas RabbitMQ e fluxos n8n para o trabalho fiscal, schedulers que varrem prazos toda madrugada, uma régua de cobrança que tenta em 0, 3 e 7 dias com e-mails em fila no BullMQ, crawlers no próprio ritmo. O time cuida só da exceção.

    RabbitMQ · n8n · Cron · BullMQ · Go · Rod

    Aplicado em01 Steuer02 Kippis03 LeadSpector04 GymOS

  3. Sistemas distribuídos

    Estágios independentes, para a falha ficar onde aconteceu. Estado persistido antes de enfileirar, tenant isolado na sessão, grafo Neo4j para contexto e índice para busca. Cresce sem reescrever.

    Bun · Fastify · Go · Neo4j · PostgreSQL · MySQL

    Aplicado em01 Steuer02 Kippis03 LeadSpector

  4. Segurança

    Segurança entra no desenho, não no fim. RBAC de ponta a ponta entre API Go, painel React e app mobile, cinco papéis com escopo por unidade na academia, multi-tenancy pela sessão e um túnel WireGuard até o ERP do cliente sem abrir porta para a internet.

    RBAC · WireGuard · SecureStore · Multi-tenant

    Aplicado em01 Steuer02 Kippis04 GymOS

  5. Operação

    Entregar é metade do trabalho; a outra metade é manter rodando. CI/CD com Docker e GitHub Actions, um instalador MSI (WiX) que sobe o conector no servidor do cliente em minutos, a academia implantada em Docker com a equipe treinada e acompanhamento até o sistema ficar previsível.

    Docker · GitHub Actions · .NET · WiX

    Aplicado em01 Steuer02 Kippis04 GymOS

03

Do problema ao produto.

  1. Entender o problema

    Começo pela operação real e por quem vive o problema: onde se perde tempo, onde nasce o erro, o que não pode parar.

  2. Desenhar a solução

    Escolho arquitetura e stack pelo problema, não pela moda, e deixo claro o que entra primeiro e por quê.

  3. Construir

    Entrego em fatias que já funcionam, com código revisável, testes e CI/CD desde o primeiro dia.

  4. Colocar no ar

    Implanto, migro os dados, documento e treino quem vai usar, sem parar o que já roda.

  5. Evoluir junto

    Acompanho os números depois da entrega e ajusto com dados reais até o sistema ficar previsível.

Pode ser um ERP que ninguém quer tocar ou uma ideia que ainda cabe num guardanapo: eu entro de ponta a ponta e entrego um produto viável, funcionando e que dá gosto de usar.

Conversar sobre a sua ideia

04

Do suporte técnico ao full stack.

Comecei no suporte técnico e na programação de uma fabricante de controle de acesso, resolvendo problema de cliente na linha de frente. Esse olhar de operação veio comigo para a engenharia: hoje desenho e entrego sistemas fiscais, de segurança do trabalho, de gestão de academias e de IA aplicada, para empresas e clientes diretos.

  1. Abr 2024 — Ago 2026

    Desenvolvedor Full Stack

    Valiant Group · São Paulo, SP

    Software house e consultoria de tecnologia com sistemas web, mobile e integrações para clientes de diversos segmentos.

    • Principal desenvolvedor de middleware de integração fiscal em TypeScript (Bun/Fastify), cobrindo sincronização de dados com ERP de terceiros e processamento de notas fiscais eletrônicas.
    • Backend e frontend de plataforma de prospecção com IA: Node.js/Fastify, React, busca com Elasticsearch e busca semântica/RAG com LangChain e Neo4j.
    • RBAC de ponta a ponta em plataforma corporativa (Go, React, React Native), agente de conectividade Windows em C#/.NET e padronização de CI/CD com Docker e GitHub Actions em múltiplos microsserviços.
  2. Jun 2021 — Abr 2024

    Analista de Suporte Técnico e Programação

    Control ID · São Paulo, SP

    Fabricante de equipamentos de controle de acesso, identificação e automação.

    • Atuação híbrida entre suporte técnico e programação, apoiando clientes e equipes internas com diagnóstico, correções, automações e scripts para agilizar rotinas operacionais.
    • Ponto de escalonamento para problemas técnicos complexos em equipamentos e sistemas de controle de acesso, com interface direta com clientes.
    • Condução de treinamentos internos para analistas e externos para clientes da empresa, traduzindo demandas técnicas em procedimentos claros.
  3. 2021 — 2024 · Concluído

    Bacharelado em Ciências da Computação

    Universidade Cruzeiro do Sul

    Formação

05

Projetos independentes.

O que eu construo por conta própria, por desafio e curiosidade: um jogo para a turma, ferramentas para agentes de IA e utilitários que faltavam no meu Windows.

Jogo multiplayer

TrioOnline

Jogo de cartas em tempo real para a turma, à prova de quem tenta espiar.

36
cartas num baralho embaralhado por semente
20
ticks por segundo na máquina de estados

Stack: TypeScript · Colyseus · Next.js · Zustand · Prisma · PostgreSQL · Redis · Turborepo · Kubernetes

Estado: Em uso entre amigos

GitHub
Por dentro: TrioOnline

Fiz para jogar com os amigos e acabei tratando como engine de verdade. Se a disputa é entre amigos, ninguém pode ganhar por bug, por lag ou abrindo o DevTools.

O que eu quis resolver

  1. Partidas que se repetem byte a byte

    Proibi Math.random() e Date.now() no core. O baralho de 36 cartas é embaralhado com Fisher-Yates sobre um gerador Park-Miller semeado pelo servidor, o tempo corre em ticks e cada ação vira um evento imutável: reaplicar o log numa engine vazia devolve o mesmo estado.

  2. O cliente não sabe o que não pode ver

    Carta virada para baixo trafega com valor nulo; o número só sai do servidor no patch que a revela. A semente nunca deixa o servidor, e cada comando leva um número de sequência, então um pacote reenviado de outro turno é descartado.

  3. Uma fila por sala

    Dois cliques no mesmo instante não viram race condition: todo comando entra numa fila FIFO da sala no Colyseus e é processado um de cada vez, com a máquina de estados conferindo a fase antes de aplicar.

Ferramenta para agentes de IA

Agents Hub

Um agente de IA pede revisão a outro, com orçamento, isolamento e trilha.

9
CLIs de agentes sob o mesmo modelo
16
ferramentas MCP para um agente chamar outro

Stack: TypeScript · Node.js · SQLite · MCP · HTTP + SSE · git worktrees

Estado: Fases 1 e 2 rodando

GitHub
Por dentro: Agents Hub

Eu queria que o Claude Code pedisse ao Codex para revisar o próprio trabalho sem eu copiar contexto na mão. Virou um daemon que reduz nove CLIs de agentes ao mesmo modelo de sessão, evento, política e orçamento.

O que eu quis resolver

  1. Nove dialetos, um envelope

    Cada CLI tem um adapter que normaliza a saída num único EventEnvelope, e agente novo entra com um manifesto YAML, sem código. O Hub também se expõe como servidor MCP com 16 ferramentas: o próprio agente delega, espera o resultado e lê o diff do outro.

  2. Delegar nunca aumenta privilégio

    A política do filho é a interseção com a do pai, o orçamento pertence ao fluxo inteiro e é debitado na raiz, e profundidade máxima com detecção de ciclo semântico impede que a delegação vire loop caro. Cada sessão roda no seu próprio git worktree.

  3. O gate vem antes do comando

    No Claude Code e no Codex, o agente consulta o Hub antes de executar a ferramenta. Comando composto é classificado por segmento, então git status && git push vale como push, e a config de um repositório clonado só vale depois que eu confio no hash do conteúdo.

Automação

EscutaPromo

Ouve uma rádio o dia inteiro e avisa a turma assim que a promoção abre.

15 s
por janela de transcrição
< 30 s
do anúncio no ar ao aviso no grupo

Stack: Python · FFmpeg · whisper.cpp · RapidFuzz · SQLite · Telegram Bot API · Docker

Estado: Em uso entre amigos

Por dentro: EscutaPromo

Perdi uma promoção de uma rádio grande porque estava numa reunião e decidi que ninguém do grupo perderia de novo. Escrevi um ouvinte que não dorme, entende o que o locutor diz e participa por nós.

O que eu quis resolver

  1. Transcrever ao vivo sem nuvem

    O FFmpeg captura o stream em janelas de 15 segundos sobrepostas, para nenhuma frase ser cortada no meio, e o whisper.cpp transcreve tudo na própria máquina. Nenhum áudio sai de casa.

  2. Achar a promoção no meio da fala

    Locutor não lê roteiro. Combinei busca aproximada por frases-gatilho com uma checagem de contexto, e o alerta só dispara quando chamada e palavra-chave aparecem no mesmo trecho; isso eliminou os falsos positivos dos comerciais.

  3. Participar por todos sem atropelar

    Cada amigo tem uma fila própria com os dados que autorizou. As inscrições saem espaçadas, com nova tentativa e backoff, e o grupo recebe no Telegram o trecho de áudio que disparou o aviso.

Agente de desktop

ControlPC

Agente de IA para o Windows que nega por padrão e pede licença a cada passo.

18
crates Rust, da política à auditoria
312
testes Rust passando

Stack: Rust · Tauri 2 · React · TypeScript · UI Automation · SQLCipher · Ollama

Estado: Pré-alfa

Por dentro: ControlPC

Quis ver até onde dá para deixar um modelo operar o PC sem entregar a chave da casa. A resposta foi inverter o problema: nada executa sem passar por política, risco, aprovação e auditoria.

O que eu quis resolver

  1. Capacidades de uso único

    Cada passo do plano recebe uma capability consumida antes do executor. A aprovação retoma exatamente aquele passo, e o time-box da sessão, de 1 a 1.440 minutos, revoga tudo e descarta o plano pausado ao expirar.

  2. Clicar no controle, não no pixel

    Clique e digitação usam UI Automation (Invoke e Value) sobre um alvo estruturado, revalidado contra TOCTOU logo antes da ação. O que aparece na tela fica isolado do prompt de autoridade e é redigido antes de ser guardado.

  3. Um cofre que falha fechado

    Sessões, aprovações e auditoria ficam em SQLCipher, com chave de 256 bits no Credential Manager do Windows. Se a chave não abre o banco, o app para em vez de cair num modo inseguro.

Mais experimentos

  • SoundIntO Spotify no fone e o navegador nas caixas: saída de som escolhida por app.C++17 · Win32 · Direct2D

    O Windows deixa escolher uma saída de som por vez, e eu queria uma por aplicativo sem abrir o mixer toda hora.

    O que eu quis resolver

    1. Uma API que o Windows não documenta

      O roteamento usa a interface interna AudioPolicyConfig, ativada por RoGetActivationFactory com duas variantes de vtable conforme a build. Se ela falhar, só o roteamento para; o resto do app segue.

    2. Leve de verdade

      Um único exe em C++17, Win32 e Direct2D, com CRT estática e sem serviço. Dispositivos e sessões chegam por eventos (IMMNotificationClient), sem polling.

    Utilitário para Windows

    Stack: C++17 · Win32 · Direct2D · Core Audio · CMake · Inno Setup

    Estado: Release pública

    GitHub
  • SplitDeckJanelas reais de qualquer app agrupadas numa só, em painéis ou abas.C# · .NET 10 · WPF

    Três terminais lado a lado continuavam sendo três janelas para mover e minimizar. Quis que virassem uma só, sem deixar de ser os mesmos processos.

    O que eu quis resolver

    1. Incorporar ou acoplar

      Apps clássicos viram filhos do painel; os que desenham com GPU ou têm barra própria ficam independentes e são mantidos exatamente sobre ele. A escolha é automática por executável e fica lembrada quando eu troco à mão.

    2. Sem injeção de código

      Só APIs públicas sobre as janelas e ganchos de evento out-of-context. Em erro inesperado, todas as janelas voltam para a área de trabalho como estavam.

    Utilitário para Windows

    Stack: C# · .NET 10 · WPF · Win32

    Estado: Release pública

    GitHub
  • DualAudioMirrorO mesmo som em duas ou mais saídas do Windows ao mesmo tempo, em sincronia.C# · .NET 8 · WPF

    Queria o vídeo na TV e o som também na caixa do escritório, sem cabo extra e sem trocar o dispositivo padrão a toda hora.

    O que eu quis resolver

    1. Um buffer, várias saídas

      No modo sincronizado, um cabo virtual vira a fonte e todos os aparelhos tocam do mesmo buffer, com atraso ajustável de 0 a 400 ms por dispositivo.

    2. Drift à vista

      O diagnóstico ao vivo mostra KB/s capturados, tamanho do buffer, underruns, overflows e cada correção de drift.

    Utilitário para Windows

    Stack: C# · .NET 8 · WPF · NAudio · WASAPI

    Estado: Release pública

    GitHub
  • GamesHubSteam, Epic, Riot e Hydra numa biblioteca só, com executável abaixo de 1 MB.C# · .NET Framework 4.8 · WebView2

    Cansei de abrir quatro launchers para escolher um jogo e montei uma biblioteca que importa tudo sozinha, inclusive as artes.

    O que eu quis resolver

    1. Interface web, casca nativa

      WinForms com WebView2 e uma ponte própria entre C# e JavaScript, sob CSP. O app roda no .NET Framework 4.8 que já vem no Windows, sem nenhum pacote NuGet.

    2. Controle sem atrapalhar o jogo

      Teclado e controle navegam a interface inteira e o modo Big Picture, mas o controle só age quando a janela está em foco.

    App para Windows

    Stack: C# · .NET Framework 4.8 · WebView2 · JavaScript

    Estado: Release pública

    GitHub
  • AtlasGerenciador local de projetos em C17 e WebView2, com logs ao vivo por stack.C17 · WebView2 · SQLite

    Quero ver todo o meu portfólio, rodar scripts e containers e ler a documentação de cada projeto num só lugar, sem pagar o peso de um Electron.

    O que eu quis resolver

    1. Especificar antes de escrever

      Dezenove documentos de especificação e um plano de 160 entregas atômicas antes da primeira linha de C.

    2. Detectar a stack sozinho

      Cada pasta é inspecionada para descobrir a stack e os comandos que fazem sentido rodar nela.

    Ferramenta de desenvolvimento

    Stack: C17 · WebView2 · SQLite · CMake

    Estado: Especificação aprovada

  • TrackWorkGestão de projetos e acompanhamento de times de engenharia, com Next.js e Go.Next.js · TypeScript · Go

    Um laboratório para juntar gestão de projetos, observabilidade de engenharia e IA num produto só.

    O que eu quis resolver

    1. Duas linguagens, um contrato

      Next.js cuida da interface, da autenticação e do RBAC; um serviço em Go com Fiber recebe webhooks e roda o motor de IA.

    2. Migrations com uma fonte só

      As migrations SQL do PostgreSQL vivem numa única pasta canônica, separada do código dos dois serviços.

    Plataforma web

    Stack: Next.js · TypeScript · Go · Fiber · PostgreSQL · Docker

    Estado: Em desenvolvimento

06

Contato

Qual é o próximo sistema que a sua empresa precisa?

Me conte o contexto: um problema, uma ideia ou um sistema que precisa evoluir. Eu respondo com um caminho técnico claro e o primeiro passo para tirar do papel.