7 min read
·By The Arythmatic Journal
The Hidden Tax of Bolting Zoom Onto Your Course Platform
Pasting a Zoom link into your lesson looks free. It is not. Here is the hidden tax — someone else's brand, manual recording uploads, a fifth bill, attendance that never syncs — and what changes when live video is native to your platform.
The hidden tax of bolting Zoom onto your course platform
Adding live classes to a course platform usually starts the same way: paste a Zoom link into the lesson. It looks free. It is not. What you have actually done is bolt a second product onto your first one — and the seam between them quietly taxes every class you run. The tax does not show up on an invoice. It shows up as a learner staring at someone else's logo, a recording you have to find and re-upload by hand the next morning, a fifth subscription nobody remembers approving, and an attendance list that never makes it back into the course. None of it is dramatic. All of it adds up. Here is where the bolted-on-Zoom approach leaks, and what changes when the live layer is native to the platform instead of borrowed from one. In one line: A pasted-in Zoom link means your class wears someone else's brand, records to a cloud you do not own, and never files anything back into the lesson. Arythmatic Meetings is the suite's own live layer — HD rooms on the AWS Chime SDK, wired into your courses — that record, transcribe, and file themselves back into the lesson, under your brand and your domain.
The five-tool tax
A course platform that wants to go live rarely stops at one add-on. The full live stack usually looks like this: • Live classes: Zoom / Microsoft Teams / Google Meet • Webinars: Zoom Webinars / ON24 / Livestorm • Team & class chat: Slack / Teams DMs • Recording & transcription: Panopto / Otter / Loom • Scheduling: Calendly + Google / Outlook Calendar Five logins. Five bills. And five brands — none of them yours — sitting between your learner and your course. The recording lands in a vendor's cloud, the chat dies when the call ends, and the one fact your course actually needs — who showed up — stays trapped in a different tool's dashboard.
Where the tax actually lands
The cost is rarely one big line item. It leaks at the joins: • The off-brand class. Your learner clicks out of your branded course into a meeting that carries another company's logo, header, and waiting screen. The most human moment of the course — a live class — is the one place your brand disappears. • The manual upload. The session ends, the recording renders to someone else's cloud, and now a person has to download it, find the right lesson, and re-upload it. Every class, forever. Skip it once and the recording is effectively lost. • The fifth bill. Live video becomes its own vendor relationship — its own renewal, its own seat math, its own price increase you find out about at renewal time. • Attendance that never syncs. The meeting tool knows who attended. The course does not. Completion, follow-up, and proof-of-attendance all hinge on a copy-paste that usually never happens. Fix the seam and you fix the leak. That is the entire case for a live layer that belongs to the platform.
What "native" actually means
Native is an overused word, so here is the concrete version. When live video is part of the platform rather than bolted onto it, three things stop being your job. The room creates itself. When an LMS lesson goes live, Arythmatic auto-creates the meeting for it and maps the whole chain — course to section to lesson to live session to room — so there is no separate "go set up the Zoom" step and no link to paste. The recording files itself. When the class ends, the finished recording webhooks back into its own lesson (with retry), transcript attached, so the class recording appears exactly where it belongs without anyone uploading anything. The brand never drops. Every room runs on a per-tenant subdomain — {slug}.meetings.arythmatic.cloud — or your own custom domain with DNS-TXT verification and SSL-expiry tracking, themed with your logos and colors. And when a learner turns their camera off, they do not collapse into a grey rectangle: Arythmatic renders a canvas avatar tile in your brand color and composites it back into Chime, so your brand appears in both the live grid and the cloud recording — the pixels most tools leave generic. That is the difference between embedding a meeting and owning one.
How we built it
The interesting part is underneath. Making live video feel native took a deliberate set of engineering choices, and they are worth showing because they are the proof the product is real. Chime, not a Zoom embed — and not a server room. We did not want to ship a re-skinned Zoom embed, and we did not want to babysit media servers. We evaluated self-hosting on Jitsi and Docker and chose the managed AWS Chime SDK (amazon-chime-sdk-js, us-east-1) instead: a finished, brandable product on managed infrastructure — with active-speaker detection, per-attendee signal-strength indicators, and a data channel we drive chat and hand-raise over — not an SDK a customer has to assemble. A recording pipeline that heals itself. Chime's media capture writes raw chunks to S3; an external FFMPEG/HLS service stitches them into adaptive HLS at 720p and 480p behind CloudFront. The pipeline paginates 2,000+ raw chunks per recording and waits for clip stability before it starts, so it never processes a half-written file. AWS Transcribe attaches a time-coded transcript, with language and word count, to every recording. And because pipelines fail, a Celery job sweeps stuck or orphaned recordings every hour and reprocesses them — nobody files a support ticket for a recording that is quietly rescued on its own. Recurrence that survives daylight saving. "9 AM every weekday" is a deceptively hard promise. We expand RFC 5545 (iCalendar) recurrence in the host's local timezone, so a weekly class stays at 9 AM wall-clock even when the clocks change — instead of silently drifting an hour twice a year, the way naive UTC scheduling does. Invitations, email reminders, and an ICS export ride along with it. Cost engineered on purpose. A live platform you intend to resell has to have predictable unit economics, so the cost controls live in the code, not on the pricing page. Empty meetings auto-end every 30 seconds. Video is capped at HD rather than full-HD — an internal note pegs the media-pipeline saving at around 20%. Every meeting carries cost-attribution tags per tenant, and raw chunks are cleaned up once the HLS render exists. Forensic by default. Every recording view, download, and share is logged with the user, IP, and user-agent, visible to the owner and admin. Downloads use presigned, time-limited URLs (60 minutes by default) with configurable retention and GDPR/SOC2 audit tags — so "who watched the class recording" is a question with an answer, not a shrug. If you want the shape of the surface underneath all of that: it runs to roughly 90 API view sets and 124 custom action endpoints, documented in OpenAPI and kept honest by ten Celery-beat jobs. This is a product, not a wrapper.
Built to run as your own product
Because one plan model governs the whole surface — 14 metered limits and 15 feature flags — Meetings is not just brandable, it is resellable. Stripe checkout, a billing portal, and a change-plan proration preview are built in, with a billing wall that engages on lapse. Roles map automatically from the LMS — Admin to admin, Instructor to host, Learner to member — so the people already in your course arrive in the room with the right controls. You are not integrating a meeting vendor; you are running a meeting product that happens to be yours.
Where it's headed
Two capabilities are built in the backend and arriving in the dashboard, and it is worth being precise about their status. Webinars are rolling out. Registration with UTM tracking and custom fields, live Q&A with upvotes, polls (multiple-choice, rating-scale, and word-cloud), panelists with scoped permissions, and a registration-to-attendance funnel are all built in the backend and computed hourly. The dedicated dashboard UI is in active rollout — arriving, not shipped — so we are not going to call it GA today. The developer platform is API-first for now. Scoped API keys (SHA-256 hashed, 18 scopes, IP and origin allow-lists, rotation) and HMAC-signed outbound webhooks (exponential-backoff retry across five attempts, auto-disable after ten consecutive failures, eleven lifecycle events) are live in the backend today; the management dashboard for them is still being built. If you are an integrator, you can drive meetings and subscribe to their lifecycle now — through the API, not a UI.
The switch, by the numbers
The structural part is simple, and real: five tools become one login and one bill. The outcomes teams model on top of it — recordings ready in minutes instead of after a morning upload, the manual re-upload step at zero, and live-video spend down on the order of 30% on cost-engineered infrastructure — are representative, not audited.
One brand, on every class
Bolting Zoom onto your course platform is not free just because the link is. The tax is the seam: the off-brand room, the upload you keep forgetting, the fifth bill, the attendance that never syncs. A native live layer closes that seam — the room creates itself from the lesson, the recording files itself back in with a transcript, and your brand stays on every pixel, even when the camera is off. That is the difference between embedding someone else's meeting and running your own.
The Arythmatic Journal
Written by the Arythmatic product and education team — learning technologists, instructional designers, and engineers building the next generation of learning infrastructure.