DEV Community

Egon Portolani
Egon Portolani

Posted on

Como Construí um Jogo de Corrida Cyberpunk com Gemini Live AI — e o que aprendi no caminho

"This post was created for the purposes of entering the Gemini Live Agent Challenge 2026."

Como Construí um Jogo de Corrida Cyberpunk com Gemini Live AI — e o que aprendi no caminho

#GeminiLiveAgentChallenge #GoogleCloud #Flutter #GeminiAPI


Imagine estar correndo às 6h da manhã pelas ruas de Matão, SP, com um coach de IA no seu ouvido dizendo: "Operador, você está a 200 metros de perder o Setor Industrial para um rival. Acelere ou perca o território."

Isso é o First Runner.

É um jogo de fitness cyberpunk onde você conquista territórios reais da sua cidade correndo, caminhando ou pedalando — guiado por um coach de IA ao vivo, o Oráculo, alimentado pelo Gemini 2.5 Flash Native Audio.

Neste post vou contar como construímos isso, os desafios técnicos que quase nos quebraram, e o que aprendemos sobre construir agentes de IA verdadeiramente ao vivo.


A ideia: transformar a cidade num tabuleiro vivo

Apps de fitness tradicionais são chatos. Eles registram sua corrida, mostram um gráfico e... é isso. A motivação desaparece em semanas.

A nossa hipótese foi simples: e se cada rua da cidade fosse um território para conquistar?

Cada quarteirão mapeado pode ser "seu". Você corre o circuito, o app registra via GPS, e aquele território fica pintado com sua cor no mapa de todos os jogadores da região. Se um rival bater seu tempo, ele toma o território. Você perde. Precisa voltar e treinar.

A mecânica do First Run — ser o primeiro a mapear um circuito — cria uma corrida pela cidade que nunca existiu antes.

Mas o diferencial real é o Oráculo.


O Oráculo: um agente que corre com você

O Oráculo não é um chatbot. Ele é um agente de IA que:

  • Ouve você enquanto você corre, sem precisar apertar nada
  • Interrompe e é interrompido — barge-in real, não turn-based
  • Conhece sua localização GPS em tempo real — pace, distância, territórios próximos
  • Sabe o estado do jogo — quais territórios seus estão ameaçados, quais rivais estão ativos
  • Responde em menos de 1 segundo — graças ao Gemini 2.5 Flash Native Audio

Quando você está subindo uma ladeira pesada e fala "Oráculo, quanto falta?", ele já sabe sua localização, calcula a distância do próximo checkpoint e responde enquanto você ainda está ofegante. Sem delay. Sem robótico.

Isso mudou tudo sobre como pensamos na interação homem-IA durante atividade física.


A arquitetura: onde as coisas ficaram interessantes (e difíceis)

Flutter App
    │
    ├── PCM Audio (16kHz, raw) ──────────────────────────┐
    │                                                     ▼
    ├── GPS Telemetry (JSON) ──────────► Node.js/Express  ──► Gemini 2.5 Flash
    │                                    (Cloud Run)          Native Audio API
    └── Firestore SDK ◄──────────────── Firebase ◄────────────────────────────
         (territories,                  Firestore
          rankings, clans)
Enter fullscreen mode Exit fullscreen mode

O pipeline de áudio

O Flutter captura áudio bruto em PCM 16kHz direto do microfone e transmite via WebSocket para o nosso servidor Node.js rodando no Google Cloud Run. Esse servidor orquestra uma sessão bidirecional contínua com o Gemini Live API.

Por que PCM bruto? Porque qualquer encoding adicional introduz latência. Quando você está correndo e fala algo, você espera resposta imediata — não 800ms depois.

O problema do barge-in

Esse foi o desafio mais difícil do projeto inteiro.

Barge-in significa: você pode interromper o Oráculo no meio de uma frase. Ele para de falar, ouve você, responde. Assim como uma conversa humana real.

O problema é que no Android, quando o app está reproduzindo áudio (o Oráculo falando), o microfone continua gravando — e ele grava o próprio áudio do app. O resultado? Um loop de feedback onde o Oráculo ouve a si mesmo e fica preso num ciclo.

A solução envolveu três camadas:

  1. AudioContextAndroid com gainTransientMayDuck — reduz o volume do speaker quando o microfone está ativo
  2. Gerenciamento preciso do audio focus no Android para detectar quando o usuário está falando
  3. Lógica de reconexão WebSocket com buffer de PCM para não perder chunks de áudio durante a transição

Semanas para resolver. Mas quando funcionou, a sensação foi de ter um parceiro de corrida real no ouvido.

