Pular para o conteúdo

Diário de desenvolvimento

Decisões práticas de um estúdio pequeno de apps.

Bastidores de criação, publicação e operação de jogos mobile e apps simples para o dia a dia.

Feed RSS
Engenharia de IA

Automatize checks repetitivos com n8n local e um agente de IA

12 min de leitura

Escrito por: Jonathan Reis em

Instale o n8n local sem Docker, conecte o MCP nativo a um agente de codificação e monte um monitor de pull requests que notifica o macOS quando algo muda de verdade.

Engenharia de IA

Como criar um marketplace pessoal para compartilhar sua configuração do OMP

10 min de leitura

Escrito por: Jonathan Reis em

Entenda o que é o OMP, como um marketplace instala extensões e como transformar skills, regras, modelos e MCPs em uma configuração pessoal versionada entre computadores.

Engenharia de IA

Por que troquei Claude Code, Cursor e OpenCode pelo OMP

13 min de leitura

Escrito por: Jonathan Reis em

Como o Oh My Pi funciona, onde ele difere de Claude Code, Cursor e OpenCode e quais recursos do harness me fizeram trocar de ferramenta.

Analytics React Native

Por que um app Expo precisa de uma camada de analytics antes de adicionar Amplitude

18 min de leitura

Escrito por: Jonathan Reis em

Crie um contrato único de analytics para um app Expo, mantenha Firebase e GA4 funcionando, adicione Amplitude sem reescrever o código de produto e ganhe rollout independente, falha isolada e decisões melhores.

OpenCode e Analytics

Como usar o Google Analytics MCP no OpenCode para consultar o GA4

13 min de leitura

Escrito por: Jonathan Reis em

Configure o MCP oficial do Google Analytics no OpenCode, autorize o acesso com ADC e transforme perguntas repetidas sobre o GA4 em relatórios reproduzíveis.

Arquitetura de monorepo

Como manter assets canônicos em um monorepo React Native

10 min de leitura

Escrito por: Jonathan Reis em

Um padrão prático para organizar fontes, exports e entregas técnicas de apps React Native, sites estáticos, lojas e áudio compartilhado.

Builds nativos com Expo

Como criar ícones para Android e iOS no Expo sem o Android cortar a arte

9 min de leitura

Escrito por: Jonathan Reis em

Use uma fonte editável, um raster opaco para iOS e um foreground Android transparente para evitar que máscaras do launcher cortem seu ícone.

Engenharia de Frontend

Como exportar um criativo Astro responsivo em PNG com proporção personalizada

9 min de leitura

Escrito por: Jonathan Reis em

Crie um botão de exportação PNG no navegador com proporção editável, área de captura visível, fontes e imagens carregadas, e dimensões que batem com o arquivo baixado.

IA local

Como rodar FLUX 2, Z-Image e OmniSVG localmente no Windows com ComfyUI

18 min de leitura

Escrito por: Jonathan Reis em

Rode FLUX 2 para raster, Z-Image-Turbo para texto curto legível e OmniSVG para vetores nativos em um PC Windows AMD com ComfyUI.

Acesso remoto

Como usar o RustDesk na rede local com acesso direto por IP

10 min de leitura

Escrito por: Jonathan Reis em

Configure o acesso direto por IP do RustDesk para controlar a sessão atual pela LAN, verificar a rota e diagnosticar firewall ou isolamento do Wi-Fi.

Arquitetura de jogos em React Native

Como modelar eventos de conclusão de tabuleiro para feedback em jogos React Native

10 min de leitura

Escrito por: Jonathan Reis em

Um modelo prático para diferenciar linha, coluna ou bloco concluído da nona colocação correta de um dígito e encaminhar ambos para som e haptics.

Desenvolvimento de games

Como criar uma linha mundial de jogos independentes de puzzles lógicos

11 min de leitura

Escrito por: Jonathan Reis em

Uma estratégia prática para lançar Sudoku, Nonogram, Hashi e outros puzzles como produtos independentes antes de conectá-los em uma coleção comum.

Playwright e automação

Como conectar o Playwright MCP ao Chrome pelo Remote Debugging

9 min de leitura

Escrito por: Jonathan Reis em

