ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
Oponow는 시험 준비 플랫폼으로, BOE 형식 교재·공식 시험문제 테스트·학습 일정 관리 제공
Oponow es una plataforma para preparar oposiciones: temario estructurado como el BOE, tests con preguntas literales de convocatorias oficiales y una agenda de estudio.
교육TypeScript · CSSGitHub @rgonzdel온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
MVP de Oponow (temarios + tests de oposiciones): backend (apps/api), web (apps/web), app móvil (apps/mobile) y el paquete de base de datos (packages/db). • Node.js 20+ • pnpm (corepack enable si no lo tienes) • Un proyecto de Supabase (gratis vale para desarrollo) — no hace falta DockerREADME 전문 보기 ↗
MVP de Oponow (temarios + tests de oposiciones): backend (apps/api), web
(apps/web), app móvil (apps/mobile) y el paquete de base de datos
(packages/db).
| Pieza | Dónde vive |
|---|---|
| Web | Vercel |
| API | Render |
| Postgres | Supabase |
corepack enable si no lo tienes)cp .env.example .env
# genera un JWT_ACCESS_SECRET real y pégalo en .env, p.ej.:
# node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
pnpm install
Crea un proyecto en supabase.com, copia su
conexión directa (Project Settings > Database > Connection string >
"Direct connection", puerto 5432 — no el pooler Supavisor en modo
"Transaction", ver el comentario en .env.example) y pégala como
DATABASE_URL en .env (rol admin postgres, la password la fijaste al
crear el proyecto). Genera también POSTGRES_APP_PASSWORD y
POSTGRES_AUTH_SERVICE_PASSWORD, y completa DATABASE_APP_URL /
DATABASE_AUTH_URL con el mismo host pero esos roles.
pnpm db:bootstrap-roles # crea app_user y auth_service en el proyecto (una sola vez)
pnpm db:generate # genera SQL de migración a partir del schema de Drizzle
pnpm db:migrate # aplica las migraciones (rol admin)
pnpm db:rls # aplica grants + políticas RLS (rol admin)
pnpm --filter @oponow/db build
pnpm --filter @oponow/api dev
La API queda en http://localhost:3000.
Nota:
docker/contiene un Postgres local equivalente (con roles autoprovisionados víadocker/init/01-roles.sh) por si prefieres no depender de un proyecto Supabase para desarrollo local, pero el flujo soportado en staging/producción es Supabase.
| Rol | Usado por | RLS |
|---|---|---|
oponow_admin | migraciones, seed | dueño de las tablas, no sujeto a RLS |
app_user | API, casi todo | NOBYPASSRLS, sujeto a todas las políticas |
auth_service | solo AuthService | NOBYPASSRLS, con políticas RLS permisivas dedicadas + GRANT a nivel de columna en usuarios/refresh_tokens — necesario para resolver login/refresh antes de conocer la identidad del llamante (algunos proveedores gestionados, Supabase incluido, no dejan conceder BYPASSRLS a un admin no-superusuario) |
Cada request de la API fija app.current_user_id / app.current_plan
(vía set_config, ver apps/api/src/database/rls-context.middleware.ts)
sobre una conexión reservada del pool de app_user antes de tocar la base
de datos. Las políticas están en packages/db/src/rls/policies.sql.
apps/api NestJS: auth (registro/login/refresh/logout) + contexto RLS
packages/db Schema Drizzle, migraciones, políticas RLS
docker/ Postgres local + creación de roles