ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
給老師使用的教學管理平台:課程、數位遊戲、AI 出題、學生管理、行事曆、即時課堂互動、成效報表,並支援多位老師共用同一個工作區。前端是 Next.js(App Router),後端資料庫、驗證、即時通訊全部走 Supabase;另有一個獨立部署的遊戲引擎子專案(game-engine/),透過 Vercel 的 Multi-Zones rewrite 掛在同一個網域的 /games 底下。 這份 README 是依照目前實際的程式碼結構重新整理的(原本的版本內容已經過時,例如引用不存在的 .env.example、只提到 lesson-ordering 這一項小功能)。 這是一個 monorepo,包含兩個各自獨立部署的 Next.js 專案: game-engine/ 是完全獨立的 Next.js 專案,在 Vercel 上是另一個 Project、另一個網域,basePath 設成 /games。主站透過 next.config.ts 的 rewrites() 把 mindaitutor.com/games/* 轉發過去,讓學生感覺是同一個網站;兩邊各自有各自的 package.json、部署流程、環境變數。詳細說明見 game-engine/README.md。README 전문 보기 ↗
給老師使用的教學管理平台:課程、數位遊戲、AI 出題、學生管理、行事曆、即時課堂互動、成效報表,並支援多位老師共用同一個工作區。前端是 Next.js(App Router),後端資料庫、驗證、即時通訊全部走 Supabase;另有一個獨立部署的遊戲引擎子專案(game-engine/),透過 Vercel 的 Multi-Zones rewrite 掛在同一個網域的 /games 底下。
這份 README 是依照目前實際的程式碼結構重新整理的(原本的版本內容已經過時,例如引用不存在的
.env.example、只提到 lesson-ordering 這一項小功能)。
這是一個 monorepo,包含兩個各自獨立部署的 Next.js 專案:
mind-ai-tutor/
├── app/ # 主站(教師端)— App Router 頁面與 API routes
│ ├── components/ # 共用 React 元件(ui/ 為 shadcn 風格基礎元件)
│ ├── contexts/ # React Context(語系、行事曆)
│ └── hooks/ # 共用 hooks
├── lib/ # 非 UI 的共用邏輯:Supabase client、Gemini、翻譯字串、匯出工具等
├── types/ # 型別定義(Supabase 產生的型別、第三方套件宣告)
├── supabase/ # 所有資料庫 SQL,見下方「資料庫設定」
│ ├── migrations/ # 新的增量 migration(依時間戳記命名)
│ └── scripts/ # 較早期、手動在 SQL Editor 執行的 SQL 與其測試
├── public/ # 靜態資源(品牌圖、字型、pdf.js worker、模型檔)
├── docs/ # 設計文件、驗收紀錄、Email 樣板
├── proxy.ts # 全站身份驗證守門
├── next.config.ts # 安全性標頭(CSP 等)+ /games 的 Multi-Zones rewrite
└── game-engine/ # 獨立部署的遊戲引擎子專案,見 game-engine/README.md
game-engine/ 是完全獨立的 Next.js 專案,在 Vercel 上是另一個 Project、另一個網域,basePath 設成 /games。主站透過 next.config.ts 的 rewrites() 把 mindaitutor.com/games/* 轉發過去,讓學生感覺是同一個網站;兩邊各自有各自的 package.json、部署流程、環境變數。詳細說明見 game-engine/README.md。
@google/genai),伺服器端呼叫,API 金鑰不外流到瀏覽器game-engine/ 各自獨立部署)package.json 的 engines 欄位)package-lock.json,不是 yarn/pnpm)git clone <repository-url>
cd mind-ai-tutor
npm install
專案目前沒有附 .env.example,請在根目錄自行建立 .env.local,內容依需求包含:
# Supabase(必填)
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY= # 僅伺服器端使用,例如 /api/team/invite 寄邀請信
# Gemini AI(AI 測驗/學習分析等功能需要)
GEMINI_API_KEY=
GEMINI_MODEL= # 選填,未設定則用程式內建預設值
GEMINI_IMAGE_MODEL= # 選填,遊戲封面生成用
# 數位遊戲子專案(game-engine/)
NEXT_PUBLIC_GAME_ENGINE_URL= # 教師端「開始遊戲」按鈕要連去的網域
GAME_ENGINE_ORIGIN= # 選填,/games 的 rewrite 目標;未設定預設指向正式站
# 其他選填
AI_GAME_COVERS_ENABLED= # 是否開放 AI 生成遊戲封面
LIVE_PREVIEW_DIR=
SUPABASE_SERVICE_ROLE_KEY 擁有繞過 RLS 的權限,絕對不能加 NEXT_PUBLIC_ 前綴、也不能出現在任何 client component 裡。
npm run dev
npm test # vitest run
npx tsc --noEmit -p . # TypeScript 型別檢查
npm run lint # next lint
npm run build # production build
所有 SQL 都放在 supabase/ 底下,手動貼到 Supabase SQL Editor 執行(專案沒有接 Supabase CLI 自動部署):
supabase/migrations/ — 新的 schema 變更一律放這裡,檔名以時間戳記開頭(例如 20261002020000_add_learning_analysis_reports.sql),照檔名順序執行。supabase/scripts/ — 較早期的 SQL。每個檔案都寫成可以重複執行(create table if not exists、create or replace function、drop policy if exists 再 create policy 之類的寫法);inspect_*.sql、set_user_admin.sql 這類是查詢/維運用的工具腳本,不是 schema 變更。supabase/scripts/ 裡核心表格(profiles、students、events、team workspace 等)用得到的檔案包括:
create_profiles_table.sql、create_missing_tables.sql — 基礎表格add_owner_scoping_*.sql、fix_*_rls.sql — 各表的 Row Level Securityadd_team_workspaces.sql、add_team_scoping_events.sql、fix_team_function_privileges.sql — 工作區共編功能add_live_sessions.sql、add_live_session_phase2.sql — 課堂即時模式add_ai_quizzes.sql、add_ai_quiz_sharing.sql — AI 測驗add_public_game_manifest.sql、add_game_cover_*.sql — 數位遊戲引擎(game-engine/ 讀取用)harden_game_student_data.sql、fix_ux_review_findings.sql — 安全性強化supabase/scripts/ 裡的 .test.ts 是對應 SQL 檔的 Vitest 測試(用 PGlite 在記憶體裡執行 SQL,不連正式資料庫),例如 supabase/scripts/add_live_sessions.test.ts。
主站與 game-engine/ 是 Vercel 上兩個獨立的 Project:
vercel.json 裡有基本安全性標頭;更完整的 CSP 等標頭是在 next.config.ts 的 headers() 設定。game-engine/:Vercel Root Directory 指向 game-engine/,basePath 設 /games,各自獨立網域。主站的 next.config.ts 用 rewrites() 把 /games/* 轉發到 GAME_ENGINE_ORIGIN(未設定時預設指向正式站網址),讓兩個 Vercel 部署在使用者看起來像同一個網站。
docs/ 資料夾底下有各功能的設計文件與驗收紀錄,例如 live-session-design.md(課堂即時模式)、team-workspace-design.md(工作區共編)、admin-overview.md(後台)、email-templates/(Supabase Auth 信件樣板)等,改動相關功能前建議先看一下對應文件。