Il compagno di studio open-source per l'università digitale.
App Android in sola lettura per le università online che usano la stessa piattaforma studenti.
Important
Progetto indipendente e non ufficiale. Studium non è affiliato, approvato né sostenuto da alcun ateneo o gruppo universitario. I nomi e i marchi delle università appartengono ai rispettivi titolari e sono citati solo per indicare la compatibilità. Usa il tuo account personale e rispetta il regolamento della tua università.
- Cosa fa
- Cosa non fa, per scelta
- Installa l'app
- Sviluppo
- Architettura
- Sicurezza e privacy
- Qualità
- Roadmap
- Licenza
Studium è un client per la piattaforma studenti (Chamilo LMS con web app e API REST) condivisa da più università online. Legge i tuoi dati e li organizza per lo studio:
- Home "Da fare": le prossime azioni in ordine di urgenza (esiti da confermare, esame di oggi, prenotazioni in chiusura, ripasso, lezione da riprendere), media ponderata, CFU e prossimi impegni.
- Esami e appelli: prenotazioni, appelli prenotabili con la scadenza della prenotazione, esiti da confermare, promemoria. Si prenota sulla pagina ufficiale dell'ateneo, aperta nell'app.
- Corsi e lezioni: avanzamento delle videolezioni, tempo che manca, test di autovalutazione da fare.
- Trascrizioni ricavate dai sottotitoli, con ricerca ed evidenziatore.
- Dispense offline e ricerca offline in tutte le trascrizioni scaricate.
- Carriera: libretto per anno, voti, media aritmetica e ponderata, base di laurea stimata.
- Agenda: esami prenotati, appelli aperti, lezioni live, con promemoria locali.
- Avvisi dell'ateneo con gli allegati.
- Quiz ed esercitazioni locali: domande generate sul telefono dalle trascrizioni (completamento, vero o falso, argomento del passaggio), con spiegazione, link al paragrafo e banca personale con ripasso a intervalli. Gratis e offline.
- Tema chiaro e scuro che segue le impostazioni di sistema.
Note
Funzioni IA temporaneamente disattivate. Il provider IA facoltativo (quiz generati da un modello compatibile OpenAI) e il server MCP per gli assistenti IA sono spenti dal flag ENABLE_AI_FEATURES = false in packages/core/src/features.ts. Il codice resta nel repository ed è coperto dai test, ma l'app non mostra le impostazioni IA e il server MCP (studium-mcp serve) non si avvia; i comandi da terminale senza IA (login, courses, sync…) funzionano. I quiz locali, che non usano IA, restano disponibili.
Studium non scrive nulla sulla piattaforma: non registra la frequenza, non segna le lezioni come viste, non compila test, non prenota né cancella esami. Per prenotare apre la pagina ufficiale; la frequenza la registra solo il player ufficiale, mentre guardi. La garanzia è nel codice (vedi Sicurezza e privacy), non in una promessa.
- Dal telefono, scarica dall'ultima release
studium-<versione>-arm64-v8a.apk(quasi tutti i telefoni) oppure-armeabi-v7a.apkper i telefoni a 32 bit, e aprilo. Android chiede di consentire l'installazione da questa fonte. - Al primo avvio tocca Collega la tua università e inserisci l'indirizzo dell'area studenti, ad esempio
https://lms.<ateneo>.<dominio>/. - Accedi come sempre, sulla pagina ufficiale. Studium riconosce da solo la piattaforma: indirizzo dell'API, cookie della sessione, host di video e sottotitoli.
La configurazione si può esportare e importare (Impostazioni → Esporta configurazione). Prima di ogni importazione l'app mostra i domini che la configurazione userà e rifiuta quelli non coerenti o troppo generici (per esempio it, com, ac.uk).
Compatibilità. Studium è verificato end-to-end su un ateneo. Gli altri atenei della stessa piattaforma rispondono in modo identico alle verifiche anonime; la verifica con un account è un comando (docs/api.md). Se la piattaforma non è compatibile, l'app lo dice invece di mostrare dati sbagliati.
Requisiti: Node.js ≥ 22.18 e, per l'app, un dispositivo o emulatore Android.
npm ci
npm run build # core e server MCP
npm test # unit, contract ed end-to-end MCP (nessun account richiesto)
npm run mock # piattaforma di prova su http://localhost:4010 (utente: demo, password: demo)
npm run mobile # Metro: apri l'app con Expo Go (premi "a" per l'emulatore)Su un telefono vero con il mock: adb reverse tcp:4010 tcp:4010.
npm run check # lint, typecheck e test
npm run e2e -w @studium/mobile # E2E Android, con emulatore, mock e Metro avviatiProfilo integrato. Una build personale può includere già il profilo dell'ateneo: copia profiles/example.json in profiles/default.json (ignorato da git), poi npm run apk -w @studium/mobile. La build pubblica si ottiene con STUDIUM_PROFILE=none. Dettagli in profiles/README.md e apps/mobile/README.md.
| Modulo | Ruolo |
|---|---|
apps/mobile |
App Android: Expo + React Native, interfaccia Material, tema chiaro e scuro, funziona offline |
packages/core |
Client TypeScript portabile (Node e Hermes): validazione delle risposte con zod, guardia read-only, dominio (carriera, esami, agenda, quiz) |
packages/mcp |
Server MCP per gli assistenti IA, temporaneamente disattivato |
apps/mock-lms |
Piattaforma finta con dati inventati: il contratto eseguibile per test ed E2E |
apps/mobile ──┐ ┌─► fetch (React Native) + WebView per login e rinnovo
├─► packages/core ────┤
packages/mcp ─┘ (client, guardia, └─► Playwright (Node) per il server MCP
parsing, dominio)
apps/mock-lms ◄── contract test ed E2E
Le decisioni principali sono negli ADR:
- 0001 — Monorepo e core portabile
- 0002 — Sessione tramite la web app ufficiale
- 0003 — Funzioni IA
- 0004 — Prenotazioni sulla pagina ufficiale
Le API della piattaforma, ricostruite e commentate, sono in docs/api.md.
Studium è solo client: nessun server nostro, nessuna telemetria, nessun account Studium. I dettagli sono nella Privacy Policy.
- Accesso sulla pagina ufficiale. Il login avviene nella pagina dell'ateneo dentro una WebView: la password non passa mai dal codice di Studium. L'app legge solo il token di accesso che la web app imposta in un cookie leggibile; il refresh token resta un cookie HttpOnly che Studium non legge.
- Rinnovo della sessione fatto dalla web app, in una WebView nascosta: nessun segreto OAuth nel codice, nessuna chiamata diretta agli endpoint di autenticazione.
- Token cifrato con il Keystore di Android. Cache, dispense e trascrizioni restano nella memoria privata dell'app.
- Garanzia read-only. Ogni richiesta del client passa da una guardia (
packages/core/src/guard.ts): gli endpoint di tracciamento della frequenza sono bloccati con qualsiasi metodo e su qualsiasi host, e le scritture verso l'API studenti sono bloccate tranne un elenco ristretto di percorsi di sessione. - WebView confinate. Login, pagine ufficiali, player e rinnovo possono navigare solo sugli host dell'ateneo; i link esterni vengono bloccati, anche se arrivano da un deep link, e si possono aprire solo nel browser di sistema, che non condivide la sessione.
- Configurazioni importate verificate: ogni indirizzo deve appartenere ai domini dichiarati, i suffissi pubblici sono rifiutati e l'utente conferma i domini prima dell'importazione.
Vulnerabilità: segui SECURITY.md. Dispense e lezioni appartengono ai rispettivi autori: sono per lo studio personale e non vanno ridistribuite.
| Livello | Cosa | Dove |
|---|---|---|
| Unit | parsing, guardia, client (rinnovo, retry, errori, richieste condivise), carriera, agenda, appelli e finestre di prenotazione, quiz, ripasso | packages/core/test |
| Contract | client reale contro il mock via HTTP, incluso il rinnovo della sessione | apps/mock-lms/test |
| MCP end-to-end | client e server MCP contro il mock | packages/mcp/test |
| Android E2E | configurazione, login, studio, download, ricerca, carriera, avvisi, agenda, esami, rinnovo, logout, verifica read-only; anche su piattaforma reale con --site e --cred |
apps/mobile/e2e |
La CI (ci.yml) esegue lint, typecheck e test su Node 22 e 24 e verifica il bundle JavaScript Android.
- Quiz con motore locale gratuito (ADR 0003)
- Banca esercitazioni personale con ripasso a intervalli
- Esami e appelli con prenotazione sulla pagina ufficiale (ADR 0004)
- Hardening: configurazioni importate verificate, WebView confinate agli host dell'ateneo
- Riattivazione delle funzioni IA (provider compatibile OpenAI e server MCP)
- Riassunti delle lezioni
- Widget per la home di Android e notifiche per i nuovi avvisi
- Build iOS
Leggi CONTRIBUTING.md. Il sito del progetto è una pagina statica in docs/index.html, pubblicabile con GitHub Pages dalla cartella /docs.
MIT. Il progetto non ha legami con le università citate: vedi l'avviso in cima a questa pagina.
