Deeshan Sharma

Monet Live: Conferencing & Payments

A live video conferencing and proctoring platform behind a Janus SFU, with Socket.io scaled across nodes on a Redis adapter. I was its second-most active contributor over four and a half years, and I built and own its billing layer, its plan model and its reporting.

Node.js
Express
MongoDB
Socket.io
Redis
Janus WebRTC
Stripe
PM2

Overview

A live video platform in the Zoom or Meet category, with two things bolted on that change what it is for: proctoring, and assignments an organiser can publish for participants to complete during a session. The same machinery also hosts moderated research sessions. It started as a proof of concept in 2021 and was still shipping in 2026.

How the media and real-time layers work

Media goes through a Janus SFU rather than peer-to-peer, which is what makes a room of thirty people possible at all. Recordings come off Janus in its own format and are converted server-side; a set of GStreamer scripts pulls frames from the RTP streams at a configurable rate for the analytics layer, and tears the processes down by process tree rather than by PID so nothing is orphaned. Socket.io runs behind a Redis adapter so signalling survives more than one node — you do not reach for that until one process is genuinely not enough. Instance CPU sampling and up/down bandwidth tests feed an autoscaler that provisions and retires nodes around scheduled sessions.

What I built: billing

I created the Stripe integration and still own almost every line of it: customer creation, payment intents priced from the plan record, card attachment, payment-status polling, and a signature-verified webhook over the raw request body that records the payment and sends the receipt. Verifying the signature means preserving the unparsed body before any JSON middleware touches it — a small detail that is the difference between a webhook endpoint and an unauthenticated write endpoint. I also wrote the plan model it prices against, where entitlements live: participant capacity, licence count, meeting duration and hours, waiting room, recording, observer access.

What I built: identity and reporting

The user model and auth controllers are largely mine, as is the room reporting: a generator that joins cached per-session data in Redis with the durable records in MongoDB to produce per-room summaries and a PDF. Reporting is the seam where a real-time system meets a batch one, and it is the part that breaks first when a session ends badly — which is why it is worth owning.

Honest scope

About nineteen people have committed to this over its life and roughly a sixth of the history is mine — second by volume, across four and a half years. The assignments feature and the attention-scoring work belong to colleagues; I built the reporting layer over the latter, not the scoring itself. The billing is a payment-intent flow with plan entitlements, not a recurring-subscription lifecycle: there are no subscription or invoice webhooks and no reconciliation job, and saying otherwise would be easy and wrong.

Other Projects