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.