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
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.