Skip to content

Architecture technique

ducybrobin-ux edited this page Aug 23, 2026 · 3 revisions

Architecture technique

Vue d'ensemble

JDP_BC est une PWA sans build : aucun framework, aucune dépendance npm, aucun processus de compilation. Des modules JavaScript classiques chargés par <script> partagent un scope global minimal.

index.html          écran familles (SPA par sections .screen)
dashboard.html      console organisateur (i18n interne fr)
editeur.html        éditeur de contenu → export JSON
atelier.html        atelier de création de packs (bundles jdpbc-pack)
questionnaire.html  questionnaire testeurs
content/            CONTENU MODULAIRE (source de vérité pédagogique)
  manifest.json     packs actifs
  schemas/          contrats JSON Schema draft-07 (découverte, notion, balise)
  packs/biais-cognitifs/
    pack.json                 identité du pack (nom, thème, version, ages)
    decouvertes/*.json        1 fichier = 1 biais : fiche + quiz + pedagogie
    guide/*.json              1 fichier = 1 notion complémentaire
    balises/B*.json           énigmes par niveau avec tranches d'âge
js/
  data.js     GÉNÉRÉ depuis content/ (région marquée) + SITE/TRAIL manuels
              + moteur : allBirds, getEnigme, makeQuiz, applyAdminData…
  store.js    persistance localStorage (profils, réglages, progression) — clés jdp_*
  i18n.js     interface française (monolingue)
  audio.js    Web Audio : signatures synthétiques + avertisseurs (radar/bip/pulse/custom)
  compass.js  boussole + indice lumineux d'approche
  qr.js       lecture QR (caméra) — jsqr.js — génération QR — qrcode.js
  birdnet.js  reconnaissance sonore en ligne (« Shazam des ambiances »)
  dict.js     dictée vocale (Web Speech API)
  board.js    réception messages/épreuves côté participants
  challenges.js  épreuves du tableau de bord
  declination.js déclinaison magnétique (nord vrai)
  app.js      orchestration (écrans, énigmes, quiz, carnet, palmarès…)
tools/
  build-data.mjs    content/ → js/data.js + bundles/<id>.json (validation) ; --check pour la CI
  import-pack.mjs   installe un bundle de l'atelier dans content/packs/ (+ manifest)
  split-content.mjs migration one-shot data.js → content/
server.ps1      serveur HTTPS local PowerShell (+ proxy cloudflared optionnel)
sw.js           service worker : precache complet → 100 % hors-ligne
docs/           fiche pédagogique PDF + sources du wiki

Choix notables

  • Contenu modulaire (depuis v1.1.0) : chaque notion est un fichier JSON dans content/packs/, avec un bloc pedagogie (tranche d'âges, durée, objectif d'apprentissage, référentiel) et des énigmes déclinées par âge (facile 6-9, moyen 10-13, difficile 14+). node tools/build-data.mjs régénère la région « contenu » de data.js avec validation ; la CI refuse tout désynchronisage (--check). Les packs sont activables/désactivables via content/manifest.json — le moteur n'affiche que ce que les packs actifs contiennent.
  • Atelier de packs (depuis v1.1.1) : /atelier permet de créer un pack complet dans le navigateur (fiches, quiz, énigmes, pédagogie), avec validation en direct puis export d'un bundle .jdpbc.json installable via tools/import-pack.mjs. Les bundles des packs du projet sont régénérés dans content/bundles/ à chaque build.
  • Identifiants historiques conservés : BIRDS, getBird, chant désignent désormais les découvertes/pièges — héritage du projet d'origine TSLE1, renommés uniquement dans l'interface.
  • Avertisseurs d'approche : AudioSys.startProxSound() choisit entre la signature de la découverte et l'avertisseur sélectionné (alertSound : radar, bip, pulse, custom). Le mode custom stocke un enregistrement micro (≤ 5 s) en data-URL dans les réglages, décodé en AudioBuffer puis rejoué avec vitesse/gain selon la distance.
  • Hors-ligne : PRECACHE liste tout le nécessaire (y compris le PDF pédagogique) ; caches versionnés jdpbc-*.
  • Serveur : server.ps1 crée un certificat auto-signé au premier lancement et sert l'app en HTTPS ; WebSocket/long-polling léger pour le temps réel du tableau de bord.

Données & vie privée

  • Tout fonctionne en local : profils, progression, photos et enregistrements restent sur les appareils / le PC du site.
  • Aucun télémétrage, aucun compte en ligne. La reconnaissance sonore est le seul appel sortant optionnel.
  • Les données runtime vont dans data/ (non versionnée).

Contribuer

  1. Forkez, créez une branche, modifiez (éditeur intégré /editeur pour le contenu).
  2. Vérifiez la syntaxe : node --check js/*.js.
  3. Pull request bienvenue — licence AGPL-3.0 maintenue.

Clone this wiki locally