EHS Training Platform
A simple, custom platform that replaced a bloated off-the-shelf LMS. Only what they use, nothing they don't.
Session pass · Case study 02Status: Live since May 2026
- Client
- EHS Guru
- Platform
- Web app, any browser
- Stack
- Next.js · Supabase · Zoom
Access: admin · trainer · learner · guestOn our maintenance plan

01 · The brief
Live classes, run on their own platform
- Industry
- Environment, health and safety training
- Service
- Web platform design and development
What EHS Guru needed
EHS Guru is an environment, health and safety company that creates its own courses and teaches them live on Zoom, in batches of nearly 80 learners. Their off-the-shelf learning platform came loaded with features they never used, at a price to match, under someone else’s brand. They wanted only the core, on their own domain, so they decided to build their own and came to us.
The problem with Zoom
The class itself happens inside Zoom, so attendance and recordings have to be rebuilt from Zoom’s notifications, which can arrive late, twice or out of order.
What went live
One platform for admins, trainers, learners and webinar guests: courses, modules and batches, one-click Zoom classes, automatic attendance, every class recorded into a private library, assignments that trainers review, engagement analytics, and free webinars that bring in new learners.
- 4audiences — admin, trainer, learner, guest
- ~80learners in a single live class
- 7integrations — Zoom, email, WhatsApp and more
- Livesince May 2026
02 · The platform
Four audiences, one system
Admins run the schedule, trainers teach, learners join from any browser, and guests come in through free webinars. Each sees only what they need.





03 · Showtime
What happens when a class goes live

- Before
Reminders go out
Email and WhatsApp reminders land at the right time in each learner's time zone.
- T-0
Admin clicks Start
The Zoom meeting is ready, and it shows the trainer's name before they walk in.
- Join
Learners join
From the portal, in any browser. Their attendance starts counting the moment they click Join.
- Live
Every minute counted
Every join and leave is recorded in one step, so a duplicate notification from Zoom can never count twice.
- Pause
Recording stops by accident
It restarts on its own, and every segment of the class is kept, in order.
- After
Class ends, video lands
The best video file is copied into EHS Guru's own storage, published when the admin is ready, and watch time is checked on the server.
04 · The hard parts
The reliability log
Zoom sits at the centre of every class, and it doesn't always behave. These are the problems we designed for before a single paid class ran.
A recording stops mid-class
- Cause
- Trainers pause, or stop by accident, and Zoom splits the recording.
- Fix
- Recording restarts automatically, and every segment is kept in order.
“Who is ‘John’ in Zoom?”
- Cause
- People type their names differently when they join.
- Fix
- Matched by email first, then by name within the enrolled batch.
A class that ends too early
- Cause
- A learner joining early and leaving, or a trainer testing the link.
- Fix
- The class ends only when it really ends.
Watch time that can’t be faked
- Cause
- A learner could skip ahead, or leave a recording playing in a background tab.
- Fix
- Skipped parts never count, the video pauses when the tab is hidden, and the server rejects any stretch it couldn’t have played.
Class videos loading slowly
- Fix
- Moved playback to a fast delivery network, measured before choosing: 0.12 → 0.90 MB/s.
Want a platform
built like this?
Start with a free 20-minute call about your idea.
Book a free 20-minute call05 · Judgement
What we left out, on purpose
- Cut 01
Payments, kept offline
EHS Guru’s choice. It kept the build on teaching, not billing.
- Cut 02
Waiting for WhatsApp
Email went live first. WhatsApp followed once Meta approved the templates, so launch was never held.
- Cut 03
No mobile app
The platform works in any browser on any device. A native app wasn’t necessary for launch — and would have doubled the build time for the same result.
06 · Result
May 2026
- ClassesRuns EHS Guru's paid live classes, in batches of nearly 80.
- BrandOn their own domain, under their own name.
- After launchStill on our monthly maintenance plan.
- EfficiencyOne-click classes, automatic attendance, and all recordings kept.
Under the hood
How it works, in plain words, with the technical name underneath.
Under the hood
How it works, in plain words, with the technical name underneath.
- Opens in any browserBrowser
- The platform itselfNext.js on Vercel
- Everything the screens ask for52 API routes
- Learners, batches, attendance, videosSupabase, 27 tables
- Zoom reports who joined and leftZoom events
- Every message kept on recordWebhook log
- Minutes counted onceAttendance in one step
- The best video file chosenRecording picker
- Kept in EHS Guru's own storageCloudflare R2
- Every minute counted once. When Zoom repeats a message or sends it late, attendance still adds up exactly.
- Recordings copied into EHS Guru's own storage. Their video library doesn't depend on Zoom's.
- Every Zoom event logged. Any class's full history can be traced.
- Who can see what is checked three times. At the door, on every page, and in the login itself.
- Quality: automated tests on the Zoom and recording logic, an alert whenever something breaks, and limits that stop repeated login attempts.
07 · Conclusion
What this build says about yours
End of showOff air · still running
- i.
We stay after launch
EHS Guru is still on our maintenance plan, and the platform keeps improving alongside real classes. Our work doesn’t stop when the first version goes live.
- ii.
We make the tools you already use dependable
Zoom, email and WhatsApp stayed. We built the platform that makes them work together reliably.
- iii.
We measure before we choose
Video playback was tested before choosing the implementation — resulting in 7.5× faster delivery.
The same goes for your product: a clear scope, a new working build every week, and code you own.
