ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Plateforme Next.js qui met en relation élèves et professeurs particuliers, avec Supabase (base de données + authentification par email).README 전문 보기 ↗
Plateforme Next.js qui met en relation élèves et professeurs particuliers, avec Supabase (base de données + authentification par email).
src/app/auth/inscription, src/app/auth/connexion), avec mot de passe oublié (src/app/auth/reinitialiser-mot-de-passe).src/app/profil) qui enregistre le profil (élève ou professeur) dans la table profiles.src/app/annuaire) qui affiche tous les profils enregistrés dans Supabase, avec page de profil public, messagerie et prise de rendez-vous.Copie .env.local.example vers .env.local :
cp .env.local.example .env.local
Remplis NEXT_PUBLIC_SUPABASE_URL et NEXT_PUBLIC_SUPABASE_ANON_KEY avec les valeurs de ton projet Supabase (Project Settings → API).
Policies RLS de profiles (obligatoire) — exécute le contenu de supabase/migrations/20260918210105_verify_profiles_rls.sql dans le SQL Editor de ton dashboard Supabase (ou via supabase db push si tu utilises la Supabase CLI reliée à ce projet). Ceci ne peut pas être appliqué automatiquement : merger une PR ou redéployer sur Vercel ne touche que le code de l'app, jamais la base Supabase elle-même — ni la clé anon, ni l'app, ni le déploiement ne permettent de créer/modifier des policies RLS, seul un accès SQL direct au projet (dashboard ou CLI) le peut.
Cette migration supprime d'abord toutes les policies existantes sur profiles (quel que soit leur nom) avant de recréer exactement celles-ci, et affiche le résultat dans le SQL Editor pour vérifier immédiatement que ça a fonctionné (3 lignes attendues) :
select pour tout le monde (anon + authenticated), pour que l'annuaire fonctionne sans connexion ;insert/update uniquement quand auth.uid() = id, pour que chaque utilisateur ne crée/modifie que son propre profil.profiles.id est auth.users.id (convention Supabase standard) — il n'y a pas et il ne faut pas de colonne user_id séparée ; toutes les autres tables (appointments, ratings, conversations, messages) référencent déjà profiles.id.
Remplace les migrations précédentes (20260918181846_fix_profiles_rls.sql, 20260918205407_reset_profiles_rls.sql, gardées pour l'historique) : utilise la version verify_profiles_rls, la plus récente.
Sans cette migration effectivement exécutée dans le SQL Editor, la création de dossier échoue avec l'erreur new row violates row-level security policy for table "profiles".
Contrainte CHECK sur profiles.role (obligatoire) — exécute le contenu de supabase/migrations/20260919211532_fix_profiles_role_check.sql dans le SQL Editor. La base avait une contrainte profiles_role_check qui n'autorisait pas la valeur "professeur" (utilisée partout dans le code : types/database.ts, formulaires, pages d'affichage), ce qui faisait échouer la création d'un dossier professeur avec new row for relation "profiles" violates check constraint "profiles_role_check". Cette migration remplace la contrainte par role in ('eleve', 'professeur') et affiche sa nouvelle définition pour vérification.
Policies RLS de conversations/messages (obligatoire) — exécute le contenu de supabase/migrations/20260919214052_fix_conversations_messages_rls.sql dans le SQL Editor. Ces deux tables n'avaient jamais eu de policies RLS configurées, donc toute écriture y était silencieusement refusée (RLS activée par défaut = tout refusé sans policy). C'est pour ça que cliquer sur « Envoyer un message » ne faisait rien. Cette migration limite la lecture/écriture aux deux participants de chaque conversation (contrairement à profiles, ces tables ne sont pas publiques) et affiche les policies créées pour vérification.
Templates d'email (obligatoire) — la confirmation d'inscription et la réinitialisation de mot de passe utilisent un code numérique (pas un lien magique). Ce code existe toujours côté Supabase, mais il n'apparaît dans l'email que si le template l'affiche. Va dans Authentication → Email Templates et ajoute {{ .Token }} dans le corps de ces deux templates :
<p>Ton code de confirmation : <strong>{{ .Token }}</strong></p>
<p>Ton code de réinitialisation : <strong>{{ .Token }}</strong></p>
Sans cette modification, le code est généré par Supabase mais jamais envoyé à l'utilisateur, et les pages « code de vérification » de l'app ne pourront jamais être validées.
La longueur du code (OTP Length dans Authentication → Sign In / Providers → Email, 8 chiffres sur ce projet) doit correspondre à la constante OTP_LENGTH définie dans src/lib/auth.ts. Si tu changes ce réglage côté Supabase, mets aussi à jour cette constante.
npm install
npm run dev
Le site est ensuite disponible sur http://localhost:3000.
src/lib/supabase/client.ts — client Supabase côté navigateur (composants "use client").src/lib/supabase/server.ts — client Supabase côté serveur (Server Components, Server Actions).src/lib/supabase/middleware.ts + src/proxy.ts — rafraîchissement de la session et protection des pages privées (/profil).src/types/database.ts — types TypeScript correspondant aux tables Supabase.src/app/profil/actions.ts — Server Action qui fait l'upsert dans profiles.(Déploiement initial sur Vercel — projet dédié à EduConnect, séparé de site-AM.)
(Redéploiement forcé pour prendre en compte NEXT_PUBLIC_SUPABASE_URL.)
(Redéploiement : correction de NEXT_PUBLIC_SUPABASE_ANON_KEY.)
(Redéploiement : ANON_KEY recorrigée, contenait un caractère de masquage.)
(Redéploiement : ANON_KEY importée via Import .env.)
(Redéploiement : NEXT_PUBLIC_SUPABASE_URL recorrigée via Import .env.)