Elite Tech Corp

Elite Tech Corp
  • Our Products
  • |
  • EXPLORE BUNDLE SOLUTION
×

EdTech: Building a Learning Management System with Catalyst

Managament System With Catalyst-Blog
Facebook
Twitter
LinkedIn

Alright, let me just say this upfront  this wasn’t planned. I didn’t wake up one morning thinking, “I’m going to build a full-blown LMS on Zoho Catalyst.” It kind of… happened.

One small use-case spiraled, then I blinked and suddenly I was neck-deep in course modules, video uploads, progress tracking logic, and trying to duct tape it all together without losing my mind.

So yeah  if you’re looking for a polished walkthrough, this ain’t that. This is the messy, sometimes stupid, definitely-not-best-practices path I took to get a working LMS up and running using Catalyst.

Why Catalyst? (aka why not Firebase or AWS or literally anything else?)

Good question. I’ve built stuff with Firebase. I’ve tried doing it the AWS way (and lived to regret it). Catalyst… well, I’d used it before for a small tool at work, and I remembered it being fast to prototype with. It gave me functions, storage, auth, a datastore  all in one project and I didn’t have to mess with IAM policies or figure out which 7 services I needed just to upload a file.

So I took a gamble and said screw it let’s build this thing in Catalyst and see how far it can go before it breaks.

Spoiler: it didn’t break. But I did. A little.

The Basics: What I needed (and what I didn’t)

I kept the scope lean (at least at the start):

  • Users: students, instructors, admins
  • Courses with multiple modules
  • Quizzes and PDFs/videos per module
  • Progress tracking (who did what and when)
  • A dashboard that didn’t look like a crime scene

Data Modeling: Or how I immediately made things harder for myself

Catalyst uses a NoSQL-like DataStore, which is fine until you realize you actually want relations. I ended up with collections like:

  • Users (with a role field nothing fancy)
  • Courses
  • Modules (linked to courses)
  • UserProgress (this one got messy)

Trade-off: querying things like “show me what John has completed” was easy. But updating that data across modules? Oof.

Auth: Surprisingly not terrible

Catalyst’s built-in auth isn’t fancy, but it works. Email/password with optional magic link login  done. I customized the signup screen just enough that it didn’t look like it came from 2008.

One hiccup: no built-in roles or permissions system. I just tagged users with a role field and handled everything manually in functions. Not ideal, but whatever at least I didn’t have to deal with Firebase’s byzantine rules language.

File Uploads: Cue the pain

Uploading course materials (PDFs, videos) was the first time I screamed into the void. Catalyst File Store is usable, but the JavaScript SDK is… temperamental. I wanted instructors to upload videos, but large files kept choking the client. Ended up ditching the SDK and using fetch with presigned URLs. Later added chunked uploads for videos.

This is where I almost cheated and brought in something like Cloudinary or Mux. But I stayed stubborn and kept it all in Catalyst, because I didn’t want to manage more APIs. Regret? A little. Pride? Also a little.

Business Logic (a.k.a. Functions Everywhere)

Catalyst Functions became the glue. I wrote functions for:

  • Enrolling users
  • Fetching course/module data
  • Submitting quiz answers
  • Updating progress
  • Sending “you’re falling behind” emails

They’re easy to set up. Deploying is fast. But debugging? Not so much. Logs are slow, and local testing is limited.

Frontend: Just plain HTML/JS/CSS

No React. No Vue. I wasn’t trying to win a frontend award  I just wanted buttons that worked. Catalyst Hosting let me dump static files and hit my own backend. Easy.

Downside: no fancy state management, so everything felt a little brittle. But hey, it loaded fast and didn’t break (much).

Reporting: Surprisingly fun?

I didn’t expect to enjoy this part, but it was kind of satisfying seeing actual learning progress data show up.

  • Who’s completed which module
  • Average quiz scores
  • Completion rates per course

When I needed heavier reports, I pushed data to Zoho Analytics via a nightly Catalyst function. Set it and forget it.

What Went Wrong

  • Concurrency. Learned the hard way that Catalyst doesn’t do transactions. Locking saved me barely.
  • Error handling. I didn’t build retries early, and when a progress update failed, it just… didn’t write.
  • File uploads. Took way longer than it should have. SDKs should work better than this.
  • Frontend fatigue. I got lazy near the end and just dumped data on the page.

What Surprised Me

  • Catalyst can actually scale  I had 300+ users enroll in a course and it didn’t blink.
  • Built-in Auth saved time  I would’ve wasted days wiring up something custom.
  • The ecosystem’s kind of nice  When I plugged this into Zoho Creator for content management later, it just worked.

Would I Use It Again?

Honestly? Yeah. Not for massive LMS platforms, but for MVPs or internal tools? 100%. Catalyst has a weird charm. It’s rough in places, sure, but if you play within its limits, you can move stupid fast.

Next time, though, I’ll budget more time for UI. And maybe bring in a proper video platform.

Final Thoughts

That’s it. No big moral. No clean wrap-up. Just me, a weekend, a bunch of Catalyst functions, and a working LMS that I somehow didn’t throw into the sea.

If you’re thinking of building something similar  good luck. Bring snacks. And log everything.

Scroll to Top

Discover more from Elite Tech Corp

Subscribe now to keep reading and get access to the full archive.

Continue reading