openGym
Il diario degli allenamenti in palestra e a corpo libero, open source
Cosa fa
App per tracciare gli allenamenti in palestra e a corpo libero, disponibile su iPhone, Apple Watch e Android, con piani e progressi.
Come guadagna
Progetto open source su GitHub con oltre 15.000 stelle, che non dichiara incassi. Ha licenza AGPL: puoi partire dal suo codice, ma se offri la tua versione online devi pubblicare anche il tuo codice modificato. Idee nostre per guadagnare: versione premium con piani dei coach, collaborazione con palestre e personal trainer.
Rendilo tuo
- Per le palestre italiane: schede del personal trainer inviate direttamente nell'app del cliente.
- Allenamenti a corpo libero per chi si allena al parco.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Serie e Ripetizioni": un diario di allenamento semplice e veloce per la palestra e il corpo libero: schede, serie, ripetizioni e carichi, recupero tra le serie, e grafici dei progressi con il massimale stimato. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con le funzioni e il prezzo
2. Le mie schede: esercizi, serie e ripetizioni previste
3. Allenamento in corso: esercizio per esercizio, serie da spuntare, timer di recupero
4. Storico degli allenamenti
5. Progressi per esercizio con grafici
Stile: sportivo e leggibile in palestra: sfondo nero #0A0A0A, verde lime #84CC16 per le serie completate, bianco, carattere "Inter" con numeri grandi, pulsanti grandi. 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:
- "esercizi": nome, gruppo muscolare, tipo (pesi, corpo libero, tempo)
- "schede": nome, esercizi in ordine con serie e ripetizioni previste
- "serie": allenamento, esercizio, carico, ripetizioni, fatica percepita, data
Regole di sicurezza obbligatorie:
- ogni utente vede solo le sue schede e i suoi allenamenti
- 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. Registrare le serie in fretta
Durante l'allenamento ogni esercizio mostra le serie previste con carico e ripetizioni della volta precedente già compilati: basta un tocco per confermare o i pulsanti +/− per cambiare. Dopo ogni serie parte il timer di recupero (vibrazione alla fine).
Funziona offline: le serie si salvano nel telefono e si sincronizzano dopo.
Il sito suggerisce la progressione: se nell'ultimo allenamento tutte le serie sono state completate con le ripetizioni previste, propone +2,5 kg (o +1 ripetizione per il corpo libero).
4. Progressi e massimale stimato
Per ogni esercizio: grafico del carico massimo, del volume (carico × ripetizioni) e del massimale stimato con la formula di Epley (codice nei Dettagli tecnici), senza bisogno di provare carichi pericolosi.
Record personali evidenziati, calendario degli allenamenti, ed esportazione in CSV. Avviso: "Prima di iniziare un programma di allenamento, consulta un medico se hai problemi di salute".
5. Pagamenti con Stripe
Aggiungi un abbonamento a 2,99 € al mese o 24 € all'anno. Gratis l'utente ha: 2 schede e storico di 30 giorni. Con il piano Pro sblocca: schede illimitate, storico completo, grafici, suggerimenti di progressione ed esportazione.
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. Offline: registra un allenamento intero in modalità aereo, poi riattiva la rete: tutte le serie devono arrivare una sola volta.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Massimale stimato e record personali
Il massimale stimato (1RM) con la formula di Epley: carico × (1 + ripetizioni/30). La query trova il migliore per esercizio e per settimana.
create table serie (
id uuid primary key, -- creato nel telefono (funziona offline)
utente_id uuid not null references auth.users(id) on delete cascade,
esercizio_id int not null,
allenamento_id uuid not null,
carico_kg numeric(5, 1) not null default 0,
ripetizioni int not null check (ripetizioni between 1 and 100),
fatta_il timestamptz not null default now()
);
alter table serie enable row level security;
create policy "le mie righe" on serie
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
-- Massimale stimato migliore per settimana di un esercizio (formula di Epley)
select date_trunc('week', fatta_il)::date as settimana,
round(max(carico_kg * (1 + ripetizioni / 30.0)), 1) as massimale_stimato,
sum(carico_kg * ripetizioni) as volume
from serie
where utente_id = auth.uid() and esercizio_id = 12 and ripetizioni <= 12 -- oltre 12 la stima è poco affidabile
group by 1
order by 1;Suggerire la progressione
Se nell'ultimo allenamento tutte le serie hanno raggiunto le ripetizioni previste, propone di aumentare il carico; altrimenti di ripetere.
type Serie = { carico: number; ripetizioni: number };
export function prossimoCarico(ultime: Serie[], ripetizioniPreviste: number, corpoLibero = false) {
if (!ultime.length) return null;
const tutteRiuscite = ultime.every((s) => s.ripetizioni >= ripetizioniPreviste);
const carico = Math.max(...ultime.map((s) => s.carico));
if (!tutteRiuscite) return { carico, ripetizioni: ripetizioniPreviste, nota: "Ripeti: completa tutte le serie" };
return corpoLibero
? { carico, ripetizioni: ripetizioniPreviste + 1, nota: "Ottimo! Una ripetizione in più" }
: { carico: carico + 2.5, ripetizioni: ripetizioniPreviste, nota: "Ottimo! +2,5 kg" };
}
Pezzi comuni a tutti i progetti
Glossario
- CSV
- Un file di testo con i dati separati da virgole, che si apre con Excel.
- Massimale (1RM)
- Il carico più alto che si riesce a sollevare una sola volta: si può stimare senza provarlo.
- Volume
- Il lavoro totale di un allenamento: carico per ripetizioni, sommato su tutte le serie.