Um passo a passo para habilitar o Remote Debugging do Chrome, identificar a porta CDP dinâmica, trocar o endpoint do Playwright MCP e diagnosticar erros 403 e ECONNREFUSED.

Estratégia de produto

Como avaliar ideias de apps e jogos mobile antes de construir o MVP

10 min de leitura

Escrito por: Jonathan Reis em

Um método prático para comparar ideias de produtos mobile usando concorrência, monetização, distribuição, interesse pessoal e evidências reais.

Engenharia de IA

Como auditar gateways de IA do OpenCode: identidade, fallback silencioso e custo real

11 min de leitura

Escrito por: Jonathan Reis em

Um método reproduzível no OpenCode para verificar o roteamento de modelos, comparar o billing com preços upstream e testar geração de imagens.

Expo e React Native iOS

Como rodar o primeiro build iOS de um app Expo num monorepo pnpm

14 min de leitura

Escrito por: Jonathan Reis em

O passo a passo de como fiz o primeiro build iOS de um app Expo (Sudoku) que já buildava no Android, num monorepo pnpm: prebuild, pod install, xcodebuild Release, simulador. Inclui as três armadilhas que travam o build (babel, Hermes prebuilt, Firebase mock) e como resolver cada uma nas fontes versionadas.

Game Development

Como embutir Godot em um app React Native e medir o custo real

17 min read

Escrito por: Jonathan Reis em

Uma POC Expo hospeda Godot em uma View nativa Android, corrige a ponte RN↔GDScript e troca milhares de nós por desenho batched; no iOS, o diagnóstico mostra por que build e bootstrap não provam renderização no Simulator.

VS Code e tooling de IA

Como construir uma extensão para VS Code: li a do OpenCode e criei a minha

12 min de leitura

Escrito por: Jonathan Reis em

Tutorial de como criar uma extensão para VS Code do zero. Eu li o código minificado da extensão oficial do OpenCode, descobri o endpoint HTTP interno e construí uma que envia seleção de texto — inclusive de arquivos não salvos.

React Native Skia

Como desenhar um tabuleiro de Sudoku inteiro em um SkPicture (e por que o Canvas declarativo travava)

9 min read

Escrito por: Jonathan Reis em

Por que o renderer Skia declarativo com 81 componentes React por célula sofria em dispositivos antigos, e como reimplementar o tabuleiro com Skia.PictureRecorder + <Picture> elimina o reconciler do caminho crítico de render.

Astro e pnpm

Quando astro check diz que falta dependência, mas o bug real é um override do pnpm

8 min read

Escrito por: Jonathan Reis em

Como um override global de vscode-languageserver-protocol quebrou o @astrojs/check com ERR_PACKAGE_PATH_NOT_EXPORTED, e por que remover o override corrigiu o typecheck dos sites Astro.

Operação de estúdio

O que muda quando um site institucional começa a usar analytics

8 min read

Escrito por: Jonathan Reis em

Uma nota prática sobre adicionar GA4 e Cloudflare Web Analytics a um site de estúdio sem transformar páginas legais, sitemap e header/footer em cópia espalhada.

Processo de engenharia

Escolhendo alvos de layout mobile por logs reais, não por chute de device

11 min read

Escrito por: Jonathan Reis em

Como usamos logs de user-agent no Loki, dados de uso por modelo de iPhone e estatísticas de resolução mobile para escolher fatores de tela práticos em um jogo React Native.

Processo de estúdio

Como reorganizamos a documentação de um app antes que ela ficasse impossível de manter

9 min read

Escrito por: Jonathan Reis em

Uma estrutura prática para documentação de apps: plano vivo, histórico por data, release notes por versão, referência de produto, copy de loja e gates de publicação sem transformar um Markdown em gaveta de bagunça.

UX e produto

Rodando uma critique heurística de UX no meu próprio app — e corrigindo o que ela encontrou

9 min read

Escrito por: Jonathan Reis em

Um desenvolvedor solo faz uma avaliação heurística baseada em Nielsen num jogo React Native publicado, prioriza os achados e mede a mudança de score após as correções. Processo prático para devs indie sem equipe de UX.

Landing pages e conversão

