ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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)