Executando verificação de segurança...
6

Como fiquei em 15º lugar no Gemini Hackathon sozinho, arquitetura, erros e o que aprendi

tl;dr: Participei solo do Gemini Hackathon do Google (35.662 participantes, $100k em prêmios), construí um assistente adaptativo para estudantes neurodivergentes usando a API do Gemini 3 de forma multimodal, e terminei com uma ótima colocação. Vou detalhar aqui a arquitetura, os problemas reais que enfrentei e o que faria diferente.

O contexto
Sou estudante de Desenvolvimento de Sistemas Bilíngue no Senac, trabalho como desenvolvedor full stack e também faço game dev nas horas vagas. Tenho um projeto chamado AxionFlow no GitHub, um assistente que transforma LLMs em agentes de código disciplinados, então trabalhar com APIs de modelos de linguagem não era território novo pra mim.
Quando o Gemini 3 Hackathon abriu inscrições, fiz questão de entrar com um projeto do zero (as regras exigiam isso) e sozinho, porque queria testar meu próprio limite sem depender de equipe.

O Projeto: NeuroPace
Problema: Sistemas de ensino digitais são construídos para o "aluno médio". Estudantes com TDAH, dislexia ou alta ansiedade de performance têm pouquíssimas ferramentas adaptadas a como eles processam informação.
Solução: Um assistente de estudos que usa as capacidades multimodais do Gemini 3 para:

Análise de anotações manuscritas via visão computacional + Gemini Vision
Processamento de entradas de voz com detecção de padrões de sobrecarga cognitiva
Construção de grafo de conhecimento pessoal a partir do histórico de interações
Adaptação dinâmica de complexidade, o modelo detecta sinais de frustração ou confusão e reformula a explicação automaticamente

Arquitetura
[Frontend HTML/CSS/JS]

[FastAPI Backend - Python]

[Fila de Requisições (asyncio + semaphore)]

[Pré-processamento de imagem - OpenCV]

[Gemini 3 API - multimodal]

[Grafo de Conhecimento - JSON in-session]

Optei por não usar banco de dados externo. Toda a sessão é mantida em memória e serializada em JSON ao final. Isso mantém a demo funcionando sem infraestrutura extra, decisão importante para um hackathon onde o juiz precisa testar o produto sem login ou paywall.

Os problemas reais que tive que lidar

  1. Rate limit assíncrono
    Minha primeira implementação disparava chamadas paralelas ao Gemini para cada bloco de texto+imagem extraído de uma anotação. Em dev, funcionava. Em produção com uma anotação de 3 páginas, explodia com 429 Too Many Requests.
    A solução foi um semáforo assíncrono com retry exponencial:
pythonimport asyncio

semaphore = asyncio.Semaphore(3)  # máximo 3 calls simultâneas

async def call_gemini_with_backoff(prompt, retries=5):
    async with semaphore:
        for attempt in range(retries):
            try:
                return await gemini_client.generate_async(prompt)
            except RateLimitError:
                await asyncio.sleep(2 ** attempt)
        raise Exception("Max retries exceeded")
Simples, mas levei 2 dias pra chegar nisso porque fui otimizar na direção errada primeiro.
2. Qualidade de imagem de cadernos reais
Fotos de anotações manuscritas têm problemas sérios: sombra de dedo, ângulo de câmera, papel amassado, tinta desbotada. O Gemini 3 é bom em visão, mas não milagroso com inputs ruins.
Adicionei um pré-processamento com OpenCV:
pythonimport cv2
import numpy as np

def preprocess_notebook_image(image_bytes):
    img = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # Adaptive threshold para lidar com iluminação irregular
    processed = cv2.adaptiveThreshold(
        gray, 255,
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
        cv2.THRESH_BINARY, 11, 2
    )
    return cv2.imencode('.png', processed)[1].tobytes()
A taxa de extração de texto subiu de ~65% para ~91% em testes com imagens reais.
3. O sistema de detecção de sobrecarga cognitiva
Essa foi a feature mais difícil de acertar. A ideia era detectar quando o aluno estava confuso ou sobrecarregado através de padrões linguísticos, frases curtas demais, repetição de termos, perguntas do tipo "não entendi nada" ou "pode explicar de novo".
Criei um sistema de score de clareza que alimentava o prompt do Gemini:
pythonOVERLOAD_INDICATORS = [
    "não entendi", "tá confuso", "não faz sentido",
    "pode repetir", "???", "hein", "o que é isso"
]

def compute_confusion_score(message: str) -> float:
    score = 0.0
    msg_lower = message.lower()
    for indicator in OVERLOAD_INDICATORS:
        if indicator in msg_lower:
            score += 0.25
    # Frases muito curtas também são sinal
    if len(message.split()) < 4:
        score += 0.15
    return min(score, 1.0)

Dependendo do score, o system prompt do Gemini era ajustado para usar analogias mais simples, quebrar o conteúdo em passos menores ou sugerir uma pausa.

O que os juízes avaliaram (e onde acho que pontuei)
Os critérios eram:

Execução Técnica (40%), código funcional, uso real do Gemini 3
Impacto Potencial (20%), problema real, mercado relevante
Inovação/Wow Factor (30%), originalidade
Apresentação/Demo (10%), vídeo de 3 minutos

Acredito que pontuei bem em Execução e Impacto, e que perdi alguns pontos em Inovação, a ideia de "assistente adaptativo" não é 100% nova. O Wow Factor veio principalmente da combinação multimodal funcionando ao vivo na demo.
O vídeo foi meu ponto fraco. Gravei 12 versões. Se eu entrasse de novo, investiria muito mais tempo nisso.

O que faria diferente

Começar pelo vídeo de demo, não pelo código. O pitch define o que você vai construir, não o contrário.
Documentação + diagrama de arquitetura desde o dia 1. Deixar pra última hora foi péssimo.
Testar com usuários reais mais cedo. Eu testei sozinho até a reta final, feedback externo teria acelerado muito as decisões de produto.

Conclusão
15º lugar entre 35.662 participantes, solo, como estudante. Não é o Grand Prize, mas é validação suficiente de que o approach funcionou.

Se você está pensando em participar do próximo hackathon da Google ou de qualquer outra mas está com medo: a barreira de entrada é menor do que parece. O que diferencia um projeto bom de um projeto mediano não é o tamanho da equipe, é a clareza do problema que você escolheu resolver.

Carregando publicação patrocinada...