ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
RescueLearn est une plateforme complète de formation et d'apprentissage du secourisme moderne. Conçue pour aider les apprenants à maîtriser les gestes d'urgence, elle permet également aux organismes de formation de gérer leurs sessions, formateurs, stagiaires, attestations et émargements de manière sécurisée et dématérialisée. L'ensemble des contenus pédagogiques (quiz, scénarios SNV et cartes d'apprentissage) sont inspirés des référentiels officiels de recommandations de la DGSCGC (Direction Générale de la Sécurité Civile et de la Gestion des Crises).查看完整 README ↗
RescueLearn est une plateforme complète de formation et d'apprentissage du secourisme moderne. Conçue pour aider les apprenants à maîtriser les gestes d'urgence, elle permet également aux organismes de formation de gérer leurs sessions, formateurs, stagiaires, attestations et émargements de manière sécurisée et dématérialisée.
L'ensemble des contenus pédagogiques (quiz, scénarios SNV et cartes d'apprentissage) sont inspirés des référentiels officiels de recommandations de la DGSCGC (Direction Générale de la Sécurité Civile et de la Gestion des Crises).
/formations) et journal des nouveautés (/changelog).@react-pdf/renderer.@react-pdf/renderer (génération), pdf-lib (fusion), signature_pad (tracé de signature)xlsx (import CSV / Excel des stagiaires), qrcode.react (émargement)@google/genai) pour l'analyse des référentiels et la génération de contenusprismaSchemaFolder)src/lib/logger.ts) empêchant la fuite de données personnelles (PII).Avant de commencer, assurez-vous d'avoir installé :
git clone <url-du-depot>
cd rescuelearn
bun install
Copiez le fichier d'exemple et remplissez les valeurs appropriées :
cp .env.example .env.local
(Voir la section Configuration pour plus de détails sur les variables).
Générez le client Prisma, appliquez les migrations et insérez les données initiales (seeds) :
# Générer le client Prisma
bun run db:generate
# Lancer la base de données (si locale) et exécuter les migrations
bun run db:push # ou bun run db:migrate pour créer une migration nommée
# Insérer les données de démo (quiz, cartes, etc.)
bun run db:seed
bun run dev
L'application est maintenant accessible sur http://localhost:3000.
Le projet utilise les variables d'environnement suivantes dans .env.local :
| Variable | Description |
|---|---|
DATABASE_URL | URL de connexion à la base de données PostgreSQL |
DIRECT_URL | URL directe (sans pooler) utilisée pour les migrations |
NEXT_PUBLIC_APP_URL | URL racine de l'application, utilisée aussi comme baseURL de Better Auth (ex: http://localhost:3000) |
BETTER_AUTH_SECRET | Clé secrète de sécurité pour Better Auth |
MAINTENANCE_MODE | Active le mode maintenance globale (true/false) |
MAINTENANCE_BYPASS_TOKEN | Token secret pour contourner la maintenance (backdoor cookie) |
R2_ENDPOINT | Endpoint de Cloudflare R2 ou AWS S3 |
R2_ACCESS_KEY_ID | Identifiant d'accès au bucket R2 |
R2_SECRET_ACCESS_KEY | Clé secrète d'accès au bucket R2 |
R2_BUCKET_NAME | Nom du bucket de stockage |
R2_PUBLIC_URL | URL publique du bucket (fichiers non chiffrés : logos, PDF des référentiels) |
ENCRYPTION_KEY | Clé symétrique utilisée pour chiffrer les fichiers sensibles sur R2 |
APP_MODE | Préfixe des clés R2 (dev / prod) |
CRON_SECRET | Secret attendu par les routes /api/cron/* |
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY | Projet Supabase pour le temps réel |
SUPABASE_JWT_SECRET |
Le projet s'appuie sur le découpage des schémas de Prisma (prisma/schema/*.prisma). Les commandes de gestion de la base de données sont disponibles via des scripts Bun :
bun run db:generate : Regénère les types Prisma Client à partir de l'ensemble des schémas.bun run db:migrate : Crée et applique une nouvelle migration de base de données en demandant un nom.bun run db:push : Synchronise directement le schéma local avec la base de données sans passer par des migrations (idéal en développement rapide).bun run db:seed : Exécute le script de peuplement initial (prisma/seed.ts).bun run db:studio : Ouvre l'interface visuelle Prisma Studio sur http://localhost:5555.bun run validate : Valide la syntaxe et les relations des schémas Prisma.La qualité du code de RescueLearn est garantie par une série de vérifications locales automatisées et de tests unitaires/intégration.
# Lancer les tests en mode exécution unique
bun run test
# Lancer le rapport de couverture de code (Coverage)
bun run test:coverage
# Lancer les tests en mode interactif (watch)
bun run test:watch
Avant chaque commit ou déploiement, vous devez vous assurer que le code passe la suite de commandes de validation suivante :
bun run type-check && bun run validate && bun run test && bun run build && bun x lint-staged
Cette suite est exécutée automatiquement par le hook Husky pre-commit.
type-check : Vérification stricte des types TypeScript (tsc --noEmit).validate : Validation des fichiers de schémas Prisma.test : Passage des 980+ tests unitaires et d'intégration via Vitest.build : Build de production Next.js.lint-staged : Analyse Oxlint & formatage Prettier sur les fichiers modifiés.rescuelearn/
├── prisma/
│ ├── schema/ # Schémas Prisma découpés (preview feature)
│ │ ├── auth.prisma # Authentification et Organisations
│ │ ├── config.prisma # Configuration client & database
│ │ ├── learning.prisma # Cartes d'apprentissage et Référentiels
│ │ ├── quiz.prisma # Quiz, Questions, Catégories
│ │ ├── snv.prisma # Scénarios et victimes SNV
│ │ └── training.prisma # Formations, émargements, stagiaires, signatures
│ └── seed.ts # Script de peuplement
├── scripts/ # Scripts utilitaires et de migration
├── src/
│ ├── __tests__/ # Tests globaux (ex: middleware, logo action)
│ ├── app/ # Next.js App Router
│ │ ├── (public)/ # Vues publiques (quiz, snv, glasgow, learning)
│ │ ├── actions/ # Server Actions globaux (organisation, switch, logo)
│ │ ├── admin/ # Dashboard et gestion des organismes (training, etc.)
│ │ ├── espace/ # Espace stagiaire (accès par lien, émargement, supports, attestation)
│ │ ├── api/ # API REST, Better-Auth, crons, téléchargements admin (documents, attestations signées)
│ │ └── validation/ # Schémas de validation
│ ├── components/ # Composants UI (Radix, shadcn/ui)
│ ├── hooks/ # Custom hooks React
│ ├── lib/ # Services et bibliothèques partagées
│ │ ├── auth.ts # Configuration de Better Auth (back)
│ │ ├── auth-client.ts # Configuration du client Better Auth (front)
│ │ ├── logger.ts # Logger sécurisé (sanitise les logs)
│ │ ├── r2.ts # Client R2 / S3 de stockage
│ │ ├── encryption.ts # Utilitaires de chiffrement des fichiers
│ │ ├── retention-service.ts # Service d'anonymisation des données
│ │ ├── trainee-access.ts # Jetons d'accès à l'espace stagiaire
│ │ ├── attestation-signature.ts # Signature active et verrou des attestations
│ │ └── prisma.ts # Client Prisma étendu
│ ├── services/ # Services business (ex: SiretService)
│ └── types/ # Typages globaux du projet
├── .oxlintrc.json # Configuration de linting Oxlint
├── prettierrc.json # Configuration de formatage Prettier
├── package.json # Dépendances et scripts de build
└── vitest.config.ts # Configuration des tests
Le projet intègre un script automatisé pour le déploiement sur Vercel. Il valide d'abord la conformité technique locale avant de pousser en production.
bun run deploy
Ce script effectue les actions suivantes :
main (vercel --prod).vercel).vercel-build est appelée, générant le client Prisma et exécutant les migrations distantes (bun run db:generate && bunx prisma migrate deploy && next build).vercel.json)| Route | Fréquence | Rôle |
|---|---|---|
/api/cron/keep-alive | Tous les jours, 5 h UTC | Maintient la base de données active |
/api/cron/cleanup-sessions | Toutes les heures | Nettoie les sessions de quiz abandonnées |
/api/cron/daily-quiz | Tous les jours, 7 h UTC | Envoie par email les questions aux joueurs abonnés |
Les routes de cron exigent le CRON_SECRET.
Signature des jetons Realtime de l'émargement (/api/realtime/token) |
GEMINI_API_KEY | Clé de l'API Google Gemini (génération de contenus) |
GEMINI_MODEL | Modèle Gemini utilisé (défaut : gemini-2.5-pro) |
SMTP_* | Configuration SMTP par défaut (liens d'accès stagiaires, etc.) |