# Enuxia Quiz Application de quiz pédagogique **souveraine et auto-hébergée**, construite en Rust full-stack. Conçue pour un usage en présentiel (cours, examens) — les étudiants passent le quiz depuis leur navigateur, le professeur consulte les résultats et les statistiques depuis une interface d'administration protégée. ## Stack technique | Composant | Technologie | |-----------|-------------| | Frontend + Backend | Leptos 0.8 SSR + Axum | | Base de données | SQLite via SQLx | | CSS | Tailwind v4 | | Compilation WASM | wasm-bindgen | | Déploiement cible | Raspberry Pi 5 (ARM64) | | Reverse proxy | Traefik | ## Fonctionnalités ### Côté étudiant - Accès protégé par un code de session distribué le jour J - Sélection du quiz, saisie du prénom et nom - Navigation avant/arrière entre les questions - Minuteur optionnel avec soumission automatique - Correction détaillée avec les bonnes réponses après soumission ### Côté administration - Création et édition de quiz (questions, réponses, options) - Ordre aléatoire des questions et/ou des réponses par quiz - Blocage anti-doublon — un étudiant ne peut pas repasser sans autorisation - Reset individuel — le professeur autorise une nouvelle tentative - Statistiques — moyenne, distribution des scores, taux de réussite par question - Export CSV des résultats - Configuration des codes d'accès en live sans recompilation ### Sécurité - Interface admin accessible uniquement via VPN (conseillé) - Cookies de session httponly - Normalisation des noms (lowercase + trim) pour l'anti-doublon ## Architecture de déploiement ``` Internet │ ▼ Traefik Gateway (VM OVH) ├── quiz.enuxia.fr → étudiants (public) └── admin-quiz.enuxia.fr → professeur (VPN uniquement) │ ▼ Raspberry Pi 5 └── enuxia-quiz (binaire Rust, systemd) └── quiz.db (SQLite local) ``` ## Installation ### Prérequis ```bash rustup target add wasm32-unknown-unknown cargo install cargo-leptos # node et npm installés ``` ### Développement ```bash git clone https://git.enuxia.fr/Enuxia-Public/enuxia-quiz cd enuxia-quiz cp .env.example .env # Éditez .env avec vos valeurs touch quiz.db cargo leptos serve ``` ### Production (binaire) ```bash cargo leptos build --release # Le binaire est dans target/release/enuxia-quiz # Les assets sont dans target/site/ ``` ## Configuration Créez un fichier `.env` : ```env DATABASE_URL=sqlite:///chemin/absolu/vers/quiz.db SESSION_PASSWORD=code_distribué_aux_étudiants ADMIN_PASSWORD=mot_de_passe_admin LEPTOS_SITE_ROOT=/opt/enuxia-quiz/site LEPTOS_SITE_ADDR=0.0.0.0:3010 LEPTOS_TAILWIND_VERSION=v4.1.13 ``` Les mots de passe sont également modifiables en live depuis `/admin/config` sans redémarrer l'application. ## Gestion du service (systemd) ```bash # Démarrer systemctl start enuxia-quiz # Arrêter systemctl stop enuxia-quiz # Redémarrer systemctl restart enuxia-quiz # Voir l'état systemctl status enuxia-quiz # Logs en temps réel journalctl -u enuxia-quiz -f # Activer/désactiver le démarrage automatique systemctl enable enuxia-quiz systemctl disable enuxia-quiz ``` ## CI/CD Pipeline Gitea Actions (`.gitea/workflows/build-deploy.yml`) : - **Runner ARM64 natif sur le Pi** — build natif, tous les cores utilisés - **Cache Cargo** — premier build ~15min, suivants ~3min - **Deploy automatique** — `cargo leptos build --release` + `systemctl restart` ``` push main → runner Pi → cargo leptos build → cp binaire → systemctl restart ``` ## Licence MIT — libre d'utilisation, de modification et de déploiement. --- Construit par [Enuxia](https://enuxia.com) — systèmes intelligents souverains sur mesure.