All projects

Viademy

A classroom management platform for teachers using virtual reality. It provides real-time control and monitoring of students' VR headsets during lessons.

Viademy Hero

Who it is for

Teachers using VR headsets with students during classroom lessons.

Results & impact

  • The teacher interface brings together real-time monitoring and control of students' VR headsets.

A classroom management platform for teachers using virtual reality. It provides real-time control and monitoring of students' VR headsets during lessons.

The teacher as the control point of a VR lesson

When several VR headsets are used in a lesson, teachers need visibility into devices and a way to respond during class. Viademy focuses on that teaching workflow: real-time monitoring and control of students’ headsets.

The challenge

Give teachers visibility into students' VR devices and the ability to control them during an ongoing lesson.

The solution

A Next.js interface connects to a Laravel backend for real-time communication. The technology stack includes Laravel Reverb, WebRTC, Laravel Sanctum and PostgreSQL.

An interface connected to real-time communication

The project connects Next.js with a Laravel backend. Its stack includes Laravel Reverb for WebSockets, WebRTC, Laravel Sanctum and TanStack Query. The exact message protocol and my ownership of each layer still need to be documented from the project.

Handling device updates

The sample updates a single headset state and ignores older events based on a sequence number. It can be replaced with an actual event handler without exposing student data.

illustrative-headset-state.ts
// Illustrative example 
type HeadsetState = {
  id: string;
  sequence: number;
  status: "connected" | "disconnected";
};

function applyUpdate(
  states: Record<string, HeadsetState>,
  event: HeadsetState,
): Record<string, HeadsetState> {
  const current = states[event.id];
  if (current && current.sequence >= event.sequence) return states;
  return { ...states, [event.id]: event };
}