ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A learning management system for schools — courses and sections, curriculum delivery, assignments and rubric grading, timed online assessments, period attendance, and early-intervention alerts.
Built on the T3 Stack: Next.js 15, tRPC v11, Prisma 6, NextAuth v5 and PostgreSQL.
npm install
./start-database.sh # local Postgres in Docker/Podman
npm run db:generate # create + apply the migration, generate the client
npm run db:seed # load a full demo school
npm run dev
test
npm run db:seed builds one coherent slice of a school: Dr. Aris Chen teaching
four sections, a unit of AP Biology lessons, a rubric-graded lab report, a
20-question timed assessment mid-attempt, today's attendance and three at-risk
students. It is idempotent — re-running resets the seeded rows. The seed
itself lives in src/server/demo/seed.ts (seedDemoSchool); prisma/seed.ts
is the CLI wrapper.
/demo is the page the landing page's "Try the live demo" and "Join the
waitlist" buttons lead to:
src/app/demo/actions.ts).
Inside the app, a banner marks the session as a demo and links back to the
waitlist.WaitlistEntry. A repeat email updates the existing row. Browse the entries
with npm run db:studio.GET /api/demo/reset with
Authorization: Bearer $CRON_SECRET re-runs the seed so visitors' changes
do not pile up. vercel.json schedules it every 6 hours; any external cron
that sends the header works too. WaitlistEntry is never reset.The one-click sign-in, the banner and the reset route are only active when
DEMO_MODE="true". With it off, /demo shows just the waitlist. A reset
deletes every user, so only enable DEMO_MODE on a dedicated demo database.
prisma/schema.prisma holds the full schema. Student-scoped academic records
hang off StudentProfile rather than User, so one person can hold several
roles without polluting the academic record.
| Area | Models |
|---|---|
| Identity | User, StudentProfile, TeacherProfile, Guardian, GuardianLink, Accommodation |
| Organisation | Department, Term, Course, Section, SectionMeeting, Enrollment, GradeSnapshot |
| Curriculum | Unit, Lesson, LessonSection, LessonMarker, LessonResource, SectionPacing |
| Learning | LessonProgress, LessonNote |
| Work | GradeCategory, Assignment, Rubric, RubricCriterion, RubricLevel, Submission, Grade, RubricScore |
| Assessment | Assessment, Question, QuestionOption, AssessmentAttempt, QuestionResponse, ProctorEvent |
| Operations | AttendanceSession, AttendanceRecord, Alert, InterventionAction, PeerTutorAssignment |
| Communication | Announcement, Conversation, Message, Notification, CalendarEvent, OfficeHour, OfficeHourBooking |
| Files | FileObject with join tables for submissions, responses and lesson resources |
| Growth | WaitlistEntry — early-access requests from /demo |
Notable modelling decisions:
Grade records the marks; released
grades roll up through GradeCategory weights into Enrollment.currentPercent
and are archived to GradeSnapshot, which is what grade-drop detection reads.Assessment optionally links to
an Assignment, so an online quiz lands in the same gradebook as a lab report.Submission.timeliness distinguishes on-time,
grace-period and late work, computed against Assignment.graceMinutes.AttendanceSession per section per
date, with a record for every enrolled student.tRPC routers live in src/server/api/routers/ and are mounted in
src/server/api/root.ts.
| Router | What it covers |
|---|---|
user | current user, profiles, roster search, accommodations |
course | sections, rosters, syllabus tree, pacing, enrolment |
lesson | lesson delivery, video progress and resume, timestamped notes, authoring |
assignment | assignment + rubric authoring, publishing, student "due soon" |
submission | drafts, submitting, attachments, missing-work sweep |
grading | priority grading queue, rubric grading, release, gradebook matrix |
assessment | attempts, autosave, flagging, proctor events, auto-scoring, item analysis |
attendance | daily period schedule, taking attendance, rates |
alert | at-risk detection and logged interventions |
dashboard | teacher command center, student overview and Star Points aggregates |
announcement / message / notification | communication |
calendar | agenda, timetable, office hours and bookings |
src/server/api/trpc.ts defines role-gated procedures — teacherProcedure,
studentProcedure, adminProcedure and staffOrStudentProcedure — on top of
the standard publicProcedure / protectedProcedure. Admins pass every role
check. Session-level roles are not enough on their own, so resolvers also call
the row-level guards in src/server/lib/permissions.ts:
assertTeachesSection — the caller teaches this sectionassertEnrolled / assertSectionAccess — active enrolment, or either sideassertStudentAccess — the student themselves, or a teacher who has themassertLessonAccess, assertSubmissionAccessTwo rules worth knowing: correct answers are never selected while an attempt is
in progress (assessment.getAttempt omits isCorrect), and students only see a
grade once its status is RELEASED.
Shared server logic lives in src/server/lib/:
grading.ts — letter scale, 4.0 GPA with AP/honors weighting, weighted
section averages, late classification, grade distribution bucketspermissions.ts — the row-level guards abovedates.ts — school-day helpers: weekday, term week, odd/even rotationstars.ts — Star Points: one star per point on released grades for any
graded work (derived, never stored) and the reward tiers they unlocksrc/server/uploadthing.ts — UploadThing file router for submission
uploads; needs UPLOADTHING_TOKEN| Command | Purpose |
|---|---|
npm run dev | development server |
npm run db:generate | create and apply a migration |
npm run db:migrate | apply migrations (deploy) |
npm run db:seed | load the demo school |
npm run db:studio | browse the database |
npm run check | lint + typecheck |
NextAuth v5 with the Prisma adapter and database sessions. The session callback
in src/server/auth/config.ts attaches role, studentId and teacherId to
session.user. The scaffold ships the Discord provider — swap it for your
school's SSO and set AUTH_* in .env accordingly.