<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog da Sunstone Apps</title>
    <link>https://sunstoneapps.com/pt-BR/blog/</link>
    <description>Notas de campo da Sunstone Apps sobre jogos mobile, publicação de apps, Google Play e engenharia de produto.</description>
    <language>pt-BR</language>
    <atom:link href="https://sunstoneapps.com/pt-BR/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Quando astro check diz que falta dependência, mas o bug real é um override do pnpm</title>
      <link>https://sunstoneapps.com/pt-BR/blog/astro-check-vscode-languageserver-protocol-override/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/astro-check-vscode-languageserver-protocol-override/</guid>
      <pubDate>Mon, 20 Jul 2026 01:00:00 GMT</pubDate>
      <category>Astro e pnpm</category>
      <description>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.</description>
    </item>
    <item>
      <title>O que muda quando um site institucional começa a usar analytics</title>
      <link>https://sunstoneapps.com/pt-BR/blog/institutional-site-privacy-analytics-chrome/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/institutional-site-privacy-analytics-chrome/</guid>
      <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
      <category>Operação de estúdio</category>
      <description>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.</description>
    </item>
    <item>
      <title>Escolhendo alvos de layout mobile por logs reais, não por chute de device</title>
      <link>https://sunstoneapps.com/pt-BR/blog/production-logs-mobile-aspect-ratio-react-native-layout/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/production-logs-mobile-aspect-ratio-react-native-layout/</guid>
      <pubDate>Thu, 16 Jul 2026 02:00:00 GMT</pubDate>
      <category>Processo de engenharia</category>
      <description>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.</description>
    </item>
    <item>
      <title>Como reorganizamos a documentação de um app antes que ela ficasse impossível de manter</title>
      <link>https://sunstoneapps.com/pt-BR/blog/app-documentation-release-notes-structure/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/app-documentation-release-notes-structure/</guid>
      <pubDate>Thu, 16 Jul 2026 01:00:00 GMT</pubDate>
      <category>Processo de estúdio</category>
      <description>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.</description>
    </item>
    <item>
      <title>Rodando uma critique heurística de UX no meu próprio app — e corrigindo o que ela encontrou</title>
      <link>https://sunstoneapps.com/pt-BR/blog/ux-heuristic-critique-react-native-mobile-game/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/ux-heuristic-critique-react-native-mobile-game/</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <category>UX e produto</category>
      <description>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.</description>
    </item>
    <item>
      <title>Reconstruir a landing page do Daily Sudoku depois do lançamento na Play Store</title>
      <link>https://sunstoneapps.com/pt-BR/blog/app-landing-page-after-launch-play-store/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/app-landing-page-after-launch-play-store/</guid>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <category>Landing pages e conversão</category>
      <description>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.</description>
    </item>
    <item>
      <title>Datas do blog com um dia a menos: o bug de timezone que afeta todo site Astro</title>
      <link>https://sunstoneapps.com/pt-BR/blog/astro-blog-date-off-by-one-timezone/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/astro-blog-date-off-by-one-timezone/</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <category>Astro e Cloudflare Pages</category>
      <description>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.</description>
    </item>
    <item>
      <title>Versão, versionCode e config gerada: três números que o release Android precisa alinhar</title>
      <link>https://sunstoneapps.com/pt-BR/blog/expo-android-release-semver-config-generated/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/expo-android-release-semver-config-generated/</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <category>Release Android com Expo</category>
      <description>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.</description>
    </item>
    <item>
      <title>screen_view no GA4 com React Native: por que eventos customizados não bastam</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-ga4-screen-view-firebase-debug/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-ga4-screen-view-firebase-debug/</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <category>Analytics React Native</category>
      <description>O Daily Sudoku enviava centenas de eventos Firebase, mas Páginas e telas ficava em zero. Como adicionamos screen_view via React Navigation, user properties, dimensões no GA4 Admin e validação por logcat quando o DebugView falha no device físico.</description>
    </item>
    <item>
      <title>AdMob UMP em React Native: mensagens de privacidade não são só painel</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-admob-ump-privacy-messages/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-admob-ump-privacy-messages/</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <category>Anúncios em React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Seu confete em React Native renderiza atrás dos cards: ordem de irmãos, zIndex e elevation</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-overlay-zindex-elevation-confetti/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-overlay-zindex-elevation-confetti/</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
      <category>React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Quando validação prestativa vira trapaça: as notas de Sudoku que vazavam a resposta</title>
      <link>https://sunstoneapps.com/pt-BR/blog/sudoku-notes-candidate-filter-exploit/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/sudoku-notes-candidate-filter-exploit/</guid>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <category>Game Design</category>
      <description>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.</description>
    </item>
    <item>
      <title>Um TextInput escondido não captura teclado físico na New Architecture do React Native</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-hardware-keyboard-android-new-architecture/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-hardware-keyboard-android-new-architecture/</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <category>React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>A borda arredondada que jogou todos os dígitos do Sudoku para o lado</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-skia-text-centering-border-clip/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-skia-text-centering-border-clip/</guid>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <category>React Native Skia</category>
      <description>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.</description>
    </item>
    <item>
      <title>Por que __DEV__ é false em build de release, e como passamos a gatear as dev tools por config</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-dev-tools-config-vs-dev-flag/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-dev-tools-config-vs-dev-flag/</guid>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <category>Ferramentas React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Design tokens como fonte única: dando a um app de Sudoku uma direção de arte de verdade</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-design-tokens-sudoku-art-direction/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-design-tokens-sudoku-art-direction/</guid>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <category>Design systems</category>
      <description>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.</description>
    </item>
    <item>
      <title>Adicionando haptics do Expo a um jogo React Native sem tratar vibração como som</title>
      <link>https://sunstoneapps.com/pt-BR/blog/expo-haptics-react-native-game-settings/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/expo-haptics-react-native-game-settings/</guid>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <category>Haptics em React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Tocando os mesmos WAVs no Expo Web e no app React Native</title>
      <link>https://sunstoneapps.com/pt-BR/blog/expo-react-native-web-audio-wav-assets/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/expo-react-native-web-audio-wav-assets/</guid>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <category>React Native Web</category>
      <description>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.</description>
    </item>
    <item>
      <title>Como manter E2E com Playwright útil quando React Native Skia renderiza canvas</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-skia-e2e-github-actions-pnpm/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-skia-e2e-github-actions-pnpm/</guid>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <category>Testes React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Checklist de indexação no Google para sites Astro no Cloudflare Pages</title>
      <link>https://sunstoneapps.com/pt-BR/blog/google-indexing-astro-cloudflare-pages/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/google-indexing-astro-cloudflare-pages/</guid>
      <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
      <category>SEO técnico</category>
      <description>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.</description>
    </item>
    <item>
      <title>Desligando sons de toque no Android em React Native sem brigar com Switch</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-android-touch-sound-toggle/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-android-touch-sound-toggle/</guid>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <category>React Native Android</category>
      <description>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.</description>
    </item>
    <item>
      <title>Medindo latência percebida em React Native quando métricas de frame não bastam</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-perceived-latency-probe/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-perceived-latency-probe/</guid>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <category>Performance em React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Migrando um tabuleiro Sudoku em React Native para Skia sem apagar o renderer antigo</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-sudoku-skia-renderer/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-sudoku-skia-renderer/</guid>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <category>Performance em React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Quando um upgrade do Expo transforma sua splash screen em tela branca</title>
      <link>https://sunstoneapps.com/pt-BR/blog/expo-splash-screen-sdk-upgrade/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/expo-splash-screen-sdk-upgrade/</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <category>Builds Nativos Expo</category>
      <description>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.</description>
    </item>
    <item>
      <title>Como validar uma compra de teste Google Play com RevenueCat</title>
      <link>https://sunstoneapps.com/pt-BR/blog/validar-compra-teste-google-play-revenuecat/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/validar-compra-teste-google-play-revenuecat/</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <category>Monetização Android</category>
      <description>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.</description>
    </item>
    <item>
      <title>Checklist honesto antes de ampliar um teste interno Android</title>
      <link>https://sunstoneapps.com/pt-BR/blog/checklist-teste-interno-android-google-play/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/checklist-teste-interno-android-google-play/</guid>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <category>Qualidade antes da beta</category>
      <description>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.</description>
    </item>
    <item>
      <title>Publicando um app Expo/React Native na Google Play com AAB local</title>
      <link>https://sunstoneapps.com/pt-BR/blog/expo-react-native-google-play-aab-local/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/expo-react-native-google-play-aab-local/</guid>
      <pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate>
      <category>React Native na Play Store</category>
      <description>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.</description>
    </item>
    <item>
      <title>Quando o versionCode muda, mas o JavaScript não: uma armadilha em builds React Native</title>
      <link>https://sunstoneapps.com/pt-BR/blog/react-native-versioncode-bundle-js-cacheado/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/react-native-versioncode-bundle-js-cacheado/</guid>
      <pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate>
      <category>Debug de release React Native</category>
      <description>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.</description>
    </item>
    <item>
      <title>Quando vale usar RevenueCat em vez de Google Play Billing direto?</title>
      <link>https://sunstoneapps.com/pt-BR/blog/revenuecat-vs-google-play-billing-app-indie/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/revenuecat-vs-google-play-billing-app-indie/</guid>
      <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
      <category>Monetização mobile</category>
      <description>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.</description>
    </item>
    <item>
      <title>Como preparar uma conta Google Play Console para publicar um app Android no Brasil</title>
      <link>https://sunstoneapps.com/pt-BR/blog/google-play-console-app-android-brasil/</link>
      <guid isPermaLink="true">https://sunstoneapps.com/pt-BR/blog/google-play-console-app-android-brasil/</guid>
      <pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
      <category>Google Play no Brasil</category>
      <description>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.</description>
    </item>
  </channel>
</rss>
