Building A LMS: What I Have Accomplished In Two Years

Creating a CMS is no easy task. There are features, design, security and many other things to take care of.

My Production Site (Powered by CourseLit LMS)

Technical Achievements

Admin Dashboard

The front-end app is a monolith which means that both the non-admin area and the admin area are the parts of the same Next.js app. Using the admin area, one can customize almost every aspect of her teaching site.

Admin Dashboard Of CourseLit


CourseLit uses Material-UI. Hence I created a way to load custom themes (based on Material-UI). I even created a separate repo to contain all the themes. One can copy/paste themes into CourseLit from there.

Rich Text Editor/Viewer

I spent a significant amount of time creating a rich text editor and viewer for CourseLit which makes it really easy for the users to create content. As of now, one can embed code snippets, Tweets, YouTube videos, images, links etc. in the text editor and it will be rendered appropriately to the end user.


I have dabbled with a lot of ways of installing CourseLit on a Linux machine. I first experimented with Ansible. I was able to create an installer using Ansible which downloads the dependencies, installs docker and then creates containers for the app and brings it up. It worked really well. But there was this small little problem!


A CMS allows its users to customize its appearance to their own wills. This means they would want to re-organize section(s) of the website as per their requirements.

The Layout Section in CourseLit’s Admin Dashboard


I wanted to build a Wordpress like system where users could install any plugin they liked by a simple drag-and-drop operation. Unfortunately, JavaScript does not work like PHP and things need to be compiled beforehand.

Official widgets in CourseLit

Role-Based Access Control (RBAC)

CourseLit has three types of user privileges.

  • The Super Admin
  • The Creator
  • The normal user

Regular CMS Stuff

Since CourseLit is a LMS, one can easily author courses, manage site users, manage media and change various texts like Site title etc.

Marketing Achievements

The Product Landing Page

I created the landing page using HTML and TailwindCSS. I am using GitHub pages to host the landing page of CourseLit.

A dollar not spent is a dollar saved. But I pay in Rupees. And you still got the point, right?

CourseLit’s Current Landing Page

The Documentation

I am using GitBook for hosting the documentation of the product. Again, I am on a free plan obviously.

A YouTube Series

I have a YouTube series where I document the journey of creating my own LMS. CourseLit gets a few eyeballs every now and then from this series. The series is not as hit as I imagined it to be but I still find it interesting to share my journey with others.

Adding CourseLit To The Public Lists

There are many awesome-tech lists on GitHub. I try to hunt the ones down where CourseLit can fit in. As of now, I have managed to get CourseLit listed on the awesome-nextjs list. Check it out here.

  1. A YouTube series of tutorials detailing how to use the software.
  2. Cold emailing the teachers, institutions and content creators who are currently using sites like Teachable, Thinkific or their own make-shift websites for running their own courses.

“SaaS”ifying CourseLit

In its current form, CourseLit can be installed on a single Linux machine. It configures everything it needs. But it is a standalone piece of software. You can only have one installation of the software on a server and it serves only one site.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Rajat Saxena

Rajat Saxena

Software Engineer; Builds Internet Based Businesses & Apps; Solopreneur