Skip to content

dockerizable flask web page with QoL features to calculate your classeviva average even if your school has disabled it.

License

Notifications You must be signed in to change notification settings

gablilli/chemediaho

Repository files navigation

che media ho?

una semplice web app flask self-hostabile via docker per visualizzare la media dei voti di classeviva anche se l'istituto ha disattivato la funzione ufficiale. sysregister ui-based.

✨ funzionalità

  • 📱 PWA (progressive web app) - installabile su dispositivi mobili
  • 🔄 supporto offline - funziona anche senza connessione (con i dati scaricati precedentemente)
  • 🎨 design responsive - ottimizzato per mobile e desktop
  • 📊 calcolo media - visualizza automaticamente la media dei voti
  • 🎯 calcoli & previsioni - calcola quali voti ti servono per raggiungere un obiettivo e prevedi l'impatto di voti futuri sulla tua media
  • 📈 grafici interattivi - visualizza i tuoi progressi nel tempo
  • 💾 esportazione dati - esporta i tuoi voti in formato CSV
  • 🆓 codice 100% free and opensource con controllo codeql - così puoi stare tranquillo.

installazione

prerequisiti

  • python 3.6 o superiore
  • un account classeviva attivo

1️⃣ clona il repository

git clone https://github.com/gablilli/chemediaho.git
cd chemediaho

2️⃣ installa le dipendenze

pip install -r requirements.txt

3️⃣ avvia l’app

esegui lo script principale dentro la cartella:

python app.py

poi apri il browser su http://localhost:5000, inserisci le tue credenziali di classeviva e… buona media! 🧮

installazione con docker

prerequisiti

clona la repo

git clone https://github.com/gablilli/chemediaho

crea e avvia il container

dalla cartella del progetto:

docker compose up -d

nota: i log non sono ancora implementati.

una volta avviato, l’interfaccia web sarà disponibile sulla porta 5000 di tutte le interfacce del computer.

se usi ubuntu o hai ufw attivo, abilita la porta:

sudo ufw allow 5000

configurazione avanzata

https e sicurezza dei cookie

di default, l'app funziona su http (adatto per uso locale/domestico). se esegui l'app dietro un proxy https o un load balancer, imposta la variabile d'ambiente HTTPS_ENABLED=true:

# in compose.yml, aggiungi:
environment:
  - FLASK_ENV=production
  - HTTPS_ENABLED=true

questo abiliterà il flag Secure sui cookie di sessione, garantendo che vengano inviati solo su connessioni https.

📱 installazione come PWA

l'app può essere installata sul tuo dispositivo mobile per un'esperienza nativa:

su android (chrome)

  1. apri l'app nel browser
  2. tocca il menu (⋮) e seleziona "installa app" o "aggiungi a schermata home"
  3. conferma l'installazione

su ios (safari)

  1. apri l'app in safari
  2. tocca il pulsante condividi (□↑)
  3. scorri e seleziona "aggiungi a home"
  4. conferma l'installazione

una volta installata, l'app funzionerà come un'applicazione nativa!

chiave segreta e sessioni

l'app genera automaticamente una chiave segreta (secret_key.txt) al primo avvio per gestire le sessioni in modo sicuro. questa chiave:

  • è salvata in secret_key.txt nella directory dell'app con permessi restrittivi (600 - solo proprietario può leggere/scrivere)
  • non deve essere committata su git (già esclusa da .gitignore)
  • in docker, è persistita tramite volume mount per funzionare anche dopo i restart dei container

note di sicurezza

⚠️ importante per la sicurezza:

  • la chiave è salvata in chiaro sul file system - proteggi l'accesso al file
  • le credenziali nel cookie di sessione sono criptate con questa chiave
  • per ambienti di produzione, considera l'uso di gestori di segreti esterni (es. Docker secrets, Kubernetes secrets, HashiCorp Vault)
  • usa sempre la variabile d'ambiente SECRET_KEY in produzione invece del file
  • assicurati che il file secret_key.txt sia leggibile solo dall'utente che esegue l'app (permessi 600)

esempio per produzione con docker secrets:

# compose.yml per produzione
services:
  flask:
    environment:
      - SECRET_KEY_FILE=/run/secrets/flask_secret
    secrets:
      - flask_secret

secrets:
  flask_secret:
    external: true

risoluzione problemi

se qualcosa non funziona, controlla eventuali errori nel terminale e assicurati che l’installazione non abbia restituito messaggi di errore.


grazie a

per aver reso possibile tutto questo ❤️

About

dockerizable flask web page with QoL features to calculate your classeviva average even if your school has disabled it.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •