ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.) |