Application communautaire transformant le calendrier des évaluations scolaires en bulletin météorologique interactif
- API Express + SQLite : classes, évaluations, SSE, auth Bearer - Front Vite + TS + Tailwind : frise 7 jours, Exam Cards, modales - Capacitor Android : APK debug, CapacitorHttp natif - Seed : classe Terminale S2 (code TERMS2) |
||
|---|---|---|
| design/prototype | ||
| server | ||
| shared | ||
| web | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Météo Exam
Le calendrier des évaluations scolaires, traduit en bulletin météorologique interactif. Application Android (Capacitor) + API Node.js.
Structure
meteo-exam/
├── shared/ Types + correspondance type d'éval ↔ météo
├── server/ API Express + SQLite (classes, évaluations, SSE)
├── web/ Front Vite + TypeScript (compilé dans Capacitor)
│ └── android/ Projet Capacitor Android
└── design/prototype/meteo-exam-reference.html Prototype visuel d'origine
Démarrage rapide
1. Installer les dépendances
cd meteo-exam
npm install
2. Lancer le serveur
# Base de démonstration (Terminale S2, code d'invitation TERMS2)
npm run seed
# Serveur API (port 8787)
npm run dev:server
3. Lancer le front en développement
npm run dev:web
# → http://localhost:5173
4. Builder l'APK Android
cd web
npx cap sync android
cd android
./gradlew assembleDebug
# → android/app/build/outputs/apk/debug/app-debug.apk
Comptes de démonstration
| Rôle | Classe | Code | Pseudo |
|---|---|---|---|
| Admin | Terminale S2 | TERMS2 |
Thomas S. |
| Élève | Terminale S2 | TERMS2 |
n'importe quel |
L'admin peut ajouter / modifier / supprimer les évaluations. Les élèves consultent et reçoivent les mises à jour en temps réel (SSE).
Configuration
Serveur
| Variable | Défaut | Description |
|---|---|---|
PORT |
8787 |
Port d'écoute de l'API |
METEO_DB |
server/data/meteo-exam.db |
Chemin du fichier SQLite |
METEO_ORIGINS |
* |
Origines CORS autorisées (séparez par une virgule) |
App Android
Dans l'onglet Plus de l'app, l'adresse du serveur est configurable.
Sur l'émulateur Android, utilisez http://10.0.2.2:8787 (l'hôte de la machine).
Sur un téléphone physique, utilisez l'IP locale de la machine qui tourne le serveur.
API
| Méthode | Route | Accès | Description |
|---|---|---|---|
POST |
/api/classes |
public | Créer une classe → { token, code, member, klass } |
POST |
/api/classes/join |
public | Rejoindre via un code |
GET |
/api/classes/me |
membre | Session courante |
GET |
/api/exams?from&to |
membre | Liste des évaluations |
POST |
/api/exams |
admin | Ajouter une évaluation |
PATCH |
/api/exams/:id |
admin | Modifier |
DELETE |
/api/exams/:id |
admin | Supprimer |
GET |
/api/stream |
membre | Flux SSE (ping + exam.created/updated/deleted) |
Authentification : Authorization: Bearer <token> ou ?token= (SSE uniquement).
Statuts météo
| Icône | Nom | Coefficient | Signification |
|---|---|---|---|
| ☀️ | Grand Soleil | 0 | Aucune évaluation |
| 🌫️ | Brouillard | — | Rumeur non confirmée |
| 💨 | Coup de vent | 1 | Interro surprise, coeff faible |
| 🌩️ | Orage | 2–3 | DS / contrôle continu |
| 🚨 | Alerte Rouge | 4+ | Examen blanc / épreuve commune |
Phase 2 (prévu)
- Radar de rumeurs (vote communautaire, seuil de conversion 65 %)
- Métriques : pression atmosphérique (coefficient) + indice de vigilance 1-5
- Flash info du jour généré automatiquement
- PWA / service worker