Live classes, attendance and fees for Moodle — in one ledger
Three Moodle plugins that run a live-class coaching business: gated join links students cannot share, attendance that triggers billing, real class duration driving both the family’s charge and the tutor’s pay, and prepaid wallets families can top up themselves. Available on ETmantra Moodle hosting.
ClassLedger is three Moodle plugins that work as one system. They came out of moving a real coaching business off WhatsApp and a spreadsheet, and they solve the problem that setup creates: the thing that decides money ends up stored somewhere nobody can check.
Read the full story behind it: your coaching business runs on WhatsApp and a spreadsheet, here’s what broke.
Students see a Join button that appears a set number of minutes before class. Before that, a countdown. The meeting URL is never rendered on the page — not hidden with CSS, never sent to the browser at all. The button points at a server-side script that checks who you are and whether the window is open, then redirects.
There is nothing to screenshot, nothing to forward, and nothing to revoke.
• Zoom — meetings created automatically through the API, hosts drawn from a pool so two classes never collide, and cloud recordings flow back into the course by themselves.
• Paste a link — for Teams, Google Meet or anything else. You create the meeting where you normally do; students still get the gated Join button rather than the URL.
• No online meeting — for in-person classes you still want scheduled, attended and billed.
A Zoom integration is optional. The paste-a-link option gives you the gating, the attendance and the billing with no API setup at all.
“Every Tuesday and Thursday at 6pm until December” is one activity, not thirty-two. Each date gets its own session underneath, so you can move or cancel a single class without touching the rest. A cancelled class stays visible with a line through it — a student who remembers “every Tuesday” deserves an explicit answer, not a silent gap.
With Zoom, the finished recording is collected and published into the course automatically. With any other provider, paste the link on the class page — YouTube, a VideoKavach id, or an embed code. Either way it lands attached to the class it came from and the date it happened.
After class the teacher marks who attended, from the class page itself. No separate activity to find, no second system to remember. It writes into Moodle’s standard Attendance register, so your existing reports keep working.
The teacher also records how long the class actually ran, in five-minute steps. A class booked for an hour sometimes runs forty minutes and sometimes ninety. Students can see the recorded duration but not change it — it is what they were charged on, so they are entitled to see it. An administrator can override it.
That single number drives both sides: the family is charged pro-rata and the tutor is paid pro-rata, from the same figure. Nobody is arguing about two different numbers.
Families buy a package for a course — one class, five, ten, or the whole course — and the classes land in their wallet. The balance is on their screen, not in your spreadsheet, and they can top up without asking anyone.
When a teacher marks a student present, the wallet is charged. Nothing else needs to happen: no monthly reconciliation, no invoice run, no chasing.
Group classes work differently, deliberately. In a batch, every enrolled student is charged whether they attended or not, because the class ran and a recording is provided. Attendance is still recorded because parents want to see it, but it is not what decides the money. That matches how batch teaching is actually sold.
• Online — Razorpay, Stripe and PayPal through Moodle’s own payment subsystem. Nothing custom to integrate.
• Manually — show payment instructions and a QR code, the family pays by UPI and submits proof, and someone who can see the bank account approves or refuses it with a reason. Nothing is credited until a human confirms the money arrived.
Both routes are offered side by side and the family picks. You can run the whole thing on UPI if that is what your families use.
A separate ledger, because it means something different — a student’s balance is money you hold, a teacher’s is money you owe. Set an hourly rate per teacher per course; when a class is taught, their wallet is credited pro-rata for the real duration. Every teacher can see their own statement, so they do not have to ask you what they are owed.
A small block puts a student’s own balance on the course page, with a link to top up. A balance nobody looks at may as well not exist, and people do not go looking for a billing screen. Teachers see nothing — money is the administrator’s business. On a course with no packages set up, the block does not render at all.
Upload the transcript your meeting tool produced and ClassLedger can read it. This is restricted to course managers and site administrators, not teachers — a transcript records the students’ words as well as the teacher’s, and handling it is the operator’s job.
• A class summary for students — what was covered, key points, homework set, and questions to check understanding, written in the language the class was taught in. Students see this; they never see the transcript.
• A teaching audit for you — how much of the booked hour did useful work, where the class went quiet and whether that silence was a student solving a problem or nothing happening, how much students spoke, how often the teacher checked understanding.
• Draft homework and quiz questions — drawn from what was actually taught, downloaded as Moodle XML you import into your question bank, so you see what you are accepting before it exists.
• Passages a person should read — contact details being shared, tuition arranged outside the coaching, conduct concerns. Switched off by default and stays off until an administrator turns it on.
It does not show the meeting URL, ever. Not even to teachers on the student-facing page. If that breaks a workflow you rely on, this is the wrong tool.
It does not bill on AI-estimated teaching time. Money follows the duration a human recorded, always. A transcript cannot tell silence-while-working from silence-while-absent, and a student solving a problem quietly is still being taught.
It does not score what it cannot see. No camera checks, no phone usage, no board-writing quality, no marking of written work. Those are not in a text file, and any tool that scores them from one is inventing numbers.
It does not act on a flag. Concern detection produces a quoted passage and a person decides. No pay is withheld, no account suspended, nothing happens automatically. That is a design decision, not a missing feature.
It does not chase, and it does not lock anyone out. A family whose balance runs out is a conversation, not an automatic suspension. Packages do not expire.
Two things are your decision, not the software’s. Tell your teachers — analysing recordings of staff at work is, in most places, unlawful without telling them, and corrosive regardless. It belongs in their contract, not only in a settings page. And decide who reviews a flag before you generate any; a flag with no process behind it is a list nobody reads.
One practical caveat: transcription quality is the ceiling. We tested on a real class taught in Tamil with English technical terms, and the auto-captions mangled most of the numbers. The summary was still useful; the generated quiz questions needed a teacher’s eye on every value. If your classes mix languages, plan to check the output rather than trust it.
ClassLedger is available on ETmantra managed Moodle hosting — we install, configure and maintain it as part of your plan. It is not a separate download, and there is nothing to license or update yourself.
Requires Moodle 4.5 or 5.0, plus the contributed Attendance plugin for the register. Transcript analysis needs TrainMantra; everything else — scheduling, gated join, recordings, attendance, duration, wallets — works with no external service at all.
Start with a 7-day free Moodle trial and we will set it up for you.
No. Zoom is one of three options. You can paste a Teams, Google Meet or any other meeting link and students still get the gated Join button instead of the URL — you get the gating, attendance and billing with no API setup. There is also a no-online-meeting option for in-person classes you want scheduled, attended and billed.
There is no link to share. The meeting URL is never sent to the browser — students click a Join button that points at a server-side script, which checks who they are and whether the join window is open before redirecting. Nothing appears on the page to screenshot or forward.
The teacher records the duration that actually happened, in five-minute steps. The family is charged pro-rata and the tutor is paid pro-rata from that same number, so the two can never disagree. An administrator can override the duration, and both sides are re-priced automatically.
Yes. Alongside Razorpay, Stripe and PayPal through Moodle’s payment subsystem, there is a manual route built for how Indian coaching businesses actually collect: you show payment instructions and a QR code, the family pays and submits proof, and someone who can see the bank account approves it. Nothing is credited until a human confirms the money arrived.
ClassLedger is offered on ETmantra managed Moodle hosting only. We install, configure, update and support it as part of your plan — which also means the Zoom pool, payment gateways and transcript pipeline are set up correctly rather than left to you.
Treat it as a draft, not a verdict. Transcription quality is the ceiling — in a Tamil class with English technical terms, the captions mangled most numbers. Summaries were still useful; generated quiz questions needed checking on every value. Money never follows AI-estimated time, and concern detection ships switched off and only ever surfaces a passage for a person to read.