# Fernando Moreira Costa > Desenvolvedor de software e engenheiro de IA, do dado à produção. Construo software de ponta a ponta há 15 anos, da interface ao dado, e hoje coloco agentes de IA e produtos com IA em produção. Na Liquid AI, respondi pela esteira de dados de financiamento imobiliário de mais de 20 incorporadoras, onde reduzi de cerca de cinco dias para até 30 minutos o tempo de preparar uma base e entregá-la na pipeline. Sustentei essa operação com um framework próprio de desenvolvimento assistido por IA, com guard-rails de segurança e portões de qualidade obrigatórios. Antes disso, seis anos em produtos de alta escala, como Itaú Unibanco, Pipefy e Skyone, e open source desde 2012. ## Projects - [ABRACCE](https://nandomoreira.dev/portfolio/abracce): Site institucional de uma organização sem fins lucrativos, feito para explicar a causa e receber apoio sem depender de rede social alheia. Construído em React Router no modo full-stack, para a mesma base servir as páginas de hoje e uma área autenticada no futuro, sem trocar de stack no caminho. - [AI Bar](https://nandomoreira.dev/lab/noctalia-aibar): Plugin para o Noctalia Shell que mostra na barra quanto do plano do Claude Code e do Grok já foi usado: a porcentagem da janela mais crítica, o tempo até ela reiniciar e uma barra de progresso. No painel, cada janela aparece com o ritmo de uso, adiantado ou atrasado em relação ao tempo que passou. - [Amnesia](https://nandomoreira.dev/lab/amnesia-claude-code): Camada de memória persistente e determinística para o Claude Code. Merge, deduplicação e validação saem do modelo e vão para um CLI em Python, então o resultado é o mesmo em toda execução e o agente para de responder com um dado lembrado errado. Uso diário no meu próprio fluxo de trabalho. - [Ateliê éh Pique](https://nandomoreira.dev/portfolio/atelie-eh-pique): Loja de artes digitais para máquinas de corte, que tirou do atendimento manual a venda de cada arquivo. Vitrine e painel ficam separados, para a autora publicar sem depender de quem desenvolveu, e o painel roda num tema WordPress próprio em vez de uma plataforma de loja com mensalidade. - [BragStack](https://nandomoreira.dev/portfolio/bragstack): Registro de conquistas profissionais em dez segundos, em texto livre, com a IA estruturando tudo no formato STAR na hora de gerar o brag document. É um PWA mobile-first, porque a conquista acontece longe do editor, e está no ar em bragstack.app. - [CoachBot](https://nandomoreira.dev/lab/coachbot-cli): Coach antimotivacional para o terminal: a cada shell aberto, uma frase sarcástica num balão, dita por um robozinho em pixel art. São mais de cem frases em inglês e outras tantas em português, e instala com uma linha só. - [Croonos Multi-Track](https://nandomoreira.dev/portfolio/croonos): Rastreamento de tempo e gestão de projetos para quem atende vários clientes ao mesmo tempo e perde a conta de onde as horas foram. Monorepo em Next.js, com rastreador e painel compartilhando os tipos do domínio, e registro por projeto desde o início, porque o dado que falta na hora não volta. - [Daybar](https://nandomoreira.dev/lab/noctalia-daybar): Plugin para o Noctalia Shell que reúne o dia numa barra: um campo de captura rápida que entende texto livre ("comprar pão amanhã 9h" vira tarefa, "/e reunião sexta 15h-16h" vira evento no Google Calendar), além de checklist de hoje, pomodoro e timer (que também abrem numa janela própria ou fixos num canto da tela), favoritos com prévia da página e notas em Markdown. - [Desktop Sticky Notes](https://nandomoreira.dev/lab/noctalia-desktop-sticky-notes): Plugin para o Noctalia Shell que prende notas adesivas na área de trabalho como widgets: cada nota pode ser arrastada e redimensionada, tem cor de post-it e texto em Markdown, abre um editor ao clique e pode ficar ligada a um arquivo .md no disco, atualizando quando o arquivo muda. - [Encantos Brincantes](https://nandomoreira.dev/portfolio/encantos-brincantes): Vitrine de recursos lúdicos para educação infantil, que levou para a web uma venda que dependia de mensagem direta. Feita em Svelte com renderização estática, porque o conteúdo muda por lote e não por visita, o que mantém a hospedagem perto de custo zero. No ar em encantosbrincantes.com.br. - [FlipClock](https://nandomoreira.dev/lab/flipclock-app): Relógio de flip para o desktop, feito em Go com Fyne, com animação de virada em duas fases, modo tela cheia e um modo protetor de tela que cobre todos os monitores conectados. A fonte vai embutida no binário, então o app roda sem depender de nenhum arquivo externo. - [FlipClock ASCII Screensaver](https://nandomoreira.dev/lab/flipclock-screensaver-ascii): Protetor de tela para Hyprland que desenha a hora em ASCII grande dentro de um terminal em tela cheia, um por monitor, com transições do Terminal Text Effects a cada minuto. Entra pelo hypridle quando a máquina fica ociosa e sai no primeiro movimento. - [Forja](https://nandomoreira.dev/lab/forja): Cliente desktop que reúne Claude Code, Codex e Gemini numa só interface, para não perder contexto alternando entre três terminais. Feito em Electron, React e TypeScript, com xterm.js para o terminal e uma camada de adaptação por CLI em vez de impor um protocolo comum às três. É o meu cliente principal no dia a dia. - [Forja Plugins](https://nandomoreira.dev/lab/forja-plugins): Registro oficial e monorepo de plugins do Forja: relógio, Pomodoro e tarefas em Markdown, sobre um SDK compartilhado com tipos da API de plugins. Cada plugin declara as permissões que usa, e um script gera o registro que o Forja consulta para instalar. - [Gistbar](https://nandomoreira.dev/lab/noctalia-gistbar): Plugin para o Noctalia Shell que traz os meus gists do GitHub para a barra: busca por descrição, nome de arquivo, linguagem e conteúdo, cópia pelo teclado, gist novo a partir da área de transferência, prévia e edição, tudo pelo gh CLI. - [grab-sh](https://nandomoreira.dev/lab/grab-sh): Script mínimo de screenshot para Wayland e Hyprland que copia direto para a área de transferência, sem salvar arquivo no disco. Dois atalhos de teclado: tela inteira ou uma área escolhida com a mira. - [Hypr Switcher](https://nandomoreira.dev/lab/hypr-switcher): Alt+Tab visual para o Hyprland, que não traz um alternador de janelas próprio. Em Rust sobre a camada layer-shell do Wayland, para o overlay aparecer acima de tudo sem roubar o foco, e com a latência de abertura como critério principal, porque é ela que decide se a ferramenta é usada ou abandonada. - [job-radar](https://nandomoreira.dev/lab/job-radar): Varre sites de vagas, descarta o que não combina com o seu perfil e publica as compatíveis no Discord, rodando sozinho algumas vezes por dia. Python puro, sem dependências: filtros duros decidem o que passa, uma pontuação de 0 a 100 ordena o resto, e as qualificações saem do próprio currículo em markdown. - [Mousai](https://nandomoreira.dev/portfolio/mousai): Mood boards minimalistas para artistas, compartilháveis por um código curto e sem exigir cadastro de quem visita. A interface sai do caminho para o acervo ser o centro, e não a ferramenta. Produto próprio em produção, no ar em mousai.gallery. - [Normalização de dados financeiros](https://nandomoreira.dev/portfolio/financial-normalization): Serviço que normaliza os dados financeiros heterogêneos das incorporadoras atendidas pela Liquid AI, mais de 20 bases ativas. A regra de cada incorporadora entra como adaptador numa arquitetura hexagonal, e não como desvio no núcleo. Reduziu de cerca de cinco dias para até 30 minutos o preparo de uma base, protegido por mais de 4.800 casos de teste. - [Plataforma de data insights](https://nandomoreira.dev/portfolio/data-insights-platform): Plataforma de análise e transformação de dados com IA generativa, em produção paga na Liquid AI. Leva a IA para dentro do fluxo de análise, no lugar de dashboards estáticos que envelhecem a cada pergunta do negócio, e separa orquestração de execução para o modelo nunca ser o único caminho de confiar no resultado. - [PortfolioSnap](https://nandomoreira.dev/portfolio/portfoliosnap): Registro de atividades para professores de educação infantil, feito em segundos no momento da atividade, com a IA gerando o relatório pedagógico do mês já alinhado à BNCC. O alinhamento acontece na geração, então o professor não precisa saber o código da habilidade na hora. No ar em portfoliosnap.com.br. - [rdo-solo](https://nandomoreira.dev/lab/rdo-solo): Controlador de sessão solo para Red Dead Online e GTA Online, que bloqueia o tráfego peer-to-peer do jogo no gateway Linux por onde o console passa. Começou como script de iptables e ganhou uma TUI em Rust, com jogadores na sessão e GeoIP, e um painel web para ligar e desligar o modo solo pelo celular. - [Seu Ateliê Aqui](https://nandomoreira.dev/portfolio/seu-atelie-aqui): Plataforma de anúncio de ateliês por proximidade geográfica, para quem procura um ateliê perto de casa e para quem hoje depende de grupo de mensagem para ser encontrado. A busca por distância é o eixo da navegação, e não um filtro secundário, porque é ela que decide a escolha nesse mercado. - [Sudadhara](https://nandomoreira.dev/portfolio/sudadhara): Site institucional de uma terapeuta autônoma, que explica o método antes do primeiro contato em vez de deixar toda a explicação para a conversa inicial. Página única, com o contato direto logo depois do método e sem formulário nem agenda integrada, porque o volume de atendimentos não justificava a manutenção. - [Tumodori](https://nandomoreira.dev/lab/tumodori): Pomodoro de terminal com dígitos grandes, legíveis de longe sem aproximar do monitor. Feito em Rust com Ratatui, para o cronômetro viver no mesmo lugar que o trabalho, e com os dígitos desenhados em bloco, para o tamanho não depender da fonte configurada no terminal de quem usa. ## Posts - [Scratchpad no Niri: janelas que somem e voltam com um atalho](https://nandomoreira.dev/scratchpad-no-niri-janelas-que-somem-com-um-atalho): O Niri não sabe minimizar janela. Um script de 199 linhas e um workspace escondido fazem o WhatsApp, o Obsidian e o YouTube aparecerem e sumirem com uma tecla, e o Discord, o Spotify e o LocalSend voltarem para a bandeja. - [espanso: a substituição de texto do iPhone, agora no meu Linux](https://nandomoreira.dev/espanso-substituicao-de-texto-no-linux): Usei a Substituição de texto do macOS por anos e ainda uso no iPhone todo dia. No CachyOS com Niri, o espanso faz o mesmo em qualquer campo de texto, depois de três ajustes que a documentação não conta. - [De cinco dias para trinta minutos: IA numa esteira de ETL](https://nandomoreira.dev/de-cinco-dias-para-trinta-minutos): Como a preparação de uma base de dados passou de quase uma semana de trabalho manual para meia hora: automação por API, IA onde ela ajuda, testes onde ela pode errar e o prazo como regra do produto. - [job-radar: parei de rolar lista de vaga e deixei o Python descartar por mim](https://nandomoreira.dev/job-radar-radar-de-vagas-em-python-puro): Sete fontes de vagas, filtros que descartam antes da nota, o currículo como lista de qualificações e um canal do Discord que recebe só o que sobrou. Sem nenhuma dependência para rodar, e com o código aberto. - [Sem JavaScript no browser: criei um analytics para o meu site e acompanho pelo terminal, em Rust](https://nandomoreira.dev/analytics-sem-script-medindo-no-servidor-e-lendo-no-terminal): Eu queria só o básico de analytics, sem injetar script no site e sem mandar dado de visitante para ninguém. Acabou virando um middleware, um pixel de 1×1, um cookie que se chama __session e uma TUI em Rust. - [Meu estudo sobre as sessões do Red Dead Online: P2P, relays da Rockstar e o NAT duplo que eu mesmo criei](https://nandomoreira.dev/sessoes-do-red-dead-online-p2p-relays-e-nat-duplo): Passei dez dias olhando o tráfego do meu Xbox para entender como uma sessão do Red Dead Online se forma. Aprendi a separar jogador de relay numa captura, descobri que o meu gateway tinha derrubado o tipo de NAT para Moderado e que esconder o IP de casa custa um ajuste de MTU. - [rdo-solo: Red Dead Online sozinho pelo gateway de casa, agora com código aberto](https://nandomoreira.dev/rdo-solo-red-dead-online-sozinho-pelo-gateway): Abri o rdo-solo, o controlador que me deixa sozinho numa sessão pública de Red Dead Online no Xbox. O console passa por um gateway Linux, o gateway derruba o P2P do jogo, e dá para ligar e desligar pelo terminal, por uma TUI em Rust ou pelo celular. - [Memória para agentes: um backbone em quatro camadas](https://nandomoreira.dev/memoria-para-agentes-em-4-camadas): Como o Claude Code lembra decisões entre sessões sem carregar tudo no contexto: o que é sempre lido, o que só entra quando alguém pergunta, e a migração que só terminou quando um portão deixou. - [Criei quatro plugins para o Noctalia 100% com IA no meu CachyOS](https://nandomoreira.dev/criei-quatro-plugins-para-o-noctalia-100-com-ia-no-meu-cachyos): Quatro plugins para a barra e a área de trabalho do Noctalia: captura rápida e agenda, uso do plano do Claude Code e do Grok, gists do GitHub e notas adesivas. Todos feitos com IA, no fluxo RPI, e o que mais deu trabalho foi a interface. - [Fluxo RPI com três agentes: o Claude Code planeja, o Grok implementa e o Codex revisa](https://nandomoreira.dev/fluxo-rpi-claude-code-grok-codex): Pesquisa e plano antes de qualquer feature, como eu já trabalhava. O Claude Code conduz, o Grok escreve, o Codex revisa, e o teste vem antes do código mesmo quando isso deixa a IA mais lenta. - [Como eu construí meu novo site em 2026 que conversa com IA via MCP](https://nandomoreira.dev/como-construi-meu-site-que-conversa-com-ia-via-mcp): Casa de ferreiro, espeto de pau: um engenheiro de IA sem site que conversa com IA. Como reconstruí o meu, com servidor MCP, versão para máquina de cada página e sete portões automatizados. - [Customizando mensagem da tag noscript no Gatsby](https://nandomoreira.dev/customizando-a-mensagem-noscript-no-gatsby): Nesse artigo vou explicar como customizar a mensagem da tag noscript usando o recurso do próprio Gatsby para alterar o HTML base da aplicação. - [Como está você agora e como estará daqui 30 anos?](https://nandomoreira.dev/como-esta-voce-agora-e-como-estara-daqui-30-anos): Todo mundo já fez essa pergunta para si próprio: “Afinal, quem sou eu?”, se você ainda não fez, vai por mim, um dia você irá parar e refletir sobre sua essência e sua personalidade. - [Role aleatório com conversas aleatórias gerou pensamentos aleatórios](https://nandomoreira.dev/role-aleatorio-com-conversas-aleatorias): Domingo, 14 de outubro de 2018, eu passei por um dos meus melhores finais de semana, conheci pessoas novas e troquei muitas ideias aleatórias com essas pessoas. - [Hoje o momento é de SER e ESTAR e não de TER!](https://nandomoreira.dev/hoje-o-momento-e-de-ser-e-estar): Você já parou para pensar o quanto você é manipulado pelos outros? Já parou para pensar em que ponto da sua vida você está nesse momento? - [Como testar erros na função wp_mail() no WordPress usando hooks](https://nandomoreira.dev/como-testar-erros-na-funcao-wp_mail-no-wordpress-usando-hooks): A dica hoje será bem rápida, iremos testar erros na função wp_mail() no WordPress usando hooks. - [Como exibir o calendário rápido direto do terminal](https://nandomoreira.dev/como-exibir-calendario-do-terminal): Uma dica rápida e super útil para visualizar o calendário completo de qualquer ano diretamente no terminal - [Criando um blog com Vue.js e Nuxt.js](https://nandomoreira.dev/criando-um-blog-com-vuejs-o-nuxtjs): Essa é a parte 1 de uma série onde iremos usar a tecnologia SSR (Server Side Rendering) para criar um blog e no final hospeda-lo no GitHub pages e no Netlify. - [Programador a comunidade precisa de você!](https://nandomoreira.dev/programador-a-comunidade-precisa-de-voce): Sobre o porquê de alguns desenvolvedores não contribuem com a comunidade open-source. - [Comece com Gulp!](https://nandomoreira.dev/comece-com-gulp): Eu particularmente gosto muito de ganhar tempo com o desenvolvimento dos meus projetos e usar automatizador de tarefas me dá esse poder. - [Retro 2016, Planning 2017](https://nandomoreira.dev/retro-2016-planing-2017): 2016 não foi um ano ruim, tanto na minha vida profissional quando na minha vida pessoal, confesso que tive alguns obstáculos, mas todos foram ultrapassados com sucesso. - [Como um time](https://nandomoreira.dev/como-um-time): Trabalhar como um time é elevar o projeto a um nível superior, que nem mesmo você nem seus superiores imaginariam chegar, mas só conseguiram chegar lá porque viram a necessidade de trabalhar em equipe. - [Ativando o tema Dark nativo do Chrome DevTools e indo para o lado negro da força](https://nandomoreira.dev/ativando-o-tema-dark-nativo-do-chrome-dev-tools): O Google Chrome em uma de suas atualizações implementou o tema “Dark” para o Chrome DevTools. - [Usando o pseudo selector :target para criar modal apenas com CSS](https://nandomoreira.dev/usando-o-selector-target-para-criar-modal-apenas-com-css): Um pseudo selector das CSS3 muito útil é o :target, ele fornece recursos de estilo para um elemento cujo o ID está visivel na url - [Reflexão: agradeça mais e reclame menos](https://nandomoreira.dev/agradeca-mais-e-reclame-menos): Você já parou pra pensar quantas vezes você reclama por dia, ou quantas vezes você reclamou hoje? - [Como converter todos arquivos .scss de um diretório para extensão .sass](https://nandomoreira.dev/como-converter-todos-arquivos-scss-de-um-diretorio-para-extensao-sass): Iremos usar o comando sass-convert do próprio SASS para realizar a conversão dos arquivos, mas já sabemos que ele converte apenas um único arquivo - [Usando Browsersync em uma aplicação Ruby on Rails](https://nandomoreira.dev/usando-browsersync-em-uma-aplicacao-ruby-on-rails): Hoje vou explicar como integrar e usar o Browsersync.io dentro de uma aplicação Ruby on Rails - [Criando a bandeira do Brasil 🇧🇷 apenas com CSS](https://nandomoreira.dev/criando-a-bandeira-do-brasil-apenas-com-css): Hoje eu vou demonstrar nesse artigo como eu criei a bandeira do Brasil usando apenas com CSS - [Como incluir vídeos do youtube no seu blog Jekyll de forma fácil](https://nandomoreira.dev/como-incluir-videos-do-youtube-no-jekyll): Hoje vamos usar um plugin bem bacana para incluir vídeos do youtube no seu blog Jekyll sem precisar copiar e colar o iframe do youtube - [WP-CLI: Uma interface de linha de comando para WordPress](https://nandomoreira.dev/wp-cli-uma-interface-de-linha-de-comando-para-wordpress): Nesse artigo vou mostrar como instalar a WP-CLI, uma interface de linha de comando para WordPress - [YeoPress, iniciando projetos WordPress em segundos](https://nandomoreira.dev/yo-wordpress-iniciando-projetos-para-wordpress-em-segundos): Sim, existe um Generator para WordPress, o YeoPress faz o download do WP e inicia uma estrutura complata pra você já sair codificando o seu projeto - [Fazendo um sistema de busca simples no Jekyll usando AngularJS](https://nandomoreira.dev/fazendo-sistema-de-busca-no-jekyll-com-angularjs): Por alguns meses eu usei o plugin Simple Jekyll Search que funcionou muito bem no meu blog - [Ei front-end! Você conhece o Panda? 🐼](https://nandomoreira.dev/ei-front-end-voce-conhece-o-panda): Essa é uma dica rápida para quem ama e trabalha com desenvolvimento de interfaces para o usuário - [Não seja apenas um recortador de PSD!](https://nandomoreira.dev/nao-seja-apenas-um-recortador-de-psd): Durante minha trajetória até aqui eu já trabalhei com alguns programadores e designers que discordariam completamente da minha opinião - [SASS + Atomic design](https://nandomoreira.dev/sass-e-atomic-design): SASS é um pré-processador incrível não acha? Mas muitos não sabem como organizar seus projetos com ele - [Usando categorias e tags no Jekyll](https://nandomoreira.dev/usando-categorias-e-tags-no-jekyll): GitHub Pages serviço é simplesmente incrível! E com a integração Jekyll ele fica ainda mais impressionante! Mas existem algumas limitações neste grande sistema automatizado - [Faço front-end de graça, saiba como!](https://nandomoreira.dev/faco-front-end-de-graca): É isso mesmo que você leu, Faço front-end de graça, mas tem alguns requisitos necessários para que isso aconteça, vem comigo que te explico como - [8 meses de MalaPronta e o fim.](https://nandomoreira.dev/8-meses-de-malapronta-e-o-fim): Eu queria poder dizer que to feliz com tudo isso, mas não to. Eu amava trabalhar lá, apesar de muitas intrigas e desavenças, eu amava meu emprego. - [#5 - Conhecendo o pré-processador SASS | Placeholder](https://nandomoreira.dev/sass-parte-5-placeholder): Uma das funcionalidades mais legais do SASS é você poder criar placeholders para agrupamento de códigos repetidos - [Yeoman Generator Gulp Boilerplate](https://nandomoreira.dev/yeoman-generator-gulp-boilerplate): Eu criei um repositório no Github onde mantenho atualizado com um boilerplate para Gulp, o repositório era pra ser pessoal mas eu resolvi compartilhar. - [Como instalar o Gulp 4](https://nandomoreira.dev/como-instalar-o-gulp-4): Gulp 4 não foi liberado ainda e se você não pode esperar para colocar suas mãos sobre ele, aqui vai como instalar o Gulp 4. - [Blog Wilson Luiz Prosdocimo com Jekyll](https://nandomoreira.dev/blog-wilson-luiz-prosdocimo): Meu amigo Wilson gostou muito da ideia de poder publicar o blog dele no github usando Jekyll. Pode-se dizer que eu sou um “Evangelista do Jekyll” porque ele é um convertido da minha palavra. - [#3 - Conhecendo o pré processador SASS | Mixins](https://nandomoreira.dev/sass-parte-3-mixins): Mixin foi definitivamente algo novo para mim, você consegue passar valores por parâmetros assim como funções - [#4 - Conhecendo o pré processador SASS | Funções](https://nandomoreira.dev/sass-parte-4-funcoes): Quarta parte da série sobre Sass: como escrever funções próprias com @function e @return, com exemplos de cálculo. - [#2 - Conhecendo o pré-processador SASS | Variáveis](https://nandomoreira.dev/sass-variaveis-parte-2): Se você está começando agora no mundo do desenvolvimento você precisa ter uma base de como funciona variáveis. - [#1 - Conhecendo o pré-processador SASS | Instalação](https://nandomoreira.dev/conhecendo-o-pre-processador-sass-parte-1): Todo desenvolvedor web deveria conhecer algum pré-processador CSS, seja ele Less, SASS, Stylus ou qualquer outro - [Meu ambiente de trabalho em 7 itens](https://nandomoreira.dev/meu-ambiente-de-trabalho-em-7-itens): Aderi ao GNU linux como OS padrão no final de 2014, apesar de usá-lo desde 2009. - [Wordpress - plugins x functions.php](https://nandomoreira.dev/wordpress-plugins-x-functions-php): Muitos amigos e colegas de trabalho sempre me perguntam porque eu sou contra o uso de plugins no Wordpress. ## Machine routes - [/llms-full.txt](https://nandomoreira.dev/llms-full.txt): Full LLM-oriented dump of profile, cases and posts - [/ai-index.json](https://nandomoreira.dev/ai-index.json): Machine-readable index of pages, cases and posts - `/portfolio/.md`: Markdown mirror of a portfolio case - `/lab/.md`: Markdown mirror of a lab case - [/api/resume.json](https://nandomoreira.dev/api/resume.json): Résumé in JSON Resume schema, with an extension block - [/api/resume.txt](https://nandomoreira.dev/api/resume.txt): Plain-text résumé, LLM friendly - [/api/mcp](https://nandomoreira.dev/api/mcp): MCP server: get_profile, list_projects, get_project, get_resume, check_availability - [/api/hire](https://nandomoreira.dev/api/hire): POST a project brief on behalf of your user - [/AGENTS.md](https://nandomoreira.dev/AGENTS.md): Hiring brief: services, availability, how to call these endpoints ## Language - Human-facing pages are written in Brazilian Portuguese. - Machine-facing routes are written in English.