# Stato implementazione — 28 luglio 2026

Questo documento riepiloga le modifiche applicate dopo `0.1.0-rc.1`, lo stato verificato del codice e le attività ancora aperte.

## Verifica

- Suite completa: **154 test superati, 975 asserzioni**.
- Route applicative: **211** (`46` atleta, `133` coach, `32` condivise).
- Migration: **66**.
- Build frontend: `npm run build` superata con Vite `8.1.5`.
- Controllo patch: `git diff --check` superato.

## Documentazione

- Tutti i file Markdown di progetto sono raccolti in `docs/`.
- `docs/README.md` è l’indice operativo.
- Questo documento è la fonte sintetica per le modifiche successive alla release candidate.

## Libreria esercizi

### Completato

- Import idempotente tramite `php artisan francoach:import-exercises-dataset`.
- Nomi e istruzioni in italiano orientati al nome comunemente usato per l’esercizio, non a una traduzione letterale.
- Import di copertine e GIF animate in `execution-gifs`, con riferimento esterno univoco.
- Normalizzazione dei valori di difficoltà importati.
- Rimossi dalla lista coach i filtri per difficoltà e disponibilità video.
- Aggiunto filtro per gruppo muscolare, valido per gruppi primari e secondari.
- Nel dettaglio esercizio:
  - GIF di esecuzione mostrata prima della copertina;
  - copertina a larghezza piena quando la GIF non esiste;
  - player video visibile solo quando esiste un video;
  - rimossa l’attribuzione testuale Gym Visual.

## Schede e calendario

### Completato

- La scheda è un modello settimanale con durata espressa in settimane.
- Il coach definisce gli allenamenti sui giorni della settimana.
- Il calendario replica gli stessi allenamenti per tutte le settimane della durata assegnata.
- Rimossa l’unicità che impediva di ripetere lo stesso giorno del piano in settimane diverse.
- Editor e validazione distinguono durata del piano e frequenza settimanale.
- Terminologia uniforme: `REPS` al posto di “Ripetizioni”.
- Nelle schede completate non viene mostrata la colonna recupero.

## Esecuzione allenamento

### Completato

- Avvio e termine della sessione registrano data e ora nel database.
- L’orario iniziale non viene mostrato nell’interfaccia di esecuzione.
- Navigazione tra esercizi con frecce precedente/successivo e indicatore di posizione.
- Timer recupero fisso durante lo scorrimento.
- Avviso sonoro negli ultimi 5 secondi.
- Persistenza locale del timer e sincronizzazione con il server.
- Serie editabili con carico, REPS, nota, RIR e RPE.
- RIR e RPE sono nascosti in un pannello espandibile.
- Aggiunta di serie manuali e cancellazione consentita solo per le serie manuali.
- Salvataggio automatico:
  - debounce dopo `500 ms` durante la digitazione;
  - salvataggio immediato all’evento `change`;
  - chiavi idempotenti per evitare duplicazioni;
  - nessun pulsante “Completa” per atleta o coach.
- Correzioni del coach salvate automaticamente e registrate nell’audit log.
- Dropset con più segmenti REPS/carico per la stessa serie.
- Volume dropset calcolato sommando tutti i segmenti.
- Foto e video privati associati allo specifico esercizio della specifica sessione.
- Nel dettaglio esercizio:
  - GIF o copertina;
  - player interno per video esterno quando disponibile;
  - prescrizione con serie/REPS, recupero e RIR configurato;
  - ultime tre giornate dello storico carichi;
  - note dell’esercizio.
- Resoconto con durata totale e tempo effettivo, al netto del recupero.

## Dashboard atleta

### Completato

- Stato allenamenti completati sul totale del piano.
- Card dell’allenamento odierno o del successivo quando quello odierno è completato.
- Riepilogo alimentare temporale:
  - prima delle 10: tutti i pasti;
  - dopo le 10: senza colazione;
  - dopo le 14: senza pranzo;
  - dopo le 18: senza merenda;
  - dalle 22: piano del giorno successivo.
- Ultime notifiche.
- Barra inferiore: Home, Workout, Nutrizione, Metriche, Storico pesi.
- Barra superiore: logo, notifiche e impostazioni.
- Pagina workout con separazione TODO/DONE.
- Pagina nutrizione con accessi a Piani alimentari, Integrazione e Lista della spesa.

