ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Profesora de mandarín con voz sobre ElevenLabs Agents. Práctica diaria de 10 minutos siguiendo el vocabulario HSK.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Una profesora de mandarín con voz, construida sobre ElevenLabs Agents, para practicar diez minutos al día siguiendo el vocabulario del HSK. Aprender mandarín falla por falta de conversación, no por falta de material. Las apps de tarjetas enseñan a reconocer caracteres, pero nadie practica hablar. Un profesor humano resuelve eso y cuesta 20-40 USD la hora, con horario fijo. El resultado habitual es un estudiante que lee HSK 2 y no sabe presentarse en voz alta. Una sesión diaria de diez minutos, hablada, con una profesora de IA que:檢視完整 README ↗
Una profesora de mandarín con voz, construida sobre ElevenLabs Agents, para practicar diez minutos al día siguiendo el vocabulario del HSK.
Aprender mandarín falla por falta de conversación, no por falta de material. Las apps de tarjetas enseñan a reconocer caracteres, pero nadie practica hablar. Un profesor humano resuelve eso y cuesta 20-40 USD la hora, con horario fijo. El resultado habitual es un estudiante que lee HSK 2 y no sabe presentarse en voz alta.
Una sesión diaria de diez minutos, hablada, con una profesora de IA que:
Todo queda en un cuaderno local que alimenta la sesión siguiente.
Navegador (React + Vite)
│
├── @elevenlabs/react ──WebRTC (voz) / WebSocket (texto)──► ElevenLabs Agent
│ · dynamicVariables: nivel, tema, vocabulario permitido
│ · clientTool record_learning ◄── el agente registra lo aprendido
│ · clientTool suggest_phrase ◄── el agente fija una frase en pantalla
│
├── src/learning.mjs capa de validación (el agente no puede mentir)
├── src/subtitles.mjs glosa palabra por palabra de lo que dice la profesora
├── src/Gradient.tsx el gradiente animado, alimentado por el audio real
│
└── localStorage cuaderno de sesiones
Sin backend y sin base de datos. El Agent ID es público por diseño; no hay ninguna API key en el cliente, así que no hace falta un servidor que la proteja.
| Archivo | Responsabilidad |
|---|---|
src/App.tsx | UI y ciclo de vida de la sesión |
src/Gradient.tsx | El gradiente animado y sus cuatro estados |
src/subtitles.mjs | Segmentación y glosa de los subtítulos |
src/learning.mjs | Plan de la sesión + validación de lo que reporta el agente |
src/curriculum.json | Niveles, temas, vocabulario y límites — todo configurable |
agent/system-prompt.md | System prompt de la profesora |
agent/setup.md | Cómo configurar el agente en el dashboard |
tests/learning.test.mjs | Tests de contrato de la capa de validación |
tests/subtitles.test.mjs | Tests de la glosa de subtítulos |
tests/phrase.test.mjs | Tests de la frase fija de suggest_phrase |
@elevenlabs/react (useConversation) para la integración: WebRTC en modo voz,
WebSocket en modo texto, transcripción en vivo, y record_learning y suggest_phrase
como client tools.General Sans (Fontshare) en una sola familia y cuatro pesos, más Noto Sans SC para el chino. Es una alternativa libre a PP Neue Montreal, que es la del estilo de referencia y es de pago.
La sesión no se lee, se habla. Durante la conversación la pantalla está blanca y no hay nada en ella salvo el gradiente y lo que la profesora acaba de decir. Ni reloj, ni barra de navegación, ni lista de vocabulario: todo eso vive antes de empezar y después de terminar, porque contar los segundos no enseña nada y mirar una lista mientras deberías escuchar, tampoco.
En el centro hay un gradiente animado que es la profesora: un lienzo que dibuja cinco
masas de color sobre una base saturada y se mueve con el audio real de la conversación —
getInputVolume() mientras hablas tú, getOutputVolume() mientras habla ella. Tiene
cuatro estados con color, escala y velocidad propios: en reposo, escuchando, pensando y
hablando. El ataque es rápido y la caída lenta, así que la masa salta con la voz y se
asienta despacio en lugar de parpadear.
Cuatro detalles hacen el movimiento.
El desplazamiento es ruido, no ondas. Una onda tiene un periodo visible y a los diez segundos ves el gradiente repetirse; el ruido de valor no se repite nunca.
El contorno no es un círculo. Se traza en coordenadas polares con el radio modulado por ruido muestreado sobre una circunferencia, lo que lo hace periódico en θ de balde y garantiza que la forma siempre cierre sobre sí misma.
El motion blur es acumulación. En vez de borrar el lienzo cada frame, se le pasa una
capa de blanco casi transparente por encima; lo que sobrevive debajo es la estela. Es el
mismo principio que el WebGLRenderTarget de las referencias en Three.js, pero en canvas
2D y sin una sola dependencia. Cuanto más baja la opacidad de ese lavado, más larga la
cola: al pensar es de .04 y la estela es larga, en reposo es de .085 y apenas se
insinúa.
El cuerpo se compone a través de un desenfoque. Se dibuja en un lienzo aparte y se
vuelca con filter: blur(), porque un clip() deja un borde a navaja y en la referencia
no hay un solo filo. El grano — cuatro texturas de ruido alternadas en overlay — va
recortado al cuerpo y no a toda la caja: pintado sobre la estela, que se vuelve a granular
en cada frame, se sedimenta en un moteado sucio.
Medido: 0,18 ms por frame a 640×640, contra un presupuesto de 16,7 ms.
Todo pasa fuera del ciclo de render de React: el nivel se lee dentro de requestAnimationFrame
a través de una referencia, nunca desde el estado, y el halo se controla con variables CSS
escritas directamente sobre el nodo.
El caso de uso que más se repite aprendiendo un idioma es querer decir algo que todavía no
sabes decir. No hace falta ningún botón: se lo dices y ya está. Lo que hace la app es que
su respuesta no se desvanezca — la profesora la manda por la client tool
suggest_phrase y la tarjeta se queda fija hasta que la cierras, porque no puedes repetir
una frase que desapareció mientras la leías.
Esta es la única herramienta que acepta vocabulario fuera de tu nivel, y es deliberado: pedir cómo se dice algo es, casi siempre, pedir lenguaje que aún no tienes. La app marca esas frases como fuera de nivel y no las cuenta como vocabulario practicado, así que el progreso HSK sigue siendo honesto.
Bajo el gradiente aparece lo último que dijo la profesora, con el pinyin y el significado
en español debajo de cada palabra. El subtítulo se mantiene hasta que la frase siguiente lo
reemplaza: nunca se desvanece por su cuenta mientras lo estás leyendo. Un único control
recorre tres densidades — solo 汉字, con pinyin, y con significado — y recuerda cuál
prefieres. La glosa no se le pide al modelo: se calcula en el
cliente segmentando el chino contra curriculum.json (src/subtitles.mjs), prefiriendo
siempre la palabra más larga. Una palabra que no está en el vocabulario aparece sin
significado y la app lo dice, en vez de adivinar. Es una glosa palabra por palabra, no una
traducción de la frase, y la interfaz también lo advierte.
Un LLM al que le pides un resumen pedagógico tiende a inflarlo — dice que practicaste palabras que nunca aparecieron, o inventa correcciones plausibles. Eso convierte la app en un juguete que te felicita.
Aquí record_learning no escribe directamente en el cuaderno. Pasa por
validateLearningEvent (src/learning.mjs:29), que rechaza:
practiced debe aparecer literalmente en
la transcripción;Si falla, la herramienta devuelve un error al agente y este debe corregirse y reintentar. El cuaderno solo guarda lo que de verdad ocurrió.
curriculum.json.?demo=1. Abre la vista de ejemplo con los subtítulos, sin conectar ni gastar
créditos. Sirve para enseñar la app.docs/hsk-source.md.npm install
cp .env.example .env # opcional: el Agent ID también se puede pegar en la UI
npm run dev
Necesitas un agente propio en ElevenLabs. Los pasos están en
agent/setup.md — se tarda unos diez minutos.
npm test # tests de validación y subtítulos
npm run build # typecheck + build de producción
Se usa el temario HSK 3.0 publicado en noviembre de 2025 (implementación indicada para
julio de 2026). Las 40 entradas se verificaron contra sus secciones del documento oficial.
Los ejemplos, explicaciones y roleplays son originales; no se reproduce material de
examen ni de libros de texto. Detalle en docs/hsk-source.md.
| Escritorio | Móvil |
|---|---|
| Entregable | Estado |
|---|---|
| Aplicación funcional | Hecho |
| Capa de validación + tests | Hecho (23/23) |
| Rediseño en blanco, solo voz y gradiente | Hecho |
| Interacción por gradiente animado + subtítulos | Hecho |
| Motion blur por acumulación y contorno deformable | Hecho |
| Frase fija al preguntar "¿cómo digo…?" | Hecho (falta declarar la tool en el dashboard) |
| Agente configurado en ElevenLabs | Pendiente |
| Cinco conversaciones de prueba | Pendiente |
| Despliegue | Pendiente |
Los resultados de las pruebas se publicarán en docs/pruebas.md cuando el agente esté
conectado. Este README no afirma que algo funcione antes de haberlo probado.