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.) |