Acabei de lançar a V2 do meu projeto 'Quem é esse Pokémon?'
2 minutos de leituraLancei a V2 do jogo 'Quem é esse Pokémon?': por que criei o projeto, as tecnologias usadas (Expo Router, GraphQL, Jotai e Biome) e minhas impressões.
1 de nov. de 2026
Criei o Testinha, um jogo de festa em português no estilo Heads Up: o celular vai na testa, a sala mostra a palavra e a inclinação resolve a vez. Do primeiro commit ao último foram seis dias (24 a 29 de outubro de 2026), 75 commits e muita IA no meio. Neste post eu conto o que usei, o que me surpreendeu e onde ainda precisei fazer o trabalho de desenvolvedora.
Quer testar? O Testinha está na App Store e no Google Play.
Antes de escrever qualquer linha de código, pedi para o Claude Opus olhar a App Store com a busca “heads up”. Ele leu os 11 apps da página de resultados (nove são jogos de charada) e os comentários de cada um. O relatório saiu com cinco reclamações que se repetiam:
Um limite honesto desse método: a loja mostra no máximo cerca de 10 comentários por app, então é uma amostra pequena. Serve para achar padrões, não para provar nada.
O relatório deu origem a uma especificação, também escrita pelo Claude Opus, com a skill tlc-spec-driven. Precisei ajustá-la, porque só com o que a IA escreveu ela não ia funcionar. As decisões ficaram registradas em um arquivo de estado, cada uma com motivo e trade-off. Uma delas, ainda no começo: o app é grátis, não tem anúncio, e a cobrança é compra única de cada tema pago, sem assinatura. Cada reclamação do relatório virou uma regra do produto.
A spec tinha um buraco: não dizia nada sobre como o app deveria parecer.
| Ferramenta | Para quê | Como foi |
|---|---|---|
| Claude Opus (com pesquisa na web) | Relatório dos apps de Heads Up e seus comentários | Rápido e útil, mas com amostra pequena de comentários |
| tlc-spec-driven (skill no Cursor) | Transformar o relatório em spec, design, tarefas e validação | Deu a espinha dorsal: tudo ficou registrado em arquivos do projeto |
| Cursor + Grok 4.7 | Escrever o código a partir da spec | Entregou o que a spec pedia. Nada de extraordinário, nada de ruim |
| Figma | Redesenhar o layout a partir de prints, cores e referências | A parte que mais me impressionou |
| Expo (React Native) + TypeScript | O app em si | Base do projeto, com o mesmo código para iOS e Android |
| expo-iap | Compra única de cada tema pago | Funciona, mas só testa de verdade em build nativo, não no Expo Go |
| Módulo Swift com Apple Intelligence | Gerar palavras para categorias criadas pela pessoa, no próprio aparelho | Um módulo pequeno, com tratamento de aparelho sem suporte |
| Vercel | Catálogo de temas em JSON remoto | Tema, palavra e preço mudam sem versão nova do app |
| EAS Build e EAS Submit | Gerar o build e enviar para a loja | O deploy foi tranquilo |
Sem layout na spec, o Cursor com Grok implementou o que conseguiu, e o resultado funcionava e estava péssimo. Era previsível: quando você não diz como quer, a IA escolhe por você.
Peguei os prints das telas que já estavam implementadas e levei para o Figma, junto com o que eu queria de layout, as cores e algumas referências. No primeiro prompt já veio um resultado muito satisfatório, bem acima do que eu esperava para uma primeira tentativa. A melhoria em layout e nos ajustes de animação foi visível de uma versão para a outra.
O Figma entrou depois, quando já existia algo rodando, e funcionou como um revisor de design. Num próximo app, eu colocaria essa etapa antes da implementação.
Precisou de ajuste? Precisou. O layout bonito não decide o fluxo do jogo nem a ordem das telas. Isso ficou comigo.
O fluxo do jogo. O ponto mais crítico do projeto foi decidir de qual tela se vai para qual, e quais informações aparecem nos modos festa e infinito. No código isso aparece como mais de 15 fases de tela na mesma máquina de estados, e o histórico de commits mostra a briga: uma sequência de mudanças só em rodadas, modo infinito, placar por time, tela de resultado e tutorial, inclusive a remoção de uma etapa inteira que eu tinha aceitado antes.
A spec mostra o mesmo. Ela tem uma tabela de premissas com uma coluna “confirmado?”, e várias linhas ficaram como não confirmadas, porque eram decisões de produto que a IA só podia propor um padrão. Quem confirma é a pessoa que vai jogar o jogo.
O aparelho de verdade. O jogo depende de inclinar o celular, e isso só se valida direito na mão, com gente jogando. Sensibilidade, vibração, tempo da vez e o toque nas bordas da tela são coisas que o teste automatizado não sente.
Depois de pronto, fui ler o que a IA escreveu. Tem coisa boa e tem coisa que eu não manteria.
O que está bom
O que eu não manteria
Pontos que só uma pessoa que conhece loja pegaria. A spec falava só de iPhone, mas o app roda em iOS e Android, e a configuração do Android pedia permissões de gravação de áudio e de serviço em primeiro plano, num app que só toca um som curto. Permissão sensível sem uso é motivo de pergunta na revisão da loja. Um problema no build também me obrigou a bloquear a permissão ACTIVITY_RECOGNITION. A IA não avisou de nenhuma dessas coisas antes.
Se eu recomeçasse hoje, mudaria quatro coisas:
A IA acelerou muito a parte de fazer: pesquisa, spec, código, layout e até um módulo nativo em Swift saíram em dias. Mas decidir o que o produto deve ser, validar no aparelho, enxergar o que a loja vai questionar e deixar o código em um estado que eu consiga manter continuam sendo trabalho de quem sabe desenvolver. Quem não sabe ler o que a IA escreveu fica refém dela.
Se você está construindo com IA, me conta nos comentários: onde ela mais errou no seu caso?
Lancei a V2 do jogo 'Quem é esse Pokémon?': por que criei o projeto, as tecnologias usadas (Expo Router, GraphQL, Jotai e Biome) e minhas impressões.
Minha lista de sites, newsletters e podcasts para devs se manterem atualizados, incluindo InfoQ, dev.to, JavaScript Weekly e Hipsters Ponto Tech.
Passo a passo para programar o desligamento e a reinicialização do RDS na AWS fora do expediente, medida que me rendeu uma economia de $40 por mês.