← Tutte le idee Sport e benessere

CheckForm Gymnastics

L'AI analizza i tuoi esercizi di ginnastica e ti corregge

Incasso mensile: 1200 USD (fonte indicata nella scheda)

Cosa fa

App per ginnaste e ginnasti: si filma un esercizio e l'AI analizza la posizione del corpo e dà consigli per migliorare.

Come guadagna

Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.

Rendilo tuo

  • Per altri sport dove conta la posizione: palestra, yoga, tiro a canestro.
  • Per gli allenatori: confronto tra due tentativi affiancati.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Postura Giusta": permette a ginnaste, ginnasti e ai loro allenatori di filmare un esercizio e vedere angoli e allineamento del corpo, calcolati direttamente nel telefono. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un esempio di analisi e prezzi
2. Registrazione dell'allenatore o del genitore (gli atleti minorenni non hanno un account proprio)
3. Atleti: profili con nome ed età
4. Analisi: registra o carica un video, scegli l'esercizio
5. Risultato con scheletro disegnato sul video, angoli e confronto nel tempo

Stile: sportivo ed elegante: sfondo bianco, viola #6D28D9, magenta #DB2777, carattere "Poppins", scheletro disegnato in verde brillante sul video. Nessuna immagine generica di stock.

Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.

2. Database, account e sicurezza

Collega il progetto a Supabase e attiva la registrazione con email e password.

Crea queste tabelle:
- "atleti": nome, età, livello, collegati all'allenatore o al genitore
- "analisi": esercizio, angoli misurati in JSON, note dell'allenatore, data. Il video NON si salva

Regole di sicurezza obbligatorie:
- ogni allenatore o genitore vede solo i suoi atleti e le loro analisi
- i video restano nel telefono: nel database finiscono solo i numeri
- il piano non si modifica dal browser

Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.

3. Analisi nel telefono

Usa MediaPipe Pose Landmarker (Google) direttamente nel browser: individua 33 punti del corpo in ogni fotogramma del video, senza inviare il video a nessun server. Importante perché gli atleti sono spesso minorenni.

Per l'esercizio scelto (spaccata, ponte, verticale, candela, salto) calcola gli angoli che contano (codice nei Dettagli tecnici): per esempio l'apertura delle gambe nella spaccata o l'allineamento spalle-anche-caviglie nella verticale. Disegna lo scheletro sul video e mostra gli angoli in grande nel fotogramma migliore.

Il risultato è descrittivo ("apertura 165°, obiettivo 180°"), non un giudizio: le correzioni le decide l'allenatore.

4. Progressi e note

Per ogni atleta, grafico dei valori nel tempo per ogni esercizio (es. apertura della spaccata settimana per settimana) e note dell'allenatore per ogni analisi.

Confronto affiancato tra due analisi. Esportazione di un riepilogo in PDF senza immagini dell'atleta, solo con i numeri.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 7,99 € al mese. Gratis l'utente ha: un atleta e 5 analisi al mese. Con il piano Pro sblocca: fino a 30 atleti, analisi illimitate, grafici dei progressi e confronti.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.

6. Controlli specifici di questo progetto

Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Privacy: controlla nella scheda Rete del browser che durante l'analisi il video non venga mai inviato, e che nel database ci siano solo numeri.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Angoli del corpo dai punti di MediaPipe

MediaPipe restituisce le coordinate dei punti del corpo; questa funzione calcola l'angolo in un'articolazione, ad esempio l'apertura delle gambe.

import { FilesetResolver, PoseLandmarker } from "@mediapipe/tasks-vision";

type Punto = { x: number; y: number };

// Angolo in B formato dai segmenti B→A e B→C, in gradi
export function angolo(a: Punto, b: Punto, c: Punto): number {
  const r = Math.atan2(c.y - b.y, c.x - b.x) - Math.atan2(a.y - b.y, a.x - b.x);
  let gradi = Math.abs((r * 180) / Math.PI);
  if (gradi > 180) gradi = 360 - gradi;
  return Math.round(gradi);
}

// Numeri dei punti di MediaPipe Pose
const P = { anca_sx: 23, anca_dx: 24, ginocchio_sx: 25, ginocchio_dx: 26, caviglia_sx: 27, caviglia_dx: 28 };

export async function preparaAnalisi() {
  const visione = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.14/wasm",
  );
  return PoseLandmarker.createFromOptions(visione, {
    baseOptions: { modelAssetPath: "/modelli/pose_landmarker_full.task" },
    runningMode: "VIDEO",
  });
}

// Apertura della spaccata: angolo tra le due gambe, al centro delle anche
export function aperturaSpaccata(punti: Punto[]): number {
  const centro = {
    x: (punti[P.anca_sx].x + punti[P.anca_dx].x) / 2,
    y: (punti[P.anca_sx].y + punti[P.anca_dx].y) / 2,
  };
  return angolo(punti[P.caviglia_sx], centro, punti[P.caviglia_dx]);
}

Atleti e analisi (solo numeri)

Gli atleti dell'allenatore e le analisi: si salvano solo gli angoli, mai il video.

create table atleti (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,  -- allenatore o genitore
  nome text not null,
  eta int not null check (eta between 4 and 80),
  livello text
);

create table analisi (
  id uuid primary key default gen_random_uuid(),
  atleta_id uuid not null references atleti(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  esercizio text not null,
  angoli jsonb not null,           -- es. { "apertura": 165, "busto": 82 }
  note text not null default '',
  fatta_il timestamptz not null default now()
);

alter table atleti enable row level security;
create policy "le mie righe" on atleti
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

alter table analisi enable row level security;
create policy "le mie righe" on analisi
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
MediaPipe
Una libreria gratuita di Google che riconosce la posizione del corpo in un video, direttamente nel telefono.