ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Web ujian pre-test & post-test anti-cheat untuk KSR PMI Unit Universitas Telkom. Peserta scan QR dari HP, panitia kelola sesi, soal, dan nilai di /admin.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Web ujian pre-test & post-test dengan anti-cheat untuk KSR PMI Unit Universitas Telkom . Peserta masuk lewat scan QR dari HP. Panitia mengelola sesi, soal, dan nilai dari satu panel. Masuk dengan kode / QR Mengerjakan soal Peringatan pelanggaran Nilai muncul serentakREADME 전문 보기 ↗
Untuk peserta
Untuk panitia (/admin)
held_on), pilihan pasangan sesi pre-test terkait, mode timer, dan batas pelanggaran.| Yang dilakukan | |
|---|---|
| Dicegah | Mode layar penuh dan layar terkunci sampai kembali ke layar penuh · tekan-lama, salin, dan seleksi teks diblokir (menutup jalan Google Lens dan copy-paste ke AI) · watermark nama + NIM di seluruh layar · layar dijaga tetap menyala · satu HP satu peserta per sesi |
| Dideteksi (dicatat sebagai pelanggaran) | Pindah aplikasi/tab · hilang fokus (notifikasi, overlay) · keluar layar penuh · split screen / jendela mengecil · reload atau membuka ulang ujian. Pelanggaran ke-N mengumpulkan jawaban otomatis. |
| Dijaga server | Timer dari server · soal dan opsi diacak per peserta · kunci jawaban tidak pernah dikirim ke HP · 1 NIM = 1 kali per sesi · mode per soal tidak bisa kembali · nilai baru muncul setelah semua selesai |
Keterbatasan aplikasi web: tidak bisa memblokir screenshot, rekam/share layar (misalnya ke Gemini), atau foto dari HP lain. Watermark membantu melacak siapa yang menyebarkan. iPhone tidak mendukung layar penuh, jadi di sana yang terdeteksi adalah pindah aplikasi/tab. Pengawas di ruangan tetap perlu. Rinciannya ada di Buku Panduan.
flowchart LR
P["📱 Peserta<br/>scan QR → /s/KODE"] --> V
A["💻 Panitia<br/>/admin"] --> V
V["Next.js di Vercel<br/>halaman + API"] -->|secret key, hanya di server| S[("Supabase Postgres")]
lib/exam.ts, diuji dengan unit test.record_answer, add_violation), sehingga request yang datang bersamaan tidak saling menimpa.Kebutuhan: Bun 1.2+, akun Supabase, dan akun Vercel untuk deploy.
Database. Buat project Supabase → SQL Editor → jalankan seluruh isi supabase/schema.sql.
Environment. Salin .env.example ke .env.local, lalu isi:
| Variabel | Isi |
|---|---|
SUPABASE_URL | https://xxxx.supabase.co (Project Settings → API) |
SUPABASE_SECRET_KEY | Secret key sb_secret_… atau service_role, bukan anon/publishable key |
ADMIN_PASSWORD | Password panel /admin. Pakai minimal 16 karakter acak. Kalau diganti, semua admin otomatis logout. |
Jalankan.
bun install
bun run dev # buka http://localhost:3000/admin
vercel.json saat ini memakai hnd1 (Tokyo) karena project Supabase-nya di ap-northeast-1. Kalau Supabase-mu di Singapura (ap-southeast-1), ganti ke sin1.Perubahan skema dicatat di bagian atas supabase/schema.sql. Untuk database yang dibuat sebelum pembaruan pre/post pairing, jalankan migrasi ini di SQL Editor Supabase:
-- Penambahan kolom sesi pre-test rujukan (relasi pre & post):
alter table exam_sessions add column if not exists pre_session_id uuid references exam_sessions (id) on delete set null;
-- Kolom tanggal pelaksanaan sesi:
alter table exam_sessions add column if not exists held_on date not null default current_date;
Kolom: type,question,a,b,c,d,e,answer. Template siap pakai tersedia dalam format Excel (public/contoh-soal.xlsx) dengan lebar kolom otomatis (auto-width) dan CSV (public/contoh-soal.csv).
| Kolom | Isi |
|---|---|
type | pg = pilihan ganda, bs = benar/salah (mc/tf juga diterima) |
question | Teks soal |
a … e | Opsi pilihan ganda, diisi berurutan mulai dari a, minimal 2. Kosongkan untuk bs. |
answer | Huruf opsi yang benar (A–E), atau B (benar) / S (salah) |
type,question,a,b,c,d,e,answer
pg,Apa kepanjangan dari KSR?,Korps Sukarela,Kelompok Siaga Relawan,Komunitas Sosial Remaja,Korps Siaga Rakyat,,A
bs,Tourniquet adalah pilihan pertama untuk semua jenis perdarahan.,,,,,,S
Mendukung file Excel (.xlsx) langsung serta CSV (.csv) dari Excel atau Google Sheets. Pemisah koma atau titik koma pada CSV terdeteksi otomatis. Format .xls lama tidak didukung (simpan sebagai .xlsx terlebih dahulu).
| Perangkat | Browser | Versi minimum |
|---|---|---|
| Android | Chrome, Samsung Internet, Edge, Firefox | Chrome 111+ (rilis 2023) |
| iPhone / iPad | Safari | iOS 16.4+ (iPhone 8 ke atas) |
| Laptop | Chrome, Edge, Firefox, Safari | Chrome 111+ / Safari 16.4+ |
Browser yang lebih lama melihat peringatan untuk memperbarui browser. Link yang dibuka dari dalam aplikasi Instagram/LINE/TikTok tetap bisa dipakai ujian, tapi peserta disarankan membukanya di Chrome atau Safari.
Kapasitas. Sudah diuji dengan 150 peserta simulasi yang join, menjawab, submit, dan mengambil nilai pada detik yang sama. Semua request berhasil tanpa error. Batas utama ada di jumlah request ke Supabase: paket gratis sekitar 40 request/detik. Project Supabase gratis juga otomatis di-pause setelah 7 hari tidak dipakai, jadi buka /admin sehari sebelum ujian. Ukur sendiri dengan:
# buat sesi uji di /admin, buka sesinya, lalu (hapus sesi itu setelahnya):
BASE=https://ujiksr.vercel.app CODE=ABC123 N=150 bun e2e/load.ts
bun test # unit test + skema database di PGlite (Postgres in-memory)
bun run lint # ESLint
bun run build # build + type-check
bun run e2e # uji end-to-end penuh tanpa akun Supabase:
# PGlite → PostgREST → next dev :3100 → Chromium headless
E2E butuh Chromium. Set CHROMIUM_PATH kalau lokasinya bukan /usr/bin/chromium-browser. Log dan screenshot kegagalan ada di e2e/.bin/.
app/
page.tsx beranda: masukkan kode sesi
s/[code]/ halaman join (aturan ujian, nama + NIM + prodi)
exam/[id]/ halaman ujian + anti-cheat (use-anti-cheat.ts)
api/attempts/ API peserta: mulai, lihat, jawab, submit, pelanggaran
admin/ panel panitia (server actions di actions.ts)
lib/
exam.ts aturan murni: acak soal, timer, penilaian, data untuk peserta
attempts.ts orkestrasi database per request
fullscreen.ts layar penuh + fallback untuk browser yang menolaknya
csv.ts · excel.ts · report.ts parser CSV & XLSX soal · auto-width Excel · perbandingan pre/post
supabase/schema.sql tabel, RLS, fungsi SQL atomik
e2e/ uji end-to-end dan uji beban (load.ts)
docs/ buku panduan + screenshot
lib/db.ts). RLS aktif tanpa policy.nosniff, dan Referrer-Policy: same-origin, karena link /exam/<id> adalah kunci peserta.AGENTS.md: catatan arsitektur dan panduan agen pengembang.Kode dirilis dengan lisensi MIT © 2026 Syarif & KSR PMI Unit Universitas Telkom: boleh dipakai, diubah, dan disebarkan, asal mencantumkan pemberitahuan hak cipta dan lisensi.