ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Plataforma para crear y gestionar evaluaciones de proyectos, asignaturas, premios y hackathones.
Translation pending
EducationTypeScript · PLpgSQLGitHub @cofrianOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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. |