ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI-graded multiple-choice reading quizzes for classrooms/homeschool \u2014 scan a stack of paper tests, get instant grading and per-teacher reports.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Scan a stack of paper multiple-choice reading quizzes, get instant AI-assisted grading and per-teacher reports. Built originally for a school librarian's SSYRA reading-quiz program; broadened to a general "grade circled-answer tests" tool for homeschool parents, classroom teachers, and coaches. See Docs/ for the full product spec — Docs/1-PRD.md and Docs/8-Pivot-Addendum.md are the source of truth if anything here ever seems to conflict with them.README 전문 보기 ↗Scan a stack of paper multiple-choice reading quizzes, get instant AI-assisted grading and per-teacher reports. Built originally for a school librarian's SSYRA reading-quiz program; broadened to a general "grade circled-answer tests" tool for homeschool parents, classroom teachers, and coaches. See Docs/ for the full product spec — Docs/1-PRD.md and Docs/8-Pivot-Addendum.md are the source of truth if anything here ever seems to conflict with them.
Live demo: quizwhiz-ashen.vercel.app — public, signed-up accounts are fully isolated from each other, but this is a portfolio demo, not a persistent service.
This is the fast path for a real, single-tenant deployment of your own — it provisions a fresh Supabase project automatically via Vercel's native Supabase integration, and runs the full database migration and storage bucket setup on first build (scripts/setup-database.ts) — no manual SQL, no CLI migration command. Two things can't be automated and you'll be prompted for them during the deploy flow: your own Anthropic API key, and CRON_SECRET, any random string of 16+ characters (a password generator works fine) — this secures the daily job that cleans up scanned test images once they're no longer needed (see "Scan image retention" below).
Every deployment is single-tenant: the first person to sign in claims the instance as its owner, and signup closes after that. This is separate from the public demo above, which stays open to anyone. A full step-by-step guide with screenshots, for a non-technical reader, is planned as a later addition — for now, this button plus the manual walkthrough below (if you want to understand what it's doing, or run it locally instead) are the available paths.
Useful if you're contributing to the codebase itself, rather than just deploying your own instance — the button above does all of this for you automatically.
anon public key.service_role key (server-only, never expose this to the browser).db.<ref>.supabase.co) is IPv6-only unless you pay for the IPv4 add-on, and fails with ENOTFOUND on most networks. Use the Transaction pooler and Session pooler tabs instead (both route through aws-0-<region>.pooler.supabase.com with username postgres.<project-ref>, which is IPv4-compatible)..env.local (copy .env.local.example first) — Transaction pooler goes in DATABASE_URL (app runtime), Session pooler goes in DIRECT_URL (migrations only; see drizzle.config.ts for why they're split).npm run build
scripts/setup-database.ts runs automatically before next build — it applies every Drizzle migration in lib/db/migrations/, creates the private scan-images storage bucket (public = false; all access goes through the service-role client in lib/supabase/admin.ts, never the browser directly), and applies the RLS policies and RPC functions under supabase/*.sql. Safe to run repeatedly — it detects an already-configured database and exits immediately. Re-run npm run db:generate after editing lib/db/schema.ts to produce a new migration first.
For local iteration without a full build, npm run db:migrate applies just the Drizzle migrations on their own.
Start the app (npm run dev) and sign up through /signup with your own email — the first real signup on a fresh instance becomes its owner, and signup closes after that (see lib/auth/instanceClaimed.ts).
Get a key from the Anthropic Console and add it to .env.local as ANTHROPIC_API_KEY.
Connect this repo at vercel.com/new, then add the same environment variables from .env.local in the Vercel project settings — or use the native Supabase integration and let lib/env.ts resolve its variable names automatically.
Scanned test/answer-key images are kept for about a day after a test is fully graded, then deleted — a daily Cron Job (vercel.json, app/api/cron/cleanup-scan-images/route.ts) does the actual cleanup, so an image isn't deleted the instant it's read the way it used to be (see lib/db/queries/scanImageRetention.ts). This only runs on Vercel — set CRON_SECRET in the project's environment variables (any random string of 16+ characters) so the cron endpoint can verify the request actually came from Vercel; without it, the endpoint refuses every request and images are simply never cleaned up. Running locally, nothing calls this route, so local scan images just accumulate in Supabase Storage until you deploy or clean them up by hand.
npm install
npm run dev
Open http://localhost:3000 — you'll be redirected to /login (or /signup if the instance isn't claimed yet).
npm run lint # ESLint
npx tsc --noEmit # Type-check
npm run db:studio # Drizzle Studio (browse the DB)