ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
L’IA fait de ton cours un livre de flashcards, et Folio te repose chaque page juste avant l’oubli. Gratuit, hors ligne, sur téléphone et ordinateur.
Translation pending
EducationJavaScript · PLpgSQLGitHub @mcflyvpro-artOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Tes cours, reliés en livres.
Application web de révision : chaque matière est un rayon, chaque jeu de
fiches un livre, et ce qu'on prête au cercle se pose sur l'étagère
commune. Sans dépendance, servie en statique, comptes et synchronisation
par Supabase.
Cache local en localStorage.
index.html · app.css · app.js · sw.js · manifest.webmanifest
logoflashcard.png source des icônes
icons/ icônes PWA générées
decks/ paquets livrés avec l'app (injection par commit)
tools/inject.py texte brut -> paquet + lien d'import
tools/build_2_1.py paquets du cours 2.1
tools/make_icons.py logoflashcard.png -> icons/
Matières : italien anglais philo eco droit management lettres.
Injection :
python3 tools/inject.py "Vocabulaire éco" -s eco -b https://<url-de-lapp> <<'EOF'
inflation = hausse générale des prix
PIB = production intérieure
EOF
Sortie : decks/<slug>.json + decks/index.json (commit = paquet poussé dans l'app)
et un lien …/#i=<payload> qui importe le paquet en un tap.
Chaque compte a sa propre bibliothèque dans Supabase (projet flashcard,
région eu-west-1). Trois tables, toutes en RLS stricte :
| table | contenu |
|---|---|
subjects | matières du compte : nom, couleur, ordre |
decks | paquets ; les cartes vivent en JSONB |
sessions | historique des scores, pour les courbes |
La politique est la même partout : user_id = auth.uid(). Un compte ne peut
donc ni lire ni écrire les lignes d'un autre, même en forgeant une requête —
c'est Postgres qui filtre, pas le client.
La clé publique (anon) est écrite en clair dans app.js. C'est prévu : elle
ne donne accès à rien par elle-même, seul le jeton de session obtenu à la
connexion ouvre les lignes du compte.
L'app garde une copie locale de la bibliothèque pour démarrer instantanément et fonctionner hors ligne ; les écritures partent en base et sont rejouées à la reconnexion. Vider le navigateur ne perd plus rien : il suffit de se reconnecter.
Les matières se créent, se renomment, se recolorent et se suppriment depuis l'écran Réglages (engrenage, en haut de l'accueil), sur une palette de 16 teintes.
De la base, et de nulle part ailleurs. Aucun paquet n'est écrit dans le code,
aucun n'est livré avec l'app : chaque carte appartient à une ligne decks d'un
compte, et les règles RLS de Supabase interdisent d'en lire une autre. Le cache
local n'est qu'une copie de ce que le compte connecté a déjà reçu.
Seules les sept matières de départ (Italien, Anglais, Philo, Éco, Droit,
Management, Lettres) sont créées à l'ouverture d'un compte — ce sont des lignes
subjects du compte, renommables, recolorables et supprimables.
Le bouton étincelle de la feuille « Coller » transforme un texte de cours en paires recto/verso, éditables avant l'ajout.
La clé Anthropic n'est jamais dans le dépôt ni dans app.js : ces fichiers
sont servis par GitHub Pages et donc lisibles par tout le monde. Elle vit dans
un secret de la fonction Edge ai (supabase/functions/ai/index.ts), qui est
la seule à parler à l'API. L'app n'envoie que le texte, accompagné du jeton de
session du compte connecté.
Secrets à définir sur le projet Supabase, dans Edge Functions → Secrets :
| secret | rôle |
|---|---|
ANTHROPIC_API_KEY | obligatoire, sinon la fonction répond nokey |
AI_BUDGET_USD | plafond de dépense sur le mois en cours (défaut 20) |
AI_DAILY_CALLS | appels maximum par compte et par jour (défaut 30) |
Chaque appel est journalisé dans la table ai_usage (tokens consommés et coût
en cents). Le plafond mensuel est vérifié avant chaque appel : au-delà, la
fonction refuse et l'app affiche « Budget IA atteint ».
Réglages → Mode simple éteint le moteur de planification : plus d'échéance, plus de notes, seulement le balayage à gauche ou à droite. Un message détaille les conséquences avant la bascule.
Aucune donnée n'est effacée : l'échéance, l'intervalle, la facilité et le nombre de réussites restent inscrits dans chaque carte. Réviser en mode simple ne les fait pas avancer. Au rallumage, les cartes dont l'échéance est passée pendant l'arrêt sont réparties sur plusieurs jours, à hauteur de l'objectif quotidien, pour éviter un rattrapage massif le même jour.
Le moteur suit la série recommandée en pédagogie scolaire — Ebbinghaus pour la forme de la courbe, Cepeda & Pashler pour l'écart optimal (10 à 20 % de l'horizon visé) :
J+1 · J+3 · J+7 · J+15 · J+30 · J+60 · J+120 · J+240 · J+365
Une carte monte d'un échelon quand elle passe, de deux avec « Facile », redescend d'un avec « Difficile », et retourne à l'apprentissage du jour avec « Encore ». Une carte durablement pénible reste sur son échelon au lieu de monter.
Chaque ligne de carte porte un bouton dont l'icône dit ce qu'elle contient :
… carte simple, T vrai/faux, une image, un haut-parleur, une étiquette.
Il ouvre la feuille d'édition : type, image et son au recto comme au verso,
étiquettes libres.
Mise en forme. **gras**, *italique*, __souligné__, retours à la ligne
et listes à puces (- ). Les formules s'écrivent entre $ en LaTeX :
$\frac{a+b}{2} \ge \sqrt{ab}$. Le rendu couvre fractions, racines, indices,
exposants, lettres grecques et opérateurs courants — sans aucune bibliothèque,
pour que l'app démarre toujours hors ligne.
Son. Un enregistrement peut être attaché à une face ; sinon, si le paquet déclare une langue, le navigateur lit le texte. Recto et verso ont chacun leur langue (réglages du paquet), et la lecture suit le contenu, pas le côté physique de la carte : si le paquet est inversé ou mélangé (bouton d'inversion, « mélanger les deux sens »), le texte qui était au recto continue de se lire dans sa langue d'origine même s'il s'affiche maintenant au verso. Dans le quiz, le micro dicte la réponse au lieu de la taper, dans la langue de la réponse attendue — qui suit la même logique si le quiz est inversé.
Vrai / faux. Le verso vaut vrai ou faux. Deux boutons remplacent le
balayage, la réponse est immédiate — pas de note à choisir, il n'y a pas de
nuance sur une question binaire.
QCM. Les trois mauvaises réponses sortent du paquet lui-même : ce sont des réponses plausibles, pas du remplissage. Les cartes vrai/faux en sont exclues.
Association. Six paires par lot, on relie de gauche à droite. Une paire trouvée du premier coup compte juste, sinon elle est comptée ratée.
Longues définitions. Le texte d'une carte rétrécit automatiquement selon sa longueur pour tenir dans le cadre ; au-delà d'une définition vraiment longue, il défile à l'intérieur de la carte plutôt que d'en déborder.
….