ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
ระบบประเมิน Resident ของภาควิชาศัลยศาสตร์ มหาวิทยาลัยเชียงใหม่ ใช้ EPA และ PBA จากโฟลเดอร์ EPA/ และ PBA/ เท่านั้น ไม่มีการแสดงหรือย้ายข้อมูล Student logbook เดิมในส่วนติดต่อผู้ใช้ใหม่檢視完整 README ↗
ระบบประเมิน Resident ของภาควิชาศัลยศาสตร์ มหาวิทยาลัยเชียงใหม่ ใช้ EPA และ PBA จากโฟลเดอร์ EPA/ และ PBA/ เท่านั้น ไม่มีการแสดงหรือย้ายข้อมูล Student logbook เดิมในส่วนติดต่อผู้ใช้ใหม่
สร้าง catalog ที่ commit ไว้ด้วยคำสั่งนี้เมื่อเอกสารต้นทางมีการแก้ไข:
pnpm generate:templates
ตัวสร้างอ่านเฉพาะ EPA/ และ PBA/ และบันทึก source hash, criterion order และ score options ใน src/generated/residentTemplates.js เพื่อให้ตรวจสอบความเปลี่ยนแปลงของต้นทางได้
pnpm install
cp .env.example .env.local
pnpm test
pnpm build
pnpm dev
ตั้งค่า .env.local ด้วย publishable key ของ Supabase project dyiiivcyoatgmkmvgcnt เท่านั้น:
VITE_SUPABASE_URL=https://dyiiivcyoatgmkmvgcnt.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
VITE_APP_URL=https://resident-surgery-logbook.vercel.app
ห้ามใส่ service_role key, Gmail App Password หรือ OAuth secret ในตัวแปร VITE_ หรือ source code ฝั่ง browser
migration เป็น additive และไม่ลบ Auth users หรือ legacy Student tables/data:
supabase/migrations/202609070001_resident_assessment_platform.sql
supabase/migrations/20260908090000_add_resident_staff_directory_and_password_reset.sql
ให้ apply migrations ตามลำดับใน project ref dyiiivcyoatgmkmvgcnt แล้ว deploy Edge Function resident-admin พร้อมตั้ง SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY และ APP_URL=https://resident-surgery-logbook.vercel.app เป็น secret ของ Supabase Edge Function เท่านั้น
Migration ใหม่เปลี่ยนชื่อ role evaluator เดิมเป็น staff โดยคงข้อมูลบัญชีและ assignment เดิมไว้ และนำเข้า 35 แถวจาก รายชื่ออาจารย์ ปี 4.xlsx ลงใน Staff directory แบบไม่ส่งคำเชิญอัตโนมัติ. แถวที่ระบุหน่วย test ถูกเก็บไว้เพื่อให้ตรวจสอบแหล่งข้อมูลได้ แต่ตั้งเป็น inactive จึงเชิญหรือใช้เป็น Staff ไม่ได้.
หลัง migration ผู้ใช้ [email protected] จะเป็น Admin ก็ต่อเมื่อมี Auth user เดิมอยู่แล้ว หากยังไม่มี ให้สร้างบัญชี Auth นั้นก่อน แล้วรันส่วน bootstrap ของ migration อีกครั้งโดยผู้ดูแลระบบ
ใน Supabase Auth ให้เปิด Email provider และตั้งค่าดังนี้:
https://resident-surgery-logbook.vercel.apphttps://resident-surgery-logbook.vercel.app/reset-password[email protected] โดยเก็บ Gmail App Password ใน Supabase SMTP settings เท่านั้นห้ามใส่ service role, SMTP password หรือ secret ใดใน Vercel browser environment variables หรือ source code ฝั่ง client.
| Function | หน้าที่ | Secrets ที่ต้องตั้ง |
|---|---|---|
resident-admin | Admin สร้าง/เชิญบัญชี (ถ้าอีเมลมีบัญชี Auth อยู่แล้วจะผูกบัญชีเดิมและส่งลิงก์ตั้งรหัสผ่าน), ลบการประเมิน | SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, APP_URL |
resident-assessment-notifier | ส่งอีเมลแจ้ง Staff เมื่อมีคำขอประเมิน (deliver_initial) และอีเมลเตือน/ส่งซ้ำ (deliver_due) ผ่าน Gmail SMTP (App Password เดียวกับ Supabase Auth) | SMTP_HOST=smtp.gmail.com, SMTP_PORT=465, SMTP_USER, SMTP_PASS, (SMTP_FROM ไม่บังคับ) — deploy ด้วย --no-verify-jwt |
auth-send-email-gmail | Supabase Auth Send Email Hook (เชิญ, รีเซ็ตรหัสผ่าน ฯลฯ) ส่งผ่าน Gmail API | GOOGLE_GMAIL_* ชุดเดียวกัน, SEND_EMAIL_HOOK_SECRET |
GOOGLE_GMAIL_FROM_EMAIL ให้ตรงกับบัญชี Gmail เจ้าของ refresh token เสมอ (สอง function มีค่า default ต่างกัน)deliver_due ถูกเรียกทุก 15 นาทีโดย cron job resident-assessment-email-delivery (migration 20260928130000) secret ของ cron เก็บใน Supabase Vault (resident_reminder_cron_secret) และ function ตรวจกับ Vault เอง ไม่ต้องตั้ง secret เพิ่ม20260928110000_retire_legacy_year4_breast.sql (ถอนสิทธิ์ client, ข้อมูลยังอยู่)สร้าง project ใหม่ชื่อ resident-surgery-logbook ภายใต้บัญชี [email protected] และตั้ง environment variables สำหรับ Production/Preview:
VITE_SUPABASE_URLVITE_SUPABASE_PUBLISHABLE_KEYVITE_APP_URL=https://resident-surgery-logbook.vercel.appอย่าเชื่อม project นี้กับ deployment URL เดิมของ Student logbook และอย่าตั้งค่า Google Drive backup เก่าใน project ใหม่
pnpm generate:templates
pnpm test
pnpm build
Admin เป็นผู้กำหนดตารางประชุมเองและเปิด session ในเมนู “MM & Grand Round” เฉพาะวันที่มีประชุม โดยเปิดได้ก่อน 11:00 น. ตามเวลา Asia/Bangkok จากนั้นระบบแสดง QR บนจอประชุม Resident และ Staff ที่ลงชื่อเข้าใช้สแกน QR เพื่อบันทึกเวลาเข้า ระบบเปลี่ยน QR ทุก 1 นาที และปิดรับเวลา 11:00:00 น. โดยใช้เวลาเซิร์ฟเวอร์ สแกนซ้ำใน session เดียวกันจะแสดงเวลาครั้งแรก Admin ดูรายชื่อแยกตามวันและดาวน์โหลด CSV/Excel ได้
Backend migrations คือ supabase/migrations/20260920102939_mm_grand_round_attendance.sql และ supabase/migrations/20260921033316_allow_admin_scheduled_round_any_day.sql ตรวจโครงสร้าง/ขอบเวลาด้วย supabase db query --linked --project-ref dyiiivcyoatgmkmvgcnt --file tests/round-attendance-db.sql (รันจากโฟลเดอร์ repo) หลัง apply migration
ทดสอบบน Chrome ที่ desktop และ mobile: login ของ Resident/Staff/Admin, ลืมรหัสผ่านและการตั้งรหัสผ่านจาก recovery link, ประวัติของ Resident, การจำกัด Staff ตาม assignment, การบันทึก assessment ที่คะแนนครบทุกข้อ, และ Admin provision/Staff invitation/assignment/sync catalog. ทดสอบ RLS โดยใช้ผู้ใช้ต่าง role อย่างน้อยสองบัญชี และยืนยันว่า Resident/Staff อ่าน Staff directory หรือส่งคำเชิญไม่ได้
กรอกเฉพาะบริบททางคลินิกแบบไม่ระบุตัวตน ห้ามบันทึกชื่อผู้ป่วย, HN, เลขบัตรประชาชน หรือข้อมูลที่ระบุตัวบุคคลได้โดยตรง