ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.