Reconstruir a landing page do Daily Sudoku depois do lançamento na Play Store

9 min de leitura

Escrito por: Jonathan Reis em

O app já estava publicado, mas o site ainda falava como um teaser pré-lançamento. Veja o que mudamos — com assistentes de IA e uma crítica de design automatizada — para transformar a página numa superfície de conversão de verdade.

Astro e Cloudflare Pages

Datas do blog com um dia a menos: o bug de timezone que afeta todo site Astro

6 min de leitura

Escrito por: Jonathan Reis em

Todos os posts do nosso site Astro mostravam a data com um dia a menos. A causa era simples, mas o fix completo envolveu frontmatter, formatação e ordenação — e rendeu uma regra durável para o monorepo.

Release Android com Expo

Versão, versionCode e config gerada: três números que o release Android precisa alinhar

8 min de leitura

Escrito por: Jonathan Reis em

Depois de nove uploads na Play com versionName 0.1.0, lint sobrescrevendo config de produção e comandos de build com nomes ambíguos, documentamos a regra SemVer, os scripts dev/prd e o porquê de não regenerar config no lint.

Analytics React Native

Como validar eventos no Firebase DebugView em um APK release React Native

9 min de leitura

Escrito por: Jonathan Reis em

Valide Firebase Analytics num APK React Native de produção combinando logs locais com a resposta realtime por trás do GA4 DebugView, mesmo quando o contador de dispositivos mostra zero.

Anúncios em React Native

AdMob UMP em React Native: mensagens de privacidade não são só painel

9 min de leitura

Escrito por: Jonathan Reis em

Um checklist prático para AdMob UMP em um app Android Expo/React Native, cobrindo GDPR, regulamentos estaduais dos EUA, vínculo com a loja e o gate do SDK antes dos anúncios.

React Native

Seu confete em React Native renderiza atrás dos cards: ordem de irmãos, zIndex e elevation

8 min de leitura

Escrito por: Jonathan Reis em

Um overlay de comemoração na tela de vitória caía atrás dos cards de resultado e descia rápido demais. A causa era a ordem de pintura entre irmãos no React Native, não um z-index faltando. Veja por que zIndex sozinho não basta no Android e como corrigimos os dois bugs.

Game Design

Quando validação prestativa vira trapaça: as notas de Sudoku que vazavam a resposta

7 min de leitura

Escrito por: Jonathan Reis em

Nosso Sudoku bloqueava anotações que conflitavam com a linha, coluna ou bloco. Parecia uma checagem de segurança. Na verdade era um solver de graça que dizia ao jogador quais números ainda eram possíveis. Veja o conserto e o princípio por trás dele.

React Native

Um TextInput escondido não captura teclado físico na New Architecture do React Native

8 min de leitura

Escrito por: Jonathan Reis em

Queríamos teclado físico num jogo React Native no Android. O truque clássico do TextInput escondido falhou no Fabric porque o showSoftInputOnFocus é ignorado. O adb provou isso, e um config plugin resolveu de vez.

React Native Skia

A borda arredondada que jogou todos os dígitos do Sudoku para o lado

8 min de leitura

Escrito por: Jonathan Reis em

Uma borda num container overflow-hidden deslocou nosso tabuleiro Skia e descentralizou todos os dígitos. Veja como screenshots, e não o olho, acharam a causa real num jogo React Native.

Ferramentas React Native

Por que __DEV__ é false em build de release, e como passamos a gatear as dev tools por config

7 min de leitura

Escrito por: Jonathan Reis em

Um atalho de desenvolvimento escondido atrás de __DEV__ sumiu exatamente quando precisávamos dele num build de release. Aqui está por que isso acontece no React Native e como movemos o gate para a config de runtime.

Design systems

Design tokens como fonte única: dando a um app de Sudoku uma direção de arte de verdade

8 min de leitura

Escrito por: Jonathan Reis em

Como demos a um Sudoku com cara de template uma direção de arte forte mexendo primeiro nos tokens de tema, compartilhando-os com o site e respeitando o orçamento de performance de um aparelho fraco.

Haptics em React Native

Adicionando haptics do Expo a um jogo React Native sem tratar vibração como som

8 min de leitura

