ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Learn by teaching. You explain a topic out loud; an AI student listens, watches your camera, whiteboard or screen, asks questions — and is deliberately wrong about 30% of the time so you have to catch it. You pick your student's persona — eager, skeptic, or confused.
Built on Gemini Live (native audio), Hono + ws, and a single vanilla-JS page. Hosted on
Google Cloud Run. Handoff notes — architecture, the session-handover design, and known
pitfalls — are in NOTES.md.
npm install
cp .env.example .env # add GEMINI_API_KEY
npm run dev # http://localhost:8000
npm run typecheck runs strict TypeScript over the server.
Cloud Run, via Cloud Build:
gcloud builds submit --config cloudbuild.yaml --project poken-app-260919
Production: https://poken.live (also www.poken.live; the Cloud Run URL
https://poken-7skula3n3a-uc.a.run.app still serves the same service).
GCP project poken-app-260919.
Needs the Secret Manager secret gemini-api-key in the project. cloudbuild.yaml sets the
60-minute request timeout, session affinity (required for WebSockets), and
SESSION_TIMEOUT_S to match the timeout.
Part of this codebase is implemented by Devin, Cognition's AI software
engineer, working from specs the team writes as GitHub issues. Each task runs in its own
draft PR: the kickoff /devin command, Devin's commits, its own verification summary, and the
team's review are all on the PR.
| Task | Issue | PR | Devin session |
|---|---|---|---|
| Traditional → Simplified Chinese conversion in transcripts | #1 | #4 (merged) | cd128bce |
| Teacher transcription via ElevenLabs Scribe v2 Realtime | #2 | #5 (merged) | 4c4040ee |
| Dead-code removal (Firebase remnants, unused CDN script, unused route, dead state) | #7 | #8 (merged) | f8431d3f |
| Coaching tips for typed teacher messages | #9 | #13 (merged; cooldown fix added in review) | 03a071b6 |
Demo hardening: pinned jsPDF, persona/language recap, protected /api/logs | #10 | #14 (merged) |
main.ts process entry — listens on $PORT
api/server.ts HTTP (Hono) + WebSocket + Gemini Live + prompts
server/ materials extraction, vision and video analysis
public/ index.html, app.js, logo.svg — served by the same process
Dockerfile node:20-slim, tsx runtime (no build step)
cloudbuild.yaml build → push → gcloud run deploy poken
| c957bb8a |
| Remove the ElevenLabs Scribe integration (Gemini transcription only) | #27 | #28 (merged) | 0f39c396 |
| Detect more diagram-request phrasings; student never refuses to draw (feature later removed) | #29 | #30 (merged) | — |
| On-demand diagrams drawn from the student's explanation, not the request (feature later removed) | #31 | #32 (merged) | — |
| Gemini transcription: trailing silence + settle so utterance tails aren't dropped | #33 | #34 (merged) | — |
| Transcript chunks concatenated verbatim (approach corrected in review) | #35 | #36 (merged) | — |
| Drop the leftover "solo" label from the session debug line | #39 | #40 | session |
| App-wide auth 1/3: Supabase auth moved into its own module | #41 | #42 |
| App-wide auth 2/3: return to the screen sign-in started from | #43 | #44 |
| App-wide auth 3/3: one account control on every screen that wants one | #45 | #46 |
| In-app confirm dialog, and Delete all for Learn history | #47 | #48 |
| Teaching history: delete one or all, and a way back to the landing page | #49 | #50 |
| Learn Mode: bold, subheads and lists in explanations | #52 | #53 |
| One mascot 1/3: extract the shared blob component | #54 | #55 |
| One mascot 2/3: the two loading screens | #56 | #57 |
| One mascot 3/3: the session student and the pill | #58 | #59 |
| Teach page: drop branding and stats, student choice moves left | #60 | #61 |
| Account control in one fixed corner on every screen | #62 | #63 |
| Grid-paper background on teach, learn and open questions | #64 | #65 |
| Learn and open questions: content on a white card | #66 | #67 |
| Reflection: grid paper, neutral palette, Pokey with a line | #68 | #69 |
| Persona cards: Pokey instead of emoji, coloured selection | #70 | #71 |
| Learn page: saved topics rendered twice (race in showTopics) | #72 | #73 |
| Floating polka dots on teach, learn and open questions | #74 | #75 |
| Visible float dots, emoji-free reflection buttons, pastel gradient | #76 | #77 |
| Opaque buttons and cards on the grid screens; plain Teach Again | #78 | #79 |
| Opaque Upload button and signed-in account pill | #80 | #81 |
| Progress bar from upload to end of document analysis | #82 | #83 |
| Pre-session progress bar no longer snaps back to empty | #84 | #85 |
| Document viewers: draggable popup in session, side panel in Learn | #86 | #87 |
| Palette colours for the reflection vocabulary and topic numbers | #88 | #89 |