## Dashboard coach

### Completato

- Senza atleta selezionato:
  - statistiche generali sempre visibili;
  - lista degli atleti seguiti;
  - allenamenti e alimentazione in formato completati/totali;
  - trend carichi con freccia verde/rossa;
  - trend peso con percentuale, peso attuale e precedente;
  - scadenza abbonamento;
  - dettagli secondari tramite tooltip;
  - segnalazione della scheda in scadenza a larghezza piena.
- Con atleta selezionato:
  - il riepilogo generale multi-atleta viene nascosto;
  - azioni Email, WhatsApp, Chiama e Profilo;
  - ogni card contiene un collegamento alla relativa sezione;
  - dati di allenamento, aderenza, peso, attività, messaggi e notifiche contestualizzati.

## Profilo atleta visto dal coach

### Completato

- Scheda anagrafica completa con:
  - dati personali e recapiti;
  - indirizzo;
  - profilo sportivo;
  - disponibilità;
  - obiettivi;
  - attrezzatura;
  - limitazioni;
  - note.
- Azioni di contatto:
  - `mailto:`;
  - WhatsApp con numero normalizzato;
  - chiamata tramite `tel:`.
- Dati privati e operativi protetti dalle policy coach/atleta.

## Nutrizione

### Completato

- Card pasti e macro allineate al tema scuro.
- Ridotti padding laterali e ingombro del grafico macro.
- Alternative alimentari aggiungibili alla lista della spesa.
- Catalogo alimenti riutilizzabile per coach con conteggio utilizzi.
- Associazione opzionale di pietanze e alternative al catalogo.
- Assegnazione del piano consentita solo dopo una selezione esplicita dell’atleta nella topbar.
- Storico delle assegnazioni filtrato sull’atleta selezionato.
- Dettaglio completo con riepilogo, medie macro, assegnazioni e giornate espandibili comprensive di pasti, pietanze e alternative.
- Modifica diretta del piano esistente senza duplicazione o creazione automatica di una nuova versione.

## Notifiche

### Completato

- Polling globale del centro notifiche ogni **60 secondi** mentre l’app è aperta.
- Aggiornamento badge, pannello e notifiche browser opzionali.
- Endpoint di polling autenticato e separato per utente.
- Promemoria pianificati e idempotenti via scheduler.

### Limite noto

- Non è presente un servizio push remoto: a browser/app chiusi il polling non viene eseguito.

## Interfaccia

### Completato

- Tema scuro uniforme basato su superfici antracite e accento lime.
- Corretta evidenziazione della voce attiva nella sidebar.
- Icone sidebar più grandi.
- Padding laterale dei pulsanti aumentato.
- Contrasto corretto per pulsanti scuri, azioni nelle tabelle e outline secondari.
- Rimossi sfondi bianchi da:
  - header/footer delle card;
  - editor dei giorni;
  - timer e serie sessione;
  - elementi pasti e macro;
  - moduli inline del profilo;
  - selettore giorni;
  - identità profilo.
- Migliorato il contrasto del selettore attrezzatura.
- Card statistiche riallineate con valore e dettaglio sotto l’icona.

## Dati dimostrativi

### Completato

- Comando `php artisan francoach:demo create`.
- Comando `php artisan francoach:demo clear`.
- Record demo marcati con `is_demo`.
- La pulizia rimuove solo dati demo e preserva i dati reali.

## Attività ancora aperte

### Applicazione

- Messaggistica coach/atleta: schema e model esistono, ma mancano controller, route e interfaccia completa.
- Pannello amministrativo: cartella predisposta, nessuna funzione implementata.
- Push remoto in background: non implementato.
- Pagamenti e rinnovi automatici: fuori dal perimetro attuale.

### Collaudo e rilascio

- Collaudo manuale su hosting Apache reale.
- Verifica SMTP, cron, storage, permessi e HTTPS in produzione.
- Test manuale Chrome, Safari e Firefox su mobile, tablet e desktop.
- Verifica reale dei provider video e dei codec caricati dagli utenti.
- Test di ripristino backup in ambiente isolato.
- Revisione professionale di privacy, termini e consensi.
- Risoluzione o esclusione formale della messaggistica prima della promozione in produzione.