Escrito por: Jonathan Reis em

Como o Daily Sudoku ganhou um toggle persistido de vibração, reaproveitou eventos de gameplay e manteve o bundle Web seguro usando expo-haptics no nativo.

React Native Web

Tocando os mesmos WAVs no Expo Web e no app React Native

8 min de leitura

Escrito por: Jonathan Reis em

Como reduzimos a diferença entre Web e app em um jogo Expo/React Native ao trocar tons sintéticos por assets WAV empacotados e logs de áudio configuráveis.

Testes React Native

Como manter E2E com Playwright útil quando React Native Skia renderiza canvas

9 min de leitura

Escrito por: Jonathan Reis em

Uma nota de campo sobre testar um tabuleiro React Native Skia em canvas com Playwright, trocar seletores só de DOM por uma ponte estreita e deixar persistência determinística.

SEO técnico

Checklist de indexação no Google para sites Astro no Cloudflare Pages

9 min de leitura

Escrito por: Jonathan Reis em

Um checklist de campo para provar se sites Astro no Cloudflare Pages estão rastreáveis, enviados no Search Console e realmente indexados pelo Google.

React Native Android

Desligando sons de toque no Android em React Native sem brigar com Switch

7 min de leitura

Escrito por: Jonathan Reis em

Como uma configuração de som em React Native acabou controlando efeitos de jogo, tap nativo do Android e um bug de duplo toggle em um Switch aninhado.

Performance em React Native

Medindo latência percebida em React Native quando métricas de frame não bastam

7 min de leitura

Escrito por: Jonathan Reis em

Como medimos o tempo de resposta em React Native do handler do toque até estado e paint quando estatísticas de frame não explicavam o que o jogador sentia.

Performance em React Native

Migrando um tabuleiro Sudoku em React Native para Skia sem apagar o renderer antigo

7 min de leitura

Escrito por: Jonathan Reis em

Como testamos um tabuleiro Sudoku em Skia atrás de config sem apagar o renderer React Native, a camada de acessibilidade ou o caminho de rollback.

Builds Nativos Expo

Quando um upgrade do Expo transforma sua splash screen em tela branca

8 min de leitura

Escrito por: Jonathan Reis em

Uma nota prática sobre corrigir splash nativa quebrada depois de upgrade do Expo SDK, migrando do bloco legado de splash para o plugin expo-splash-screen.

Monetização Android

Como validar uma compra de teste Google Play com RevenueCat

6 min de leitura

Escrito por: Jonathan Reis em

Um checklist de campo para ligar uma compra de teste Google Play a credenciais RevenueCat, pedido no Play Console, dados sandbox, identidade do SDK e Sentry.

Qualidade antes da beta

Checklist honesto antes de ampliar um teste interno Android

7 min de leitura

Escrito por: Jonathan Reis em

Como separar o que uma build da Google Play já provou de lacunas em SDK, billing, anúncios e observabilidade antes de chamar mais testadores.

React Native na Play Store

Publicando um app Expo/React Native na Google Play com AAB local

8 min de leitura

Escrito por: Jonathan Reis em

Como gerar um AAB local Expo/React Native para Google Play e ainda validar assinatura, Firebase, Sentry, AdMob, RevenueCat e entrega pela loja como release real.

Debug de release React Native

Quando o versionCode muda, mas o JavaScript não: uma armadilha em builds React Native

6 min de leitura

Escrito por: Jonathan Reis em

Um bug de release em que a Google Play instalou um versionCode Android novo enquanto o bundle JavaScript React Native ainda anunciava a release antiga no Sentry.

Monetização mobile

Quando vale usar RevenueCat em vez de Google Play Billing direto?

7 min de leitura

Escrito por: Jonathan Reis em

Uma conta de margem e operação para decidir se um app indie deve pagar RevenueCat ou assumir o suporte de Google Play Billing direto.

Google Play no Brasil

Como preparar uma conta Google Play Console para publicar um app Android no Brasil

6 min de leitura

Escrito por: Jonathan Reis em

Uma ordem prática para preparar identidade, pagamentos, perfil público, grupo de contas, chaves de assinatura e páginas legais antes do primeiro upload na Google Play.