Pular para conteúdo

teupadel.com

Análise de movimento de padel assistida por IA: o usuário sobe um vídeo de uma jogada, a aplicação extrai a pose do jogador frame a frame e devolve um relatório de feedback gerado por LLM — pontos positivos, pontos a melhorar e sugestões por movimento.

Componentes

Repo Papel Stack
ui.ia.teupadel.com Frontend público, institucional + ferramenta Next.js 15 (App Router, SSR), next-intl (en/pt-pt/pt-br)
api.ia.teupadel.com Orquestração: recebe vídeo, chama o processador de pose, chama o LLM, monta o relatório FastAPI
api.ia.pose-estimation Extração de pose por frame ONNX Runtime + modelo YOLOv8n-pose
gitops.teupadel.com Deploy dos dois componentes web (api + ui) Helm (chart genérico) + ArgoCD

Fluxo de dados

sequenceDiagram
    participant U as Usuário
    participant UI as ui.ia.teupadel.com<br/>(Next.js SSR)
    participant API as api.ia.teupadel.com<br/>(FastAPI)
    participant Pose as api.ia.pose-estimation<br/>(YOLOv8n-pose/ONNX)
    participant LLM as Claude (Anthropic API)

    U->>UI: upload de vídeo
    UI->>API: POST /analyse (proxy server-side)
    API->>Pose: POST /analyse (vídeo + fps)
    Pose-->>API: landmarks por frame (17 pontos) + GIF anotado
    API->>LLM: frames com pose detectada + prompt (idioma do usuário)
    LLM-->>API: relatório estruturado
    API-->>UI: JSON (metadata + report + gif)
    UI-->>U: relatório renderizado

A UI nunca fala diretamente com o processador de pose nem com a Anthropic API — tudo passa por api.ia.teupadel.com, que é o único componente com acesso à chave da Anthropic API.

Landmarks extraídos

O processador de pose devolve 17 pontos por frame (nose, ombros, cotovelos, pulsos, quadris, joelhos, tornozelos, olhos, orelhas), cada um com posição normalizada (x, y) e confiança (visibility). Só frames com pose detectada são enviados ao LLM, para manter o payload pequeno.

Internacionalização

A UI serve três locales com prefixo de URL (/en, /pt-pt, /pt-br), cada um com página institucional e página de ferramenta (/analysis). O parâmetro lang é repassado até api.ia.teupadel.com, que o usa para gerar o relatório no idioma correto — as chaves do JSON de resposta não mudam, só o conteúdo textual dentro delas.

Rede

Domínio próprio (teupadel.com), servido pela Gateway dedicada nginx-gateway-teupadel-com:

Hostname Componente
www.teupadel.com ui.ia.teupadel.com
api.teupadel.com api.ia.teupadel.com

Ver Rede & Ingress para o padrão de hostname dedicado (sem reescrita de path).

Segredos

api.ia.teupadel.com consome a chave da Anthropic API via ExternalSecret, a partir do SSM Parameter Store — ver Secrets & Segurança.

Namespace e registry

Ambos os componentes web rodam no namespace teupadel, com imagens publicadas no ECR (<conta>.dkr.ecr.us-east-1.amazonaws.com/teupadel/api e .../teupadel/ui) pelo pipeline descrito em Build & Registry.