Skip to content

teupadel.com

AI-assisted padel movement analysis: the user uploads a video of a play, the application extracts the player's pose frame by frame, and returns an LLM-generated feedback report — strengths, points to improve, and suggestions per movement.

Components

Repo Role Stack
ui.ia.teupadel.com Public frontend, marketing pages + the tool itself Next.js 15 (App Router, SSR), next-intl (en/pt-pt/pt-br)
api.ia.teupadel.com Orchestration: receives the video, calls the pose processor, calls the LLM, assembles the report FastAPI
api.ia.pose-estimation Per-frame pose extraction ONNX Runtime + YOLOv8n-pose model
gitops.teupadel.com Deploys the two web components (api + ui) Helm (generic chart) + ArgoCD

Data flow

sequenceDiagram
    participant U as User
    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: uploads video
    UI->>API: POST /analyse (server-side proxy)
    API->>Pose: POST /analyse (video + fps)
    Pose-->>API: per-frame landmarks (17 points) + annotated GIF
    API->>LLM: frames with detected pose + prompt (user's language)
    LLM-->>API: structured report
    API-->>UI: JSON (metadata + report + gif)
    UI-->>U: rendered report

The UI never talks directly to the pose processor or to the Anthropic API — everything goes through api.ia.teupadel.com, the only component with access to the Anthropic API key.

Landmarks extracted

The pose processor returns 17 points per frame (nose, shoulders, elbows, wrists, hips, knees, ankles, eyes, ears), each with normalized position (x, y) and confidence (visibility). Only frames with a detected pose are sent to the LLM, to keep the payload small.

Internationalization

The UI serves three locales with a URL prefix (/en, /pt-pt, /pt-br), each with a marketing page and a tool page (/analysis). The lang parameter is passed all the way to api.ia.teupadel.com, which uses it to generate the report in the right language — the response JSON's keys don't change, only the textual content inside them.

Networking

Its own domain (teupadel.com), served by the dedicated nginx-gateway-teupadel-com Gateway:

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

See Networking & Ingress for the dedicated hostname pattern (no path rewriting).

Secrets

api.ia.teupadel.com consumes the Anthropic API key via ExternalSecret, from SSM Parameter Store — see Secrets & Security.

Namespace and registry

Both web components run in the teupadel namespace, with images published to ECR (<account>.dkr.ecr.us-east-1.amazonaws.com/teupadel/api and .../teupadel/ui) by the pipeline described in Build & Registry.