ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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. |