ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
토고 고등학생·대학생 대상 전국 말하기·변론 대회, AJ3C 주관, 참가자·학교·대중 투표·수상자·사진·영상 제공
Le concours national d'éloquence et de plaidoirie des lycéens et étudiants du Togo, organisé par l'AJ3C. Candidats, établissements, vote du public, palmarès, photos et vidéos.
교육TypeScript · CSSGitHub @vincentaholo-design온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Site du concours national d'éloquence et de plaidoirie organisé par l'AJ3C (Association des Jeunes Communicateurs pour le Changement de Comportement) : éditions, candidats, établissements, inscriptions, vote du public, palmarès, galerie, vidéothèque, actualités et administration.
Contenus réels : logos, photos de l'édition précédente (
public/photos, deux albums « 5e édition »), les 17 partenaires & sponsors du visuel officiel (public/partenaires), les coordonnées de l'AJ3C ([email protected], +228 97 07 57 07, @aj3c), la devise de la chaîne YouTube et une vidéo de la chaîne. Contenus de démonstration : l'édition en cours (« 6e édition »), ses candidats, établissements, dates, témoignages, articles et dossiers sont fictifs et portent un badge « Démo ». Le thème, les dates et le palmarès de la 5e édition sont laissés vides, à compléter dans l'administration.
Charte : dégradé bleu du logo (#035cfc → #10338b), orange du pupitre (#ff8d18 → #ff33aa) et blanc ; Montserrat (la police du logo) pour les titres, Plus Jakarta Sans pour le texte ; cartes blanches arrondies, grandes photos, boutons pilule.
Prérequis : Node.js 20.9 ou plus récent (22 recommandé).
npm install
npm run dev
Ouvrez http://localhost:3000.
Au premier lancement, une base PostgreSQL embarquée (PGlite, dossier .data/pglite) est créée, migrée puis remplie avec les données de démonstration.
[email protected] / Demo-Orathon-2026| Commande | Rôle |
|---|---|
npm run dev | serveur de développement |
npm run build puis npm start | build et serveur de production |
npm test | tests automatisés (vote, permissions, inscriptions) |
npm run typecheck | vérification TypeScript |
npm run check | typecheck + tests + build |
npm run db:migrate | applique les migrations (PostgreSQL ou base locale) |
npm run db:seed | charge les données de démonstration dans une base vide |
npm run db:reset | efface la base locale (recréée au prochain lancement) |
npm run admin:create -- email "Nom" super_admin | crée ou met à jour un compte d'administration |
Le projet se déploie sur Vercel sans saisir de clé à la main :
npm run vercel-build (scripts/vercel-setup.ts) :
applique les migrations, verrouille l'API publique de Supabase, crée les buckets de stockage
et charge les données de démonstration si la base est vide. Les variables de l'intégration
(POSTGRES_URL, NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, SUPABASE_JWT_SECRET) sont reprises
automatiquement (src/lib/platform-env.ts) ; APP_SECRET en est dérivé s'il n'est pas défini.ADMIN_EMAIL et ADMIN_PASSWORD
(12 caractères minimum), puis redéployer.Tant qu'aucun fournisseur d'e-mail (RESEND_API_KEY) ni de SMS n'est configuré, le vote reste en mode démonstration :
le code de vérification s'affiche à l'écran. Pour la version officielle : configurer Resend, définir DEMO_MODE=false,
un APP_SECRET fixe, Turnstile, puis relier le nom de domaine (Settings → Domains).
Le plan gratuit Hobby de Vercel est réservé à un usage personnel : passer au plan Pro pour le site officiel.
.env.example en .env.local (ou dans les réglages de l'hébergeur) et renseignez au minimum :
DATABASE_URL : chaîne de connexion PostgreSQL (pooler en mode transaction, port 6543) ;APP_SECRET : 32 caractères aléatoires. Ne plus le changer une fois le vote ouvert ;SUPABASE_URL et SUPABASE_SERVICE_ROLE_KEY : stockage des photos et des pièces ;NEXT_PUBLIC_SITE_URL : l'adresse définitive du site ;DEMO_MODE=false.npm run db:migrate.supabase/securite-supabase.sql dans le SQL Editor. Ce script active la RLS sans aucune politique pour anon et authenticated, et crée les buckets public-media (public) et dossiers (privé).npm run admin:create -- [email protected] "Votre Nom" super_admin (mot de passe demandé, 12 caractères minimum).npm run db:seed. Aucun compte de démonstration n'est créé sur PostgreSQL.npm run build && npm start).| Service | Variable | Sans configuration |
|---|---|---|
| E-mail (codes de vote, confirmations) | RESEND_API_KEY, MAIL_FROM | en démo : code affiché à l'écran ; en production : vote par e-mail refusé |
| SMS | SMS_WEBHOOK_URL (+ SMS_WEBHOOK_TOKEN) | idem. Le webhook reçoit {"to","text"} : à brancher sur l'agrégateur SMS de votre choix |
| Anti-robot | NEXT_PUBLIC_TURNSTILE_SITE_KEY, TURNSTILE_SECRET_KEY | vote « léger » refusé en production |
| Stockage | SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY | fichiers dans .data/uploads (local) |
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