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.
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.
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.
Como divulgar um app no Reddit com engajamento orgânico e medição honesta
|10 min de leitura
Escrito por: Jonathan Reis em
Prepare um showcase de app com criativo nativo, links diretos de loja permitidos, QR code legível, metadados opcionais de campanha e uma leitura de resultado sem inventar atribuiçã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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.