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 ↗Evalúa hackathons y clases sin papeles ni hojas de cálculo.
Rúbricas, jurado en directo, coevaluación, agenda de exposiciones y transcripción con IA en una sola plataforma. Gratis, accesible y de código abierto.
polievalua.tech · Funciones · Arquitectura · Instalación · Contribuir
Proyecto independiente de código abierto nacido para València Hack y generalizado para cualquier actividad evaluable. No es un servicio oficial de la Universitat Politècnica de València.
| Función | Qué hace | |
|---|---|---|
| 🏗️ | Espacios | Cada hackathon, asignatura, premio o proyecto es un espacio aislado con sus personas, equipos, rúbrica, imagen y resultados. Plantillas por tipo y un asistente con IA que lo prepara a partir de una descripción. |
| 👥 | Roles | Propietario, gestión, jurado, mentor, docente, alumnado, revisor y consulta. Invitaciones personales por enlace o correo, código de acceso e importación de la lista de PoliformaT (CSV). |
| 📋 | Rúbricas | Criterios con peso, niveles descritos con ejemplos, preguntas y requisitos. Nota sobre 100 al momento, autoguardado y cambios versionados (las evaluaciones antiguas conservan su rúbrica). |
| ⚖️ | Jurado | Tribunales con reparto de proyectos por rondas, notas privadas o compartidas en tiempo real y cronómetro de exposición. |
| 📊 | Resultados | Votaciones en directo, ranking, discrepancias entre jueces, equipos con pocas notas y exportación a CSV y PDF. Publicación de nota y comentarios al alumnado. |
| 🔁 | Coevaluación | Evaluación entre grupos y autoevaluación, siempre anónima, con reparto automático. |
| 🗓️ | Agenda y sala | Turnos por sala generados solos, reordenables, modo sala para quien dirige y modo proyector para la pantalla grande. |
| 🎙️ | Grabación + IA | La exposición se graba por segmentos, se transcribe con Whisper y cinco agentes preparan resumen, esquema, mapa mental, evidencias por criterio y preguntas. El audio se borra al transcribirse; el texto, N meses después de cerrar el espacio. |
| 🗳️ | Voto del público | Votación abierta con enlace o QR para el público asistente. |
| 🔔 | Avisos | Campana en la app con lo pendiente y correos de invitación, «expones en 10 minutos» y «resultados publicados». Cada persona puede darse de baja. |
| 🌍 | Idiomas | Castellano, valencià e English en toda la interfaz; transcripción con detección automática del idioma. |
| ♿ | Accesibilidad | Auditada con axe (WCAG 2.1 AA) en 29 páginas en modo claro y oscuro; enlace para saltar al contenido. |
| Evaluar | Resultados en directo |
|---|---|
| Sala del día | Modo proyector |
| Panel de gestión | Agenda |
🎬 Vídeo de presentación: public/showcase/promo.mp4. Se monta con código en video/ (Remotion) y lleva música original sintetizada: cd video && npm install && npm run render.
(también en la portada).
Todas las imágenes y el vídeo se generan solos con npm run showcase, que crea
un hackathon de demostración temporal, lo recorre con Playwright y lo borra.
flowchart LR
A[Gestión crea el espacio<br/>plantilla o asistente IA] --> B[Invita a la gente<br/>enlace · correo · lista CSV]
B --> C[Prepara rúbrica<br/>y agenda]
C --> D[Día de exposiciones<br/>sala · cronómetro · grabación]
D --> E[Jurado puntúa<br/>desde el móvil]
E --> F[Resultados en directo<br/>discrepancias · ranking]
F --> G[Publica nota y comentarios<br/>aviso por correo]
flowchart TB
subgraph Cliente["Navegador (PWA)"]
UI[Next.js App Router<br/>React 19 · Tailwind · shadcn/ui]
REC[Grabador por segmentos<br/>Opus 32 kbps · IndexedDB]
end
subgraph Vercel
SA[Server Actions<br/>y rutas /api]
TICK["/api/jobs/tick"]
end
subgraph Supabase
AUTH[Auth]
PG[(Postgres + RLS)]
RT[Realtime]
ST[Storage]
CRON[pg_cron + pg_net]
end
subgraph Externos["Servicios externos (planes gratuitos)"]
GROQ[Groq · Whisper large-v3]
KAGGLE[Kaggle GPU<br/>Whisper de respaldo]
NIM[NVIDIA NIM<br/>LangGraph · 5 agentes]
RESEND[Resend<br/>correo]
end
UI -->|sesión| AUTH
UI -->|lecturas con RLS| PG
UI <-->|notas y votos en directo| RT
UI --> SA
REC -->|segmentos| SA
SA --> PG
SA --> ST
CRON -->|cada minuto si hay trabajo| TICK
TICK --> PG
SA --> GROQ
SA -.cupo agotado.-> KAGGLE
KAGGLE -->|/api/worker/*| SA
SA --> NIM
SA --> RESEND
TICK --> RESEND
Principios
SECURITY DEFINER con comprobación de rol), no solo en la interfaz.erDiagram
events ||--o{ event_members : "personas y rol"
profiles ||--o{ event_members : ""
events ||--o{ teams : ""
teams ||--o{ team_members : ""
events ||--o{ rubrics : "versiones"
rubrics ||--o{ rubric_criteria : ""
rubric_criteria ||--o{ rubric_levels : ""
teams ||--o{ evaluations : ""
profiles ||--o{ evaluations : "jurado"
evaluations ||--o{ evaluation_scores : ""
events ||--o{ presentation_slots : "agenda"
teams ||--o{ presentation_recordings : ""
presentation_recordings ||--o{ processing_jobs : "cola"
events ||--o{ peer_reviews : "coevaluación"
events ||--o{ audit_log : ""
Las migraciones de supabase/migrations/ describen el esquema completo,
paso a paso.
sequenceDiagram
participant N as Navegador
participant A as App (Vercel)
participant Q as Cola (Postgres)
participant G as Groq / Kaggle
participant L as Agentes (NVIDIA)
N->>A: segmento de audio (~100 s, corte en una pausa)
A->>Q: trabajo transcribe_segment
Q->>G: Whisper large-v3
G-->>Q: texto
Note over Q: se borra el audio del segmento
Q->>Q: assemble: une textos quitando el solape
Q->>L: analyze: resumen, esquema, mapa mental,<br/>evidencias por criterio, preguntas
L-->>A: material para el jurado (citas verificadas)
Detalle completo en docs/AI_ARCHITECTURE.md. La IA nunca pone notas: solo prepara material de apoyo y la nota la decide una persona.
| Aviso | Cuándo | A quién |
|---|---|---|
| Invitación | Al crear una invitación | La persona invitada |
| Tu turno | 5, 10, 15 o 30 min antes (lo elige la gestión) | Integrantes del equipo |
| Resultados | La primera vez que se publican | Alumnado del espacio |
Se envían con Resend desde el pulso de la cola
(pg_cron → /api/jobs/tick), una sola vez cada uno (email_log), y respetan
la baja de cada perfil.
npm run test:security).Consulta SECURITY.md para comunicar una vulnerabilidad.
Requisitos: Node.js 22+, npm 10 y un proyecto de Supabase.
git clone https://github.com/cofrian/PoliEvalua.git
cd PoliEvalua
npm ci
cp .env.example .env.local # rellénalo con tus claves
npx supabase link --project-ref TU_PROJECT_REF
npx supabase db push # aplica las migraciones
npm run dev # http://localhost:3000
Para producción basta con importar el repositorio en Vercel, copiar las
variables y apuntar NEXT_PUBLIC_SITE_URL a tu dominio. El trabajador de
transcripción de respaldo está en worker/.
| Variable | Dónde | Para qué |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Cliente | URL del proyecto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Cliente | Clave pública limitada por RLS |
SUPABASE_SERVICE_ROLE_KEY | Servidor | Operaciones administrativas verificadas |
NEXT_PUBLIC_SITE_URL | Cliente | URL pública (enlaces de los correos) |
NVIDIA_API_KEY | Servidor | Asistente y agentes de IA |
GROQ_API_KEY | Servidor | Transcripción con Whisper |
RESEND_API_KEY | Servidor | Envío de correos |
EMAIL_FROM | Servidor | Remitente (por defecto PoliEvalúa <[email protected]>) |
JOBS_CRON_SECRET | Servidor | Secreto del pulso de la cola |
TRANSCRIPTION_WORKER_TOKEN | Servidor | Trabajadores Whisper de respaldo |
La lista completa, con las opcionales, está comentada en .env.example.
npm run test:ci # mensajes, lint, tipos y build
npm run test:security # RLS y aislamiento entre espacios (Supabase real)
npm run test:e2e # Playwright de punta a punta, incluida auditoría axe
npm run showcase # regenera capturas y vídeo
Las pruebas que usan Supabase crean datos temporales @test.local y los
borran al terminar. No las lances contra un proyecto ajeno.
src/app/ Rutas (App Router): (app) interna, (auth), (platform), api
src/components/ Interfaz: app/, ui/ (shadcn), brand/
src/lib/app/ Lógica de dominio: sesión, agenda, cola, avisos, resultados
src/lib/ai/ Modelos y agentes LangGraph
messages/ Traducciones es · ca · en
supabase/ Migraciones SQL y configuración
worker/ Transcriptor Whisper de respaldo (Kaggle, Colab, Docker)
e2e/ Pruebas Playwright y generador de capturas
docs/ Arquitectura de IA, plan, pruebas y revisiones
Código bajo licencia MIT. Los nombres, marcas y logotipos de cada organización (incluidos los de la UPV y los patrocinadores) pertenecen a sus titulares y no quedan cubiertos por esa licencia.
Los logos están en docs/brand/ y se regeneran con node scripts/brand-assets.mjs:
| Archivo | Uso |
|---|---|
wordmark-light.png / wordmark-dark.png | Logo Poli[Evalúa] sobre fondo claro u oscuro |
icon.svg / icon-512.png | Icono de la aplicación |
social-preview.png | Imagen al compartir el repositorio (1280×640) |
PoliEvalúa es un proyecto independiente; no es un servicio oficial de la Universitat Politècnica de València.
| 📱 | App instalable | PWA: se instala en el móvil como una app. |
| 🧾 | Auditoría | Registro de cada acción de gestión. |