ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Courses, lessons, grading, assessments and attendance for schools — one command center for the whole school day.
EducationTypeScript · JavaScriptGitHub @Reyel-boopOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.