ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
구조화·시각화된 기술 문서와 실제 예제로 이해를 돕고, 공부 중인 기술을 정리합니다
Documentación técnica estructurada y visual, con ejemplos reales orientados a la comprensión, no a la memorización. Organiza las tecnologías que estás estudiando.
교육TypeScript · ShellGitHub @pedroleni온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
App personal para organizar las tecnologías que estoy estudiando: un índice por categorías y un dashboard con el estado de cada una (pendiente / en progreso / completado). Especificación completa en specs/spec.md, plan técnico en specs/plan.md.README 전문 보기 ↗
App personal para organizar las tecnologías que estoy estudiando: un
índice por categorías y un dashboard con el estado de cada una
(pendiente / en progreso / completado). Especificación completa en
specs/spec.md, plan técnico en
specs/plan.md.
Este proyecto se construye con dos agentes de IA en roles distintos, no intercambiables:
Restricción real, no teórica: el sandbox de Codex (workspace-write)
no permite tocar .git en absoluto — ni checkout -b, ni add, ni
commit, ni push — y tampoco tiene acceso a red (no puede hacer
npm install ni hablar con Supabase). Por eso Codex nunca crea ramas ni
hace commits: implementa sobre el working tree, corre sus propios tests
localmente, y dice explícitamente qué hizo; Claude Code es quien crea la
rama, mueve los cambios ahí, verifica todo otra vez de forma
independiente, comitea, hace push y abre el PR. Está documentado con
más detalle en AGENTS.md.
flowchart TD
A["Usuario pide una feature"] --> B["Claude: brainstorming + spec<br/>specs/features/<feature>.md"]
B --> C["Claude: rama feat/<nombre> desde main<br/>(nunca se implementa sobre main)"]
C --> D["Claude: plan de implementación"]
D --> E["Se delega en Codex:<br/>script codex-task.sh (prompt, effort)<br/>+ panel codex-monitor en localhost:4545"]
E --> F["Codex implementa en el working tree<br/>sandbox workspace-write: sin red, sin tocar .git"]
F --> G["Codex prueba y compila por su cuenta<br/>y reporta qué hizo (y qué NO pudo hacer)"]
G --> H["Claude revisa el diff de verdad<br/>nunca se da por buena la palabra de Codex"]
H -->|insuficiente| E
H -->|ok| I["Verificación local obligatoria:<br/>tests, build y lint del proyecto<br/>⚠️ el CI de este repo NO los verifica, solo seguridad"]
I --> J{"¿Toca RLS, auth o datos sensibles?"}
J -->|sí| K["Migración manual en Supabase SQL Editor<br/>(Codex y el sandbox no tienen red)"]
K --> L["Verificación real contra Supabase<br/>anónimo / registrado / admin, peticiones HTTP directas"]
J -->|no| M
L --> M["Claude: revisión de seguridad<br/>/security-review (8 dominios) o fallback secuencial<br/>guardada en security/reviews/"]
M --> N["Claude: commit + push + PR contra main"]
N --> O["CI (security-scan.yml):<br/>solo los 5 scanners bash de scripts/security/"]
O -->|rojo| H
O -->|verde y revisado| P["Merge a main<br/>solo con confirmación explícita del usuario"]
Lo que este diagrama deja explícito y que antes solo estaba en
prosa repartida: el CI de este repo no corre test/build/lint
— eso es responsabilidad de Claude en local, cada vez, antes de dar una
rama por terminada. Y el sandbox workspace-write de Codex está
confinado al repo en el que se lanza en teoría, pero en la práctica
depende del trust_level configurado en ~/.codex/config.toml del
usuario — no asumir aislamiento total entre proyectos solo por el
nombre del sandbox.
Ninguna feature se comitea directo a main:
feat/<nombre> (o fix/<nombre>) desde main actualizado —
una rama por feature, no varias mezcladas.npm run test && npm run build && npm run lint
en verde en local — el CI no los corre (ver diagrama arriba).main. El workflow de GitHub Actions
(.github/workflows/security-scan.yml) corre automáticamente en
cada PR, pero solo los scanners de seguridad de scripts/security/.En vez de una única pasada de seguridad genérica, hay 8 checklists de
dominio en .claude/agents/, cada uno enfocado en
un área concreta: entorno del propio agente IA, secretos/claves,
vulnerabilidades de código, cadena de suministro (dependencias),
inyección (XSS, URLs), auth/RLS, infraestructura de despliegue, y
prompt-injection (instrucciones ocultas dirigidas a agentes IA).
/security-review (Claude Code) orquesta los 8 en paralelo,
sintetiza un informe único con severidad y risk score, y lo guarda en
security/reviews/ — no se queda solo en el
chat, para que quede versionado y buscable.scripts/security/*.sh son los scanners automáticos (bash puro,
sin dependencias de Claude Code) que cada subagente corre como primer
paso: secretos hardcodeados, patrones de código vulnerable,
dependencias sin pinnear, config insegura, prompt-injection. Los usa
también un hook de pre-commit local (bloquea el commit si hay
hallazgos CRITICAL/HIGH de secretos) y el CI (bloquea el merge del
PR con el mismo criterio).AGENTS.md.security/security-review-instructions.md
documenta los precedentes específicos de este proyecto (por qué RLS es
la capa de autorización real, cómo se sanea notes/resources, etc.)
para que los scanners no generen falsos positivos sobre decisiones ya
tomadas.Hay varias capas, cada una comprueba algo distinto:
| Capa | Herramienta | Qué prueba | ¿Toca red/Supabase real? |
|---|---|---|---|
| Unitarios | Vitest | Funciones puras (groupByCategory, computeStats, validateResourceUrl) | No |
| Componentes | Vitest + Testing Library | Formularios/páginas renderizadas de verdad en DOM simulado, interacción incluida | No — Supabase mockeado |
| Accesibilidad | vitest-axe | Auditoría axe-core sobre el DOM renderizado (labels, contraste, aria) | No |
| Hooks | Testing Library (renderHook) | useAuth aislado, supabase.auth mockeado | No |
| Lint | ESLint + jsx-a11y | Patrones incorrectos sin ejecutar nada | No |
| Type-check | tsc (parte de npm run build) | Tipos en tiempo de compilación | No |
| Seguridad | scripts/security/*.sh + subagentes | Secretos, inyección, RLS, dependencias | No |
| End-to-end | Playwright (manual, no en CI) | La app real, en un navegador real, contra el Supabase real — la única capa sin mocks | Sí |
Las siete primeras corren automáticamente en cada PR
(npm run test && npm run build && npm run lint + los scanners de
seguridad). La última se hace a mano cuando hay algo importante que
verificar de extremo a extremo — no está automatizada porque
necesitaría credenciales reales en CI y consumiría cuota real de
Supabase (emails, rate limits) en cada push.
Ninguna rama se da por terminada sin tests que la cubran, y el CI bloquea cualquier PR que no los tenga en verde — esa es la regla dura, la misma que persigue TDD. Pero no es TDD estricto en el sentido de "escribir el test en rojo antes que una sola línea de implementación": Codex implementa la funcionalidad y sus tests como parte del mismo paso, no en dos fases separadas. Si en algún momento se pide TDD estricto para una feature concreta, hay que decirlo explícitamente en el prompt — por defecto no es lo que se sigue.
npm install
cp .env.example .env # y rellena VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY
npm run dev # servidor de desarrollo
npm run test # tests
npm run build # build de producción + type-check
npm run lint # ESLint
La anon key de Supabase es pública por diseño (protegida por RLS) y sí
se puede tener en .env local — la service_role key nunca debe
aparecer en este proyecto, ver
security/security-review-instructions.md.
codex exec por defecto no imprime nada hasta que termina — para una
tarea de varios minutos, eso es no tener ninguna visibilidad de qué está
pasando. scripts/dev/ da dos herramientas para lanzar tareas de Codex
con streaming en tiempo real, en vez de tener que esperar a ciegas:
# Terminal 1: lanza la tarea (queda logueada en .codex-logs/, gitignored)
npm run codex:task -- "Implementa X en src/lib/utils, con tests" low
# Terminal 2: panel en vivo — se abre solo en http://localhost:4545,
# auto-detecta el log más reciente si no le pasas uno
npm run codex:monitor
codex:task acepta [reasoning_effort] [model] como segundo y tercer
argumento (por defecto medium, sin modelo explícito = el default de
Codex) — usa low para tareas mecánicas/bien acotadas y high para
algo ambiguo o sensible a seguridad, en vez de dejarlo siempre en
default (ver AGENTS.md).
Por qué existen estos scripts y no solo codex exec "..." a pelo:
lanzar codex exec en segundo plano sin cerrar stdin puede dejarlo
colgado indefinidamente esperando un EOF que nunca llega — pasó de
verdad durante el desarrollo de este proyecto (~30 minutos perdidos
hasta diagnosticarlo). codex-task.sh ya incluye < /dev/null y
--json (necesario para que haya algo que el monitor pueda ir leyendo
en caliente) para que nadie tenga que volver a pisar esa misma piedra.
tech-study-tracker/
├── src/ # app React
├── supabase/migrations/ # esquema SQL + RLS, versionado
├── specs/ # spec funcional + plan técnico
├── security/ # checklist de precedentes + historial de revisiones
├── scripts/security/ # scanners bash
├── .claude/agents/ # los 8 checklists de dominio (subagentes)
├── .claude/commands/ # /security-review
├── .agents/skills/ # skills de terceros instaladas (ej. Supabase RLS/Postgres)
├── AGENTS.md # instrucciones para cualquier agente (Codex incluido)
└── CLAUDE.md # instrucciones específicas de Claude Code