ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Mantiqiy fikrlash, tanqidiy fikrlash va jamoada ishlash boʻyicha test.
Translation pending
EducationTypeScript · JavaScriptGitHub @theshoxjaxonOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A 12-question, 25-minute test of logical thinking, critical thinking and teamwork judgment (4 questions and 40 points each). Students take it at / in Uzbek (Latin), and the teacher reviews results and generates teams at /admin (in English).
Built with Next.js 16 (App Router), Tailwind and Drizzle ORM on PostgreSQL (Supabase), deployed on Vercel.
Use two free Supabase projects: one for development and one for production (the real test).Read the full README ↗A 12-question, 25-minute test of logical thinking, critical thinking and teamwork judgment (4 questions and 40 points each). Students take it at / in Uzbek (Latin), and the teacher reviews results and generates teams at /admin (in English).
Built with Next.js 16 (App Router), Tailwind and Drizzle ORM on PostgreSQL (Supabase), deployed on Vercel.
Use two free Supabase projects: one for development and one for production (the real test).
On supabase.com, create a New project. Pick a region close to your Vercel functions (and set the same region in Vercel → Project → Settings → Functions). Choose a database password and keep it.
When the project is ready, click Connect at the top of the project page and choose Transaction pooler. Copy that connection string:
postgresql://postgres.<project-ref>:[YOUR-PASSWORD]@aws-0-<region>.pooler.supabase.com:6543/postgres
Replace [YOUR-PASSWORD] with the database password. URL-encode special characters (@ → %40, # → %23, / → %2F, ? → %3F). Forgot it? Project Settings → Database → Reset database password.
Use the transaction pooler (port 6543), not the direct connection: it works over IPv4 (the direct connection is IPv6-only, which Vercel can't reach) and is made for many short-lived serverless connections.
Free projects pause after a week without activity. A paused project refuses connections until you click Restore in its dashboard, which takes a minute or two. Open both projects a day before the session.
Needs Node.js 24 (22.18 or newer also works: the scripts run TypeScript files directly).
git clone https://github.com/theshoxjaxon/quiz.git
cd quiz
npm install
cp .env.example .env.local # set ADMIN_PASSWORD, and DATABASE_URL = the DEVELOPMENT project's pooler string
npm run setup # creates the tables (from drizzle/) and loads the 12 questions
npm run build && npm start # serves on port 3000
npm start and npm run dev run npm run setup first, so the database is always up to date. Without DATABASE_URL they stop with instructions. Setup prints which database it uses (host and name only, never the password).
http://<this-computer's-IP>:3000./admin. The browser asks for a login: any username, plus the ADMIN_PASSWORD you set.npm run build again and restart npm start.caffeinate -dimsu and leave it open until the test is over.node in System Settings → Network → Firewall → Options, or click Allow when macOS asks the first time the server starts. That opens port 3000 to the network.ipconfig getifaddr en0 (Wi-Fi) and check http://<that-IP>:3000 from a phone. The IP can change between days, so check it on the day./admin, generate teams, and lock and unlock them.npm run db:reset -- --yes-wipe-remote. A Supabase database always counts as remote, so reset refuses without that flag. It removes all students, submissions and the team lock, and it's safe while the server is running.Create the production Supabase project and copy its transaction pooler string (section 1).
Create the tables and load the questions in production, from your computer. Do this once now, and again after changing questions or the schema:
DATABASE_URL="<production pooler string>" npm run setup
A DATABASE_URL given on the command line wins over .env.local. The first line printed should be Database: aws-0-<region>.pooler.supabase.com:6543/postgres (remote). Re-running is safe: it only applies migrations the database hasn't had yet and reloads the questions, keeping students and submissions.
Set two environment variables in Vercel (Project → Settings → Environment Variables):
| Name | Value |
|---|---|
ADMIN_PASSWORD | the teacher's password for /admin |
DATABASE_URL | the production transaction pooler string (port 6543) |
Deploy: import the GitHub repo in Vercel (the defaults are fine), or run vercel --prod. If a page fails with "DATABASE_URL is not set", the variable is missing: add it and redeploy.
DATABASE_URL="<production pooler string>" npm run db:reset -- --yes-wipe-remote.DATABASE_URL as production unless you scope it: give the Production environment the production string and Preview the development one..env.local. Anything there is used by npm run dev, npm run setup and npm run db:reset on your computer.| Piece | Where |
|---|---|
Schema: students, questions, submissions, teams, settings | db/schema.ts, migrations in drizzle/ |
Database connection from DATABASE_URL (postgres.js, no prepared statements, 1 connection per server) | db/index.ts |
npm run setup / db:reset: apply migrations, load questions and teams | db/setup.ts |
| Questions, answer key, categories, point weights (120 pts total) | db/questions.ts |
| Every student-facing string (Uzbek) | lib/i18n/uz.ts |
| Time limit, name matching, option shuffle, grading (total + per category) | lib/quiz.ts |
POST /api/register: name + student ID, sets session cookie, starts the clock | app/api/register |
GET /api/quiz: questions without answers, options shuffled per student, plus time left | app/api/quiz |
POST /api/submit: graded on the server by option ID; the score is never shown to students | app/api/submit |
GET /api/admin/results?format=csv|json: results (total + Logic/Critical/Teamwork) and team export | app/api/admin/results |
POST /api/admin/teams: top 5 go to Team 1, the rest are shuffled into Teams 2–6 (refused while locked) | app/api/admin/teams, lib/teams.ts |
PUT / DELETE /api/admin/teams/lock: lock / unlock the teams | app/api/admin/teams/lock |
Basic-auth guard for /admin and /api/admin/* | proxy.ts |
db/questions.ts, not what a student saw.npm run build && npm test
DATABASE_URL, even if .env.local has one. They check duplicate registration, the late cap, the team lock, shuffle and grading, per-category scores, and 30 simultaneous submissions.db:reset won't wipe a remote database without the flag, that the password is never printed, and that a missing DATABASE_URL stops with instructions.The API tests refuse to run against an out-of-date build, so editing anything in app/, lib/ or db/ needs npm run build again before npm test.
lib/i18n/uz.ts (UI) or db/questions.ts (questions). Write oʻ/gʻ with ʻ and the tutuq belgisi with ʼ, as the existing text does.QUIZ_MS in lib/quiz.ts. The registration page reads it, and the question count comes from the database.npm start (it reloads them), then run npm run build && npm test to re-check the rules. For production, repeat step 2 of Deploy to Vercel.db/schema.ts, run npm run db:generate to write a new migration file into drizzle/, commit it, then run npm run setup (development via .env.local, production with the inline DATABASE_URL).uz.ts.http:// (a laptop on the school network) the admin password travels unencrypted, which is fine on a school network. Vercel always serves HTTPS.