Injeção de telemetria em tempo real

O segundo grande desafio foi fazer o Oráculo realmente saber onde você está — não de forma genérica ("você está correndo bem!"), mas com contexto tático real.

A cada 5 segundos, o app injeta silenciosamente um JSON no contexto do Gemini:

{
  "pace": "5:32 min/km",
  "distance": "2.3km",
  "location": "Setor Industrial, Matão SP",
  "nearby_territories": [
    { "name": "HQ_MATÃO", "owner": "você", "threat": "nenhuma" },
    { "name": "CENTRO_MATÃO", "owner": "rival_07", "threat": "alta" }
  ],
  "heart_rate_estimate": "elevated"
}
Enter fullscreen mode Exit fullscreen mode

Esse JSON não quebra a conversa de voz — ele vai como parte do contexto de sistema enquanto o stream de áudio continua. O resultado é que o Oráculo diz coisas como: "O Centro está vermelho. Rival 07 está a 400 metros de você. Se você virar à direita agora, passa pelo território dele antes que ele consolide."

Não é motivação genérica. É tática real baseada em dados reais.


Os três tracks do Gemini Live Agent Challenge

Quando soubemos do challenge, percebemos que o First Runner tinha encaixe natural nos três tracks:

Track 1 — Live Agent: O Oráculo é o agente. Conversa contínua, barge-in, contexto de GPS em tempo real. É literalmente um agente ao vivo correndo com você.

Track 2 — Creative Storyteller: Após cada corrida, o Oráculo narra seu "Mission Debrief" — misturando texto épico com seus stats reais e snapshots do mapa num único output stream multimodal. "Operador Mark V. — você conquistou 3 territórios hoje. O Parque Central foi reclamado às 06:47. Dois rivais tentaram interceptar. Falham."

Track 3 — Interface Navigator: O Oráculo recebe screenshots do mapa tático e interpreta zonas vermelhas (territórios ameaçados), alertando o corredor sobre mudanças visuais no HUD em tempo real. Ele literalmente "vê" o mapa e age.


O que aprendemos

1. Native Audio muda tudo.

Usar o Gemini Native Audio ao invés de TTS tradicional foi a decisão mais impactante. O resultado não soa como um assistente de voz — soa como uma entidade que existe. A diferença perceptual é enorme para uma atividade física onde você está em estado de flow.

2. Latência é experiência.

Em um jogo de fitness, 2 segundos de delay é uma eternidade. Você já passou pela esquina, perdeu o contexto, quebrou o ritmo. O Cloud Run com WebSocket persistente foi essencial — sem cold starts, sem overhead de autenticação por request.

3. Contexto > Inteligência.

O Oráculo não é mais "inteligente" do que qualquer outro modelo de linguagem. O que o torna diferente é a qualidade do contexto que injetamos. GPS real + estado do jogo real + histórico da corrida real = respostas que parecem mágica mas são só dados bem estruturados.

4. O áudio pipeline é o produto.

A parte "difícil" do First Runner não foi a IA. Foi o pipeline de áudio. PCM buffer management, barge-in sem feedback loop, reconexão resiliente durante corridas em áreas com sinal intermitente. Se o áudio falha, o produto falha. Construa isso primeiro.


O modelo de negócio: B2B de tráfego físico

Uma descoberta inesperada durante o desenvolvimento: as corridas criam tráfego físico previsível e recorrente.

Isso abre um modelo B2B: academias, farmácias, cafeterias e varejistas podem se tornar pit stops oficiais no mapa do First Runner. O Oráculo guia o corredor até esses estabelecimentos com missões contextuais. "Operador, há um kit de hidratação disponível na Farmácia Central a 300 metros. Complete a missão de reabastecimento."

O Google Maps já está explorando esse espaço com o Ask Maps — vemos o First Runner como a camada de gamificação e IA de voz em cima da infraestrutura de localização que o Google está construindo.


Stack completa

Componente Tecnologia
Mobile frontend Flutter (Dart)
Audio streaming WebSocket — PCM raw 16kHz
Backend Node.js / Express no Google Cloud Run
AI core Gemini 2.5 Flash Native Audio via Google GenAI SDK
Database Firebase Firestore (sync em tempo real)
Auth Firebase Authentication
Maps flutter_map + OpenStreetMap / Nominatim
Web3 WalletConnect / web3dart

Links


Construído por Egon Henrique Portolani para o Gemini Live Agent Challenge 2026.
#GeminiLiveAgentChallenge #GoogleCloud #GeminiAPI #Flutter #Firebase

Top comments (0)