ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Rookie is a learning platform for CS fundamentals
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Learn Computer Science. Build Real Skills.
Rookie is a learning platform for CS fundamentals — programming, DSA, databases, operating
systems, networking, system design and web development. It combines a classroom, a roadmap,
a coding platform and a personal learning dashboard into one daily loop:
Open it every morning and immediately know what you're learning today, which class you have,
what to practice, how far along your roadmap you are, and what to do next.README 전문 보기 ↗Learn Computer Science. Build Real Skills.
Rookie is a learning platform for CS fundamentals — programming, DSA, databases, operating systems, networking, system design and web development. It combines a classroom, a roadmap, a coding platform and a personal learning dashboard into one daily loop:
Open it every morning and immediately know what you're learning today, which class you have, what to practice, how far along your roadmap you are, and what to do next.
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router, Server Components, Server Actions, proxy.ts) |
| Language | TypeScript (strict) |
| UI | React 19, Tailwind CSS v4, shadcn-style components on radix-ui, Lucide icons, sonner toasts, cmdk command menu, Recharts |
| Forms | React Hook Form + Zod |
| Backend | Supabase — Postgres, Auth, Row Level Security, Realtime |
| Editor | CodeMirror 6 (@uiw/react-codemirror) |
There is no separate API server: Next.js → Supabase → Postgres. Business rules that must
hold no matter who calls (permissions, activity tracking, achievements, streaks) live in Postgres
as RLS policies, triggers and RPC functions.
Browser ──► Next.js (Server Components / Server Actions) ──► Supabase (PostgREST + Auth)
│ │
└── Client Components (browser Supabase client, Realtime) ──────┤
▼
Postgres: tables + RLS + triggers + RPCs
supabase/migrations/*_rls.sql.admin_create_user database function, which re-checks is_admin(). Admins can also reset a
user's password or delete the account. Supabase's own signup endpoint must be switched off in
the dashboard so it can't be called directly. Email + password is the only login method.student and admin (a user_role enum on profiles). New users are
always students. A trigger blocks role changes unless the caller is an admin; admins use the
admin_set_role RPC.student_progress, coding_submissions,
attendance, assignment_submissions, roadmap_node_progress) which call log_activity().
activity_logs has a unique (user_id, type, entity_id) key, so toggling a lesson on/off or
re-solving a problem can't farm activity. Streaks, recent activity, achievements and analytics
all read from this one log. Clients cannot write to it.achievements with JSON criteria
(count of an activity type, streak length, attendance_rate). They're evaluated after each
activity and unlocked automatically; unlocking creates a notification.course_enrollments). Classes with
no course are open sessions visible to every student. Following a roadmap enrolls you in its
courses.not started = no submission row; in_progress/submitted/reviewed
are stored; late is derived from due_at. A trigger prevents students from grading themselves
or editing reviewed work, and limits staff to grading fields.The MVP deliberately does not run arbitrary code on the server. Execution sits behind a
CodeRunner interface (src/services/execution):
browser-js-runner — runs JavaScript in an isolated Web Worker in the student's own browser
with a hard timeout and network APIs disabled.remote-runner — placeholder for a sandbox service (Judge0, Piston, Firecracker…). Configure
NEXT_PUBLIC_CODE_RUNNER_URL to enable Java/Python. Without it, Java/Python submissions are
stored with verdict pending.Students can only read sample test cases (RLS). Hidden tests are staff-only and are meant to be executed by the future server-side judge. Until then, verdicts reported by the browser runner are trusted — fine for a learning MVP, not for competitive grading.
src/
app/
(marketing)/ /, /about
(auth)/ /login, /forgot-password, /reset-password (no public signup)
auth/ email-link confirm route handler (password recovery)
onboarding/ 3-step onboarding → recommended roadmap
(app)/ hybrid layout: app shell if signed in, marketing chrome if not
courses/ public catalog, course page, lesson reader
roadmaps/ public roadmaps, visual learning path
classes/ class schedule
(protected)/ signed-in only (and onboarded students)
dashboard/ agenda/ attendance/ assignments/ practice/ progress/
notes/ achievements/ class/[id]/ profile/ settings/ notifications/
admin/ admin workspace: teaching, classes, attendance, content, users, analytics, settings
components/
ui/ design-system primitives (shadcn-style)
shared/ PageHeader, Section, StatCard, EmptyState, Markdown, badges…
layout/ app shell, sidebar, mobile nav, ⌘K search, notification bell
marketing/ dashboard/ agenda/ courses/ lesson/ roadmap/ classes/ attendance/
assignments/ coding/ progress/ notes/ instructor/ admin/ charts/ onboarding/ profile/
lib/
supabase/ server/browser clients + session-refreshing proxy helper
auth/ session helpers (requireProfile, requireRole) and sign-out action
permissions/ UI-level role helpers
utils/ formatting
services/ typed data access + server actions per feature, execution layer
types/ domain types mirroring the schema
proxy.ts refreshes Supabase session, redirects anonymous users from protected routes
supabase/
migrations/ 0001 schema · 0002 functions & triggers · 0003 RLS · 0004 trigger fixes ·
0005 two roles · 0006 admin-managed accounts · 0007 achievements · 0008 payments
content/ optional content scripts (e.g. java-roadmap.sql)
bootstrap-admin.sql creates the first admin account
reset-all-data.sql ⚠️ wipes all users and content (keeps schema)
scripts/
validate-db.mjs runs migrations + content in PGlite (in-process Postgres) and checks permissions
docs/CONVENTIONS.md engineering conventions
supabase/migrations/20261002000001_schema.sql, …0002_functions.sql, …0003_rls.sql,
…0004_trigger_fixes.sql, …0005_admin_student_roles.sql,
…0006_admin_user_management.sql, …0007_achievements.sql, …0008_payments.sql; ornpx supabase login
npx supabase link --project-ref <your-project-ref>
npx supabase db push
supabase/content/ — e.g. java-roadmap.sql adds a
18-section Java Programming roadmap. Scripts are re-runnable.http://localhost:3000/**
to redirect URLs (used by password-reset emails).supabase/bootstrap-admin.sql, replace the placeholder
password, and run it in the SQL editor (don't commit your real password). Log in with that
account and add everyone else from Admin → Users → Add user.notifications to the supabase_realtime publication.Copy .env.example to .env.local:
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Project URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Publishable key (sb_publishable_…). Safe for the browser — RLS protects data. |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Legacy anon key; used only if the publishable key is unset |
NEXT_PUBLIC_SITE_URL | Public URL used in auth email links |
NEXT_PUBLIC_CODE_RUNNER_URL | Optional sandbox execution service for Java/Python |
No service-role key is needed: the app always acts as the signed-in user. Never commit .env.local.
npm install
cp .env.example .env.local # fill in your Supabase values
npm run dev # http://localhost:3000
Checks:
npm run typecheck
npm run lint
npm run build
node scripts/validate-db.mjs # migrations + content + permission tests in PGlite (no Docker)
Deploy to Vercel (or any Node host):
NEXT_PUBLIC_SITE_URL to the production URL and add it to Supabase Auth redirect URLs.npx supabase db push), then run
supabase/bootstrap-admin.sql to create your admin.There are two roles: student and admin. Admins teach and run the platform — they
create courses, lessons, roadmaps and problems, schedule classes, take attendance, grade
assignments, post announcements and cohort agendas, and manage users and settings. Every
/admin/* page requires the admin role, and every write is enforced by RLS (is_admin()).
| Capability | Student | Admin |
|---|---|---|
| Dashboard, agenda, roadmaps, courses, lessons, practice, progress, notes, achievements | ✓ | ✓ |
| Read own attendance / submissions / notifications | ✓ | ✓ |
| Modify attendance | ✗ | ✓ |
| Create/edit courses, modules, lessons, roadmaps, coding problems | ✗ | ✓ |
| Schedule classes, take attendance | ✗ | ✓ |
| Assignments: create, review, grade | ✗ | ✓ |
| Announcements, cohort agendas | ✗ | ✓ |
| Manage users & roles, platform settings, analytics | ✗ | ✓ |
| Record monthly student payments | ✗ | ✓ |
The database enum still contains
instructorfor compatibility, but migration0005converts existing instructors to admins and a check constraint prevents the value from being used.
pg_cron or a scheduled function.owner_idcourse_idagenda_item_progress