HandbookLearning43

Live & virtual classes.

A virtual class in YESS is not a meeting link stapled to a timetable — it is a real class that happens to be online. It carries a section, so it knows who belongs in the room. It has a shared whiteboard the teacher writes on and the students watch, a document the teacher annotates live, a chat, polls, and a hand-raise queue. And when the teacher ends it, attendance is written and the logbook is stamped — automatically, because the room already knew which class it was. This handbook walks a class from scheduled to recorded, and is honest about which providers are real and which are still a name in an enum.

  • 6live tables
  • 13per-school knobs
  • 4session statuses
  • ≈13 minto read

Prologue

One provider that is really built#

The module's tagline promises "YESS Live / Zoom / Teams," and it is important to be straight about what that means in the shipped product. The real, production live provider is YESS Live — a self-hosted LiveKit backend that YESS drives directly: it issues the room tokens, streams the video, runs the whiteboard and the polls, and records the session. That is the classroom this handbook documents, because that is the one that is built.

Zoom and Microsoft Teams exist today only as a choice in a dropdown and a place in the schema to store an external meeting link — there is no Zoom or Teams sign-in, no meeting creation, no launch flow behind them yet. Pick one and YESS records your choice but cannot open the meeting. They are on the roadmap at the end of this book. Everywhere else, "virtual class" means YESS Live.

Under the hood the whole feature is a family of tables prefixed yess_live_ — sessions, viewers, chat, engagement, poll results, recordings — plus a per-school settings row and a registry of LiveKit endpoints. You never touch those names; the teacher sees "classes," the student sees "join," and YESS does the plumbing.

A live class is a physical class that happens to be online — same roster, same attendance, same logbook.

Chapter one

A class going live#

Follow one lesson end to end and the rest is detail.

08:50. A teacher opens /dashboard/virtual-classes, clicks Schedule class, and fills the dialog: title "Photosynthesis," class JSS-2 Blue, subject Biology, platform YESS Live, chat and reactions on, record off. A session row is written in status scheduled.

09:00. The teacher clicks Go live. The session flips to live, and the page swaps in place into the classroom — no new tab. The teacher's camera and microphone publish; a tldraw whiteboard fills the centre of the room.

09:01. The students of JSS-2 Blue see the class under "Live now" at /portal/live-classes and tap Join. Each join writes a viewer row that starts counting watch time. Their cameras and mics are off unless the school allows them; the board is read-only for them; a notebook panel sits beside the video so they can take notes that save straight into their subject notebook.

09:20. The teacher drops a diagram onto the board, annotates it, runs a two-option poll ("Which reaction needs light?"), and clears three raised hands from the queue.

09:40. The teacher clicks End session. The session flips to ended — and a database trigger does the quiet, important work: every student who watched at least half the class is marked present for that period, and a logbook entry is written for the lesson, tagged as a live-classroom delivery. The teacher wrote nothing down.

Chapter two

Turning the classroom on#

Every school gets a live-classroom settings row automatically, and an administrator tunes it at /dashboard/settings/live-classroom. There are thirteen knobs, and they decide what a live class is allowed to be at your school.

The thirteen knobs

  1. 1

    The master switch and room size

    Live classes on or off for the whole school, and a maximum-attendees cap (2 to 1000, default 40) that also sizes the LiveKit room.

  2. 2

    What a student may publish

    Four independent toggles — camera, microphone, screen share, chat. All conservative by default (a student joins muted, cameras and screen-share off), so a live class is teacher-led until the school opens it up.

  3. 3

    Recording and its budget

    Whether recording is allowed at all (off by default), and a storage quota in megabytes. The recording pipeline refuses to start a capture that would push the school over its quota.

  4. 4

    The two auto-logs

    Whether ending a class writes attendance, and whether it writes a logbook entry. Both on by default — this is what makes chapter five happen. Turn either off and that half of the end-of-class automation simply doesn't run.

  5. 5

    Default duration

    The length a new session is pre-filled with (5 to 480 minutes, default 60) — a convenience, not a hard limit.

  6. 6

    Which LiveKit endpoint

    A plan tier (free / pro / enterprise) and an optional pointer at a specific LiveKit instance; leaving it blank uses the shared default endpoint.

Chapter three

Scheduling a session#

The teacher console is /dashboard/virtual-classes (re-exported at /teacher/virtual-classes for teacher chrome). It lists a teacher's upcoming, live, and past sessions, and its Schedule dialog writes the session row.

The one field that matters most is the class / section— and it is required. It is not decoration: the section is what scopes who may join the room, and it is the key the end-of-class automation uses to find the right timetable period and the right roster. A subject is optional but recommended (it links the session to a course and a logbook line). The platform picker offers YESS Live, Zoom, Teams, or "recorded"; the toggles set whether chat, reactions, questions, and recording are allowed for this session.

A session moves through four statuses — scheduled, live, ended, cancelled. Going live and ending are teacher actions backed by database functions that verify the caller is the session's teacher before they change anything.

Chapter four

Inside the room#

When a teacher goes live, the page mounts the classroom in place. The engine is LiveKit: a real-time room the teacher and students publish audio and video into, with every interactive signal — chat, reactions, poll votes, hand-raises, board updates, mode changes — travelling over the room's data channel rather than the database. That is what keeps it feeling instant.

Designed product mock — the teacher's live room: board mode with the tldraw whiteboard centre-stage, the student strip along the edge, chat and the hand-raise queue at the side.

What the teacher can do

The teacher switches between three modes — face (camera front and centre), board (a collaborative tldraw whiteboard), and screen (screen share). The whiteboard is presenter-authoritative: the teacher draws, and the board state is snapshotted to the students over the data channel, so everyone sees the same page (students watch, they don't draw). The teacher can drop an image or a PDF onto the board and annotate it live — PDFs are rasterised page by page and placed as image shapes, so a worksheet becomes something to mark up in front of the class. Chat, reactions, polls, a hand-raise queue, and an award-a-star gesture round out the controls.

What the student sees

A student joins from /portal/live-classes; joining writes a viewer row and mints a student-scoped room token that only permits the devices the school's settings allow. The board is read-only. Beside the video sits a notebook panel that autosaves the student's notes into the same per-subject notebook documented in the Study handbook, linked to this session — so in-class notes aren't a throwaway scratchpad, they land in the notebook the student revises from later.

Chapter five

When the class ends#

Ending a class is where YESS earns its keep. The moment a session flips to ended, a database trigger runs the fan-out — once, guarded so it can never run twice for the same session.

Attendance. YESS matches the session's section to a timetable period, then marks every viewer who watched at least half the class (and no less than a minute) as present for that period, writing into the same attendance store the daily register uses. A student who dropped after two minutes is not marked present — watch time is real.

Logbook. YESS writes a logbook entry for the lesson, tagged with a live-classroom teaching method, so the syllabus-coverage record shows the lesson was actually delivered — the same logbook the coverage reports read from.

Both halves respect the school's auto-log toggles from chapter two. A school that keeps a separate register can turn attendance off; a school that logs coverage elsewhere can turn the logbook off. On the defaults, both happen and the teacher does nothing.

Chapter six

Recording and re- watching#

If the school allows recording and the teacher turns it on for a session, the record button dials LiveKit's Egress service, which composites the room and uploads the file to the school's cloud storage. A recording row tracks the capture through three states — processing, then ready (a webhook confirms the file, its size, and its duration), or failed. Every capture is checked against the school's storage quota before it starts.

Finished recordings play back at the session report, /dashboard/virtual-classes/[sessionId]/report, where YESS mints a short-lived signed URL per recording and streams it inline. Past-session cards on the console deep-link straight here.

Chapter seven

What makes virtual classes elite#

Five things done right

  1. 1

    A class, not a call

    Every session carries a section, so the room knows its roster and its timetable period. That single fact is what lets ending a class write real attendance and a real logbook entry — the thing generic video tools cannot do because they never knew which class you were in.

  2. 2

    Attendance by watch time, not presence

    Marking present requires actually having watched at least half the session, not merely having clicked join. A student who lurks for two minutes is not counted. The attendance the register shows is the attendance that was earned.

  3. 3

    Live document annotation on the board

    Drop an image or a PDF onto the whiteboard and mark it up in front of the class — worksheets, past papers, a diagram — rasterised page by page and placed as annotatable shapes. The board is presenter-authoritative, so every student sees the same page.

  4. 4

    Notes that survive the class

    The student's in-class notebook panel writes into their real per-subject notebook, linked to the session — so notes taken during a live class are there to revise from afterwards, not lost when the room closes.

  5. 5

    Privacy and device control by row

    Room tokens are minted per role and per school policy: a student only gets the camera, mic, screen, and chat rights the school enabled, and can only join a section they belong to. Access isn't a UI nicety — it's baked into the token.

Planned features

What comes next#

A genuinely built LiveKit classroom has scaffolding around it for features not yet finished. Here is the honest state, so you know what to rely on and what to wait for.

What is still scaffolding

  1. 1

    Zoom & Teams integration

    Both exist as a session type and a place to store an external meeting link, but there is no sign-in, no meeting creation, and no launch flow. Choosing them stores your choice and nothing more. Real Zoom and Teams bridges are planned; until then, use YESS Live.

  2. 2

    In-class quizzes & focus checks

    The room's data channel already defines quiz, focus-check, and force-mute events, but only polls are wired end to end today. Graded in-class quizzes, attention checks, and teacher force-mute are declared and waiting to be connected.

  3. 3

    Engagement analytics persistence

    The schema for per-student engagement scores and saved poll results is complete — including a computed engagement score — but the client does not yet write those rows at session end, so the report page shows recordings, not an engagement dashboard. The dashboard is schema-ready roadmap.

  4. 4

    Recording, provisioned by default

    The whole capture-to-playback pipeline is code-complete, but recording is off by default and needs cloud-storage credentials to leave stub mode. Making recording a first-class, provisioned-on-setup option is planned.

  5. 5

    Calendar merge

    Live sessions already expose themselves as calendar events through a database view, but the school calendar page has not yet merged that stream into its grid. Surfacing scheduled classes on the shared calendar is a small, planned wiring step.

Adjacent modules

Where virtual classes connect#

Tutorial

Do it step by step#

Run a real live class — scheduled, taught, and closed out with attendance written for you. Six steps in the order the lesson actually happens.

  1. 1

    Switch the classroom on

    An admin opens /dashboard/settings/live-classroom once, enables live classes, and leaves the two auto-logs on so attendance and the logbook write themselves at the end. Confirm your operator has pointed the school at a real LiveKit endpoint.

    Student camera, mic, and screen-share default to off — turn them on here only if you want student-led sessions.

  2. 2

    Schedule the session

    Open /dashboard/virtual-classes, click Schedule class, and — most important — pick the class / section. Add a subject, choose YESS Live, set chat and reactions, and save. The session is now scheduled.

    The section is required for a reason: it scopes who can join and lets YESS find the timetable period to write attendance against.

  3. 3

    Go live

    At class time, click Go live. The session flips to live and the classroom mounts in place — your camera and mic publish, and the whiteboard is ready.
  4. 4

    Teach

    Your students join from /portal/live-classes. Switch between face, board, and screen; drop a PDF or image on the board and annotate it; run a poll; clear the hand-raise queue. Turn recording on only if your school allows it and storage is provisioned.

    Students take notes in the panel beside the video — those notes save straight into their per-subject notebook, linked to this class.

  5. 5

    End the class

    Click End session. YESS marks every student who watched at least half the class present for the period, and writes a live-classroom logbook entry — automatically, once, with nothing to fill in.
  6. 6

    Re-watch

    If you recorded, open the session report at /dashboard/virtual-classes/[sessionId]/report to play it back — YESS mints a short-lived signed link and streams it inline.

The lesson happened online, but the register and the logbook look exactly as if it happened in a room.