diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index 45de6eb..60e72da 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -54,8 +54,5 @@
         "stock/dashboard/item_dashboard.html",
         "stock/dashboard/item_dashboard_list.html",
         "stock/dashboard/item_dashboard.js"
-    ],
-    "js/lms.min.js": [
-        "public/js/education/lms/lms.js"
     ]
 }
diff --git a/erpnext/public/js/education/lms/call.js b/erpnext/public/js/education/lms/call.js
deleted file mode 100644
index 4edcaaa..0000000
--- a/erpnext/public/js/education/lms/call.js
+++ /dev/null
@@ -1,15 +0,0 @@
-frappe.ready(() => {
-	frappe.provide('lms');
-
-	lms.call = (method, args) => {
-		const method_path = 'erpnext.www.lms_legacy.' + method;
-		return new Promise((resolve, reject) => {
-			return frappe.call({
-				method: method_path,
-				args,
-			})
-			.then(r => resolve(r.message))
-			.fail(reject);
-		});
-	};
-});
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/Article.vue b/erpnext/public/js/education/lms/components/Article.vue
deleted file mode 100644
index eab1424..0000000
--- a/erpnext/public/js/education/lms/components/Article.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-<template>
-<div>
-    <ContentTitle :title="contentData.title" :author="contentData.author" :publishDate="contentData.publish_date">
-        <slot></slot>
-    </ContentTitle>
-    <section class="article-content-section">
-        <div>
-            <div class="content" v-html="contentData.content"></div>
-            <div class="text-right">
-            </div>
-            <div class="mt-3 text-right">
-                <a class="text-muted" href="/report"><i class="octicon octicon-issue-opened" title="Report"></i> Report a
-                    Mistake</a>
-            </div>
-        </div>
-    </section>
-</div>
-</template>
-<script>
-import ContentTitle from './ContentTitle.vue'
-export default {
-	props: ['content', 'type'],
-	name: 'Article',
-	data() {
-    	return {
-    		contentData: ''
-    	}
-    },
-    mounted() {
-    	this.getContent().then(data => this.contentData = data);
-    },
-    methods: {
-        getContent() {
-            return lms.call('get_content', {
-                content_type: this.type,
-                content: this.content
-            })
-        }
-    },
-    components: {
-        ContentTitle
-    }
-};
-</script>
diff --git a/erpnext/public/js/education/lms/components/Breadcrumb.vue b/erpnext/public/js/education/lms/components/Breadcrumb.vue
deleted file mode 100644
index 1b617a3..0000000
--- a/erpnext/public/js/education/lms/components/Breadcrumb.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-<template>
-	<div>
-		<nav aria-label="breadcrumb">
-			<ol class="breadcrumb">
-				<li v-for="(route, index) in routeData" class="breadcrumb-item active" aria-current="page">
-					<router-link v-if="index != routeData.length - 1" :to="route.route">
-						{{ route.label }}
-					</router-link>
-					<span v-else>{{ route.label }}</span>
-				</li>
-			</ol>
-		</nav>
-	</div>
-</template>
-<script type="text/javascript">
-	export default {
-		name: "Breadcrumb",
-		data() {
-			return {
-				routeName: this.$route.name,
-				routeParams: this.$route.params,
-				routeData: [{
-					label: "All Programs",
-					route: "/List/Program"
-				}]
-			}
-		},
-		mounted() {
-			this.buildBreadcrumb()
-		},
-		methods: {
-			buildBreadcrumb() {
-				if(this.routeName == 'program') {
-					return
-				}
-				if(this.routeName == 'course') {
-					let routeObject = {
-						label: this.routeParams.program_name,
-						route: `/Program/${this.routeParams.program_name}`
-					}
-					this.routeData.push(routeObject)
-				}
-				if(this.routeName == 'content') {
-					this.routeData.push({
-						label: this.routeParams.program_name,
-						route: `/Program/${this.routeParams.program_name}`
-					})
-					this.routeData.push({
-						label: this.routeParams.course_name,
-						route: `/Program/${this.routeParams.program_name}/${this.routeParams.course_name}`
-					})
-				}
-			}
-		}
-	};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/Button.vue b/erpnext/public/js/education/lms/components/Button.vue
deleted file mode 100644
index 4d8df4b..0000000
--- a/erpnext/public/js/education/lms/components/Button.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-	<button :class="classList" v-on="$listeners" v-bind="$attrs" @click="goToRoute">
-		<slot></slot>
-	</button>
-</template>
-<script>
-export default {
-	name: 'AButton',
-	props: ['type', 'size', 'route'],
-	computed: {
-		classList() {
-			return [
-				'btn',
-				'btn-' + this.type,
-				'btn-' + this.size
-			]
-		}
-	},
-	methods: {
-		goToRoute() {
-			this.$router.push(this.route);
-		}
-	}
-}
-</script>
diff --git a/erpnext/public/js/education/lms/components/CardList.vue b/erpnext/public/js/education/lms/components/CardList.vue
deleted file mode 100644
index 10f6af0..0000000
--- a/erpnext/public/js/education/lms/components/CardList.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-	<div class="featured-products-section py-3">
-		<h5 class='featured-heading' v-html="title"></h5>
-		<div class="featured-products row">
-			<!-- <p class='lead text-center' v-html="description"></p> -->
-			<slot name="card-list-slot"></slot>
-		</div>
-		<div class='mt-4 text-center'>
-			<slot name="list-bottom"></slot>
-		</div>
-	</div>
-</template>
-<script>
-export default {
-    props:['title', 'description'],
-    name: "CardList",
-};
-</script>
-<style scoped>
-
-.featured-heading {
-    text-transform: uppercase;
-    letter-spacing: 0.5px;
-    font-size: 12px;
-    font-weight: 500;
-}
-
-</style>
diff --git a/erpnext/public/js/education/lms/components/ContentNavigation.vue b/erpnext/public/js/education/lms/components/ContentNavigation.vue
deleted file mode 100644
index a07c0f8..0000000
--- a/erpnext/public/js/education/lms/components/ContentNavigation.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-<template>
-	<div class="nav-buttons">
-		<button class='btn btn-outline-secondary' @click="$router.go(-1)">Back</button>
-		<button v-if="nextContent" class='btn btn-primary' @click="goNext()">Next</button>
-		<button v-else class='btn btn-primary' @click="finish()">Finish Topic</button>
-	</div>
-</template>
-
-<script>
-export default {
-	props: ['nextContent', 'nextContentType'],
-	name: 'ContentNavigation',
-	methods: {
-		addActivity() {
-			if(this.$route.params.type != "Quiz"){
-				console.log("Adding Activity")
-				lms.call("add_activity",
-					{
-						course: this.$route.params.course_name,
-						content_type: this.$route.params.type,
-						content: this.$route.params.content,
-					}
-				)
-			}
-		},
-		goNext() {
-			this.addActivity()
-			this.$router.push({ name: 'content', params: { course: this.$route.params.course_name, type:this.nextContentType, content:this.nextContent }})
-		},
-		finish() {
-			this.addActivity()
-			this.$router.push({ name: 'course', params: { program_name: this.$route.params.program_name, course_name: this.$route.params.course_name}})
-			lms.trigger('course-completed', course_name);
-		}
-	}
-};
-</script>
-
-<style lang="css" scoped>
-</style>
diff --git a/erpnext/public/js/education/lms/components/ContentTitle.vue b/erpnext/public/js/education/lms/components/ContentTitle.vue
deleted file mode 100644
index a488ab8..0000000
--- a/erpnext/public/js/education/lms/components/ContentTitle.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-<template>
-    <section class='article-top-section video-section-bg'>
-        <div>
-            <div class="row">
-                <div class="col-md-8">
-                    <h2>{{ title }}</h2>
-                    <span v-if="typeof author !== 'undefined' || author !== null" class="text-muted">
-                        <span v-if="publishDate">Published on {{ publishDate }}</span>
-                        <span v-if="author">— {{ author }}</span>
-                    </span>
-                </div>
-                <div class="col-md-4 text-right">
-                    <slot></slot>
-                </div>
-            </div>
-            <hr>
-        </div>
-    </section>
-</template>
-
-<script>
-export default {
-    props: ['title', 'publishDate', 'author'],
-    name: 'ContentTitle',
-};
-</script>
-
-<style lang="css" scoped>
-</style>
diff --git a/erpnext/public/js/education/lms/components/CourseCard.vue b/erpnext/public/js/education/lms/components/CourseCard.vue
deleted file mode 100644
index 48a9f59..0000000
--- a/erpnext/public/js/education/lms/components/CourseCard.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-<template>
-    <div class="py-3 col-md-4 col-sm-12">
-        <div class="card h-100">
-            <div class="card-hero-img" v-if="course.hero_image" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>
-            <div v-else class="card-image-wrapper">
-                <div class="image-body">{{ course.course_name }}</div>
-            </div>
-            <div class='card-body'>
-                <h5 class="card-title">{{ course.course_name }}</h5>
-                <span class="course-list text-muted" id="getting-started">
-                    {{ course.course_intro.substring(0,120) }}
-                </span>
-            </div>
-            <div class='p-3' style="display: flex; justify-content: space-between;">
-                <div>
-                    <span v-if="complete"><i class="mr-2 text-success fa fa-check-circle" aria-hidden="true"></i>Course Complete</span>
-                </div>
-                <div class='text-right'>
-                    <a-button
-                        :type="'primary'"
-                        size="sm"
-                        :route="courseRoute"
-                    >
-                        {{ buttonName }}
-                    </a-button>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-import AButton from './Button.vue';
-
-export default {
-    props: ['course', 'program_name'],
-    name: "CourseCard",
-    components: {
-        AButton
-    },
-    data() {
-        return {
-            courseDetails: {},
-        }
-    },
-    mounted() {
-        if(lms.store.checkLogin()) this.getCourseDetails().then(data => this.courseDetails = data)
-    },
-    computed: {
-        courseRoute() {
-            return `${this.program_name}/${this.course.name}`
-        },
-        complete() {
-            if(lms.store.checkProgramEnrollment(this.program_name)){
-                if (this.courseDetails.flag === "Completed" ) {
-                    return true
-                }
-                else {
-                    return false
-                }
-            }
-            else {
-                return false
-            }
-        },
-        isLogin() {
-            return lms.store.checkLogin()
-        },
-        buttonName() {
-            if(lms.store.checkProgramEnrollment(this.program_name)){
-                return "Start Course"
-            }
-            else {
-                return "Explore"
-            }
-        }
-    },
-    methods: {
-        getCourseDetails() {
-			return lms.call('get_student_course_details', {
-                    course_name: this.course.name,
-                    program_name: this.program_name
-				})
-        },
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/Navbar.vue b/erpnext/public/js/education/lms/components/Navbar.vue
deleted file mode 100644
index f3f3ce4..0000000
--- a/erpnext/public/js/education/lms/components/Navbar.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-<template>
-<nav class="navbar navbar-light bg-white navbar-expand-lg sticky-top shadow-sm">
-    <div class="container">
-        <a class="navbar-brand" href="/lms">
-            <span>{{ portal.title }}</span>
-        </a>
-        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
-            <span class="navbar-toggler-icon"></span>
-        </button>
-
-        <div class="collapse navbar-collapse" id="navbarSupportedContent">
-            <ul class="navbar-nav mr-auto">
-
-                <li class="nav-item">
-                    <a class="nav-link" href="lms#/List/Program">
-                        All Programs
-                    </a>
-                </li>
-
-                <li class="nav-item">
-                    <a class="nav-link" href="/lms#/Profile">
-                        Profile
-                    </a>
-                </li>
-            </ul>
-            <ul class="navbar-nav ml-auto">
-                <!-- post login tools -->
-                <li v-if="isLogin" class="nav-item dropdown logged-in" id="website-post-login" data-label="website-post-login">
-                    <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
-                        <span class="user-image-wrapper">
-                            <span class="avatar avatar-small" :title="fullName">
-                                    <span class="avatar-frame" :style="avatarStyle" :title="fullName"></span>
-                            </span>
-                        </span>
-                        <span class="full-name">{{ fullName }}</span>
-                        <b class="caret"></b>
-                    </a>
-                    <ul class="dropdown-menu dropdown-menu-right" role="menu">
-                        <a class="dropdown-item" href="/me" rel="nofollow"> My Account </a>
-                        <a class="dropdown-item" href="/?cmd=web_logout" rel="nofollow"> Logout </a>
-                    </ul>
-                </li>
-
-                <li v-else class="nav-item">
-                    <a class="nav-link btn-login-area" href="/login">Login</a>
-                </li>
-            </ul>
-        </div>
-    </div>
-</nav>
-</template>
-<script>
-export default {
-    name: "Home",
-    data() {
-    	return{
-            portal: {},
-            avatar: frappe.user_image,
-            fullName: frappe.full_name,
-            isLogin: frappe.is_user_logged_in()
-    	}
-    },
-	mounted() {
-        this.getPortalDetails().then(data => this.portal = data);
-    },
-    methods: {
-        getPortalDetails() {
-            return lms.call("get_portal_details")
-        }
-    },
-    computed: {
-		avatarStyle() {
-			return `background-image: url("${this.avatar}")`
-        },
-        // isLogin() {
-        //     return frappe.is_user_logged_in()
-        // },
-	}
-};
-</script>
-<style scoped>
-a {
-	text-decoration: none;
-}
-</style>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/ProfileInfo.vue b/erpnext/public/js/education/lms/components/ProfileInfo.vue
deleted file mode 100644
index 5bad713..0000000
--- a/erpnext/public/js/education/lms/components/ProfileInfo.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-	<div class="py-5">
-		<div class="row">
-			<div class="col-sm-12">
-				<div>
-					<h3>{{ fullName }}</h3>
-					<ul>
-						<li class="row">
-							<div class="col-md-3 col-sm-4 pr-0 text-muted">Email:</div>
-							<div class="col-md-9 col-sm-8">{{ email }}</div>
-						</li>
-						<li v-if="joiningDate" class="row">
-							<div class="col-md-3 col-sm-4 pr-0 text-muted">Date of Joining:</div>
-							<div class="col-md-9 col-sm-8">{{ joiningDate }}</div>
-						</li>
-						<li class="row">
-							<div class="col-md-3 col-sm-4 pr-0 text-muted">Programs Enrolled:</div>
-							<div class="col-md-9 col-sm-8">
-								<ul v-if="enrolledPrograms">
-									<li v-for="program in enrolledPrograms" :key="program">{{ program }}</li>
-								</ul>
-								<span v-else>None</span>
-							</div>
-						</li>
-					</ul>
-				</div>
-				<a href="/update-profile" class="edit-button text-muted">Edit Profile</a>
-			</div>
-		</div>
-		<div ></div>
-	</div>
-</template>
-<script>
-
-export default {
-	props: ['enrolledPrograms'],
-	name: "ProfileInfo",
-	data() {
-		return {
-			avatar: frappe.user_image,
-			fullName: frappe.full_name,
-			abbr: frappe.get_abbr(frappe.get_cookie("full_name")),
-			email: frappe.session.user,
-			joiningDate: ''
-		}
-	},
-	mounted(){
-		this.getJoiningDate().then(data => {
-			if(data) {
-				this.joiningDate = lms.moment(String(data)).format('D MMMM YYYY')
-			}
-		})
-	},
-	computed: {
-		avatarStyle() {
-			return `background-image: url("${this.avatar}")`
-		},
-	},
-	methods: {
-		getJoiningDate() {
-			return lms.call("get_joining_date")
-		}
-	}
-};
-</script>
-<style scoped>
-	.edit-button {
-		position: absolute;
-		top: 0;
-		right: 0;
-	}
-
-	.standard-image {
-		font-size: 72px;
-		border-radius: 6px;
-	}
-
-	ul {
-		list-style-type: none;
-		padding: 0;
-		margin: 0
-	}
-</style>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/ProgramCard.vue b/erpnext/public/js/education/lms/components/ProgramCard.vue
deleted file mode 100644
index 15a9fcd..0000000
--- a/erpnext/public/js/education/lms/components/ProgramCard.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-<template>
-<div class='py-3 col-md-4 col-sm-12'>
-    <div class="card h-100">
-        <router-link :to="'/Program/' + program.name">
-            <div class="card-hero-img" v-if="program.hero_image" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>
-            <div v-else class="card-image-wrapper text-center">
-                <div class="image-body">{{ program.program_name }}</div>
-            </div>
-            <div class='card-body'>
-                <h5 class='card-title'>{{ program.program_name }}</h5>
-                <div class="text-muted">{{ program.description.substring(0,120) }}...</div>
-            </div>
-        </router-link>
-        <div class='text-right p-3'>
-            <button v-if="program.intro_video" class='btn btn-light btn-sm' data-toggle="modal" data-target="#videoModal">Watch Intro</button>
-            <a-button v-if="enrolled" type="dark" size="sm" :route="programPageRoute">
-                {{ buttonName }}
-            </a-button>
-            <button v-else-if="isLogin" class='btn btn-dark btn-sm' @click="enroll()">{{ enrollButton }}</button>
-            <a v-else class='btn btn-secondary btn-sm' href="/login#signup">Sign Up</a>
-        </div>
-        <VideoModal v-if="program.intro_video" :title="program.program_name" :video="program.intro_video"/>
-    </div>
-</div>
-</template>
-<script>
-import AButton from './Button.vue';
-import VideoModal from './VideoModal.vue';
-export default {
-    props: ['program', 'enrolled'],
-    name: "ProgramCard",
-    data() {
-    	return {
-            isLogin: frappe.is_user_logged_in(),
-            enrollButton: 'Enroll Now',
-            programRoute: { name: 'program', params: { program_name: this.program.name }},
-            image: "'" + this.program.hero_image + "'"
-    	};
-    },
-    methods: {
-        enroll() {
-            this.enrollButton = 'Enrolling...'
-            lms.call('enroll_in_program', {
-                program_name: this.program.name,
-            }).then(data => {
-                lms.store.updateEnrolledPrograms()
-                this.$router.push(this.programRoute)
-            })
-        }
-    },
-    computed: {
-        buttonName() {
-            if(this.enrolled){
-                return "Start Program"
-            }
-            else {
-                return "Enroll"
-            }
-        },
-        programPageRoute() {
-            return this.programRoute
-        },
-        isEnrolled() {
-            return lms.store.enrolledPrograms.includes(this.program.name)
-        }
-    },
-    components: {
-        AButton,
-        VideoModal
-    }
-};
-</script>
-
-<style lang="css" scoped>
-    a {
-        text-decoration: none;
-        color: black;
-    }
-    a.btn-secondary {
-        color: white !important;
-    }
-</style>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/ProgressCard.vue b/erpnext/public/js/education/lms/components/ProgressCard.vue
deleted file mode 100644
index 66b61f6..0000000
--- a/erpnext/public/js/education/lms/components/ProgressCard.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<template>
-    <div class='py-3 col-md-4 col-sm-12'>
-        <div class="card h-100">
-            <div class='card-body'>
-                <router-link :to="'/Program/' + programData.name">
-                    <h5 class='card-title'>{{ programData.program }}</h5>
-                </router-link>
-                <span class="course-list text-muted" id="getting-started">
-                    Courses
-                    <ul class="mb-0 mt-1 list-unstyled" style="padding-left: 1.5em;">
-                        <li v-for="item in programData.progress" :key="item.name">
-                            <span v-if="item.is_complete"><i class="text-success fa fa-check-circle" aria-hidden="true"></i></span>
-                            <span v-else><i class="text-secondary fa fa-circle-o" aria-hidden="true"></i></span>
-                            {{ item.course_name }}
-                        </li>
-                    </ul>
-                </span>
-            </div>
-            <div class='p-3' style="display: flex; justify-content: space-between;">
-                <div></div>
-                <div class='text-right'>
-                    <a-button
-                        :type="buttonType"
-                        size="sm btn-block"
-                        :route="programRoute"
-                    >
-                        {{ buttonName }}
-                    </a-button>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-<script>
-import AButton from './Button.vue';
-export default {
-    props: ['program'],
-    name: "ProgressCard",
-    data() {
-    	return {
-            programData: {}
-    	};
-    },
-    mounted() {
-        this.getProgramProgress().then(data => this.programData = data)
-    },
-    methods: {
-       getProgramProgress() {
-			return lms.call('get_program_progress', {
-                    program_name: this.program
-				})
-        },
-    },
-    computed: {
-        programRoute() {
-            return {name: 'program', params: {program_name: this.program}}
-        },
-        buttonType() {
-            if (this.programData.percentage == 100 ){
-                return "success"
-            }
-            else if (this.programData.percentage == "0" ) {
-                return "secondary"
-            }
-            else {
-                return "info"
-            }
-        },
-        buttonName() {
-            if (this.programData.percentage == 100 ){
-                return "Program Complete"
-            }
-            else {
-                return `${this.programData.percentage}% Completed`
-            }
-        }
-    },
-    components: {
-        AButton
-    },
-};
-</script>
-<style scoped>
-
-	a {
-		text-decoration: none;
-		color: black;
-	}
-</style>
diff --git a/erpnext/public/js/education/lms/components/Quiz.vue b/erpnext/public/js/education/lms/components/Quiz.vue
deleted file mode 100644
index 0a6199a..0000000
--- a/erpnext/public/js/education/lms/components/Quiz.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-	<section class="quiz-section">
-    <div>
-        <div class="row">
-            <div class="col-md-8">
-                <h2>{{ content }}</h2>
-            </div>
-        </div>
-        <div class="content">
-            <hr>
-            <div id="quiz" :name="content">
-                <div id="quiz-body">
-					<component v-for="question in quizData" :key="question.name" v-bind:is="question.type" :question="question" @updateResponse="updateResponse" :isDisabled="isDisabled"></component>
-                </div>
-                <div class="mt-3">
-                    <div>
-                        <div v-if="isDisabled || submitted" id="post-quiz-actions" class="row">
-                            <div class="col-md-8 text-left">
-                                <span v-html="message"></span>
-                            </div>
-                            <div class="col-md-4 text-right">
-                                <slot></slot>
-                            </div>
-                        </div>
-                        <div v-else id="quiz-actions" class="text-right">
-                            <button class='btn btn-outline-secondary' type="reset" :disabled="isDisabled">Reset</button>
-                            <button class='btn btn-primary' @click="submitQuiz" type="button" :disabled="isDisabled">Submit</button>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="mt-3 text-right">
-            <a class="text-muted" href="/report"><i class="octicon octicon-issue-opened" title="Report"></i> Report a
-                Mistake</a>
-        </div>
-    </div>
-</section>
-</template>
-
-<script>
-import QuizSingleChoice from "./Quiz/QuizSingleChoice.vue"
-import QuizMultipleChoice from "./Quiz/QuizMultipleChoice.vue"
-
-export default {
-	props: ['content', 'type'],
-	name: 'Quiz',
-	data() {
-    	return {
-    		quizData: '',
-    		quizResponse: {},
-            score: '',
-            submitted: false,
-            isDisabled: false,
-            quizStatus: {},
-    	}
-    },
-    mounted() {
-    	this.getQuizWithoutAnswers().then(data => {
-    		this.quizData = data.quizData
-            this.quizStatus = data.status
-            this.isDisabled = data.status.is_complete
-    	});
-    },
-    components: {
-    	'SingleChoice': QuizSingleChoice,
-        'MultipleChoice': QuizMultipleChoice
-    },
-    methods: {
-        getQuizWithoutAnswers() {
-            return lms.call("get_quiz_without_answers",
-                {
-                    quiz_name: this.content,
-                    course_name: this.$route.params.course_name
-                }
-    	    )
-        },
-		updateResponse(res) {
-            this.quizResponse[res.question] = res.option
-		},
-		submitQuiz() {
-			lms.call("evaluate_quiz",
-				{
-					quiz_response: this.quizResponse,
-                    quiz_name: this.content,
-                    course: this.$route.params.course_name
-				}
-            ).then(data => {
-                this.score = data
-                this.submitted = true
-                this.quizResponse = null
-			});
-		}
-	},
-    computed: {
-      currentComponent: function() {
-        if(this.quizData.type === "MultipleChoice") {
-            return 'QuizMultipleChoice'
-        }
-        else {
-            return 'QuizSingleChoice'
-        }
-      },
-      message: function() {
-        if(this.submitted) {
-            return '<h3>Your Score: <span id="result">'+ this.score +'</span></h3>'
-        }
-        let message = '<h4>You have exhausted all attempts for this quiz.</h4>'
-        if(this.quizStatus.result == 'Pass') {
-            message = "<h4>You have successfully completed this quiz.</h4>Score: " + this.quizStatus.score
-        }
-        return message
-      }
-    },
-};
-</script>
-
-<style lang="css" scoped>
-</style>
diff --git a/erpnext/public/js/education/lms/components/Quiz/QuizMultipleChoice.vue b/erpnext/public/js/education/lms/components/Quiz/QuizMultipleChoice.vue
deleted file mode 100644
index 338b1ac..0000000
--- a/erpnext/public/js/education/lms/components/Quiz/QuizMultipleChoice.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-<template>
-	<div class="question mt-4">
-    <h5>{{ question.question }}</h5>
-    <div class="options ml-2">
-        <div v-for="option in question.options" :key="option.name" class="form-check pb-1">
-            <input v-model="checked" class="form-check-input" type="checkbox" :name="question.name" :id="option.name" :value="option.name" @change="emitResponse(question.name, option.name)" :disabled="isDisabled">
-            <label class="form-check-label" :for="option.name">
-                {{ option.option }}
-            </label>
-        </div>
-    </div>
-</div>
-</template>
-
-<script>
-export default {
-	props: ['question', 'isDisabled'],
-	name: 'QuizSingleChoice',
-    data() {
-        return {
-            checked: []
-        }
-    },
-	methods: {
-		emitResponse(q, o) {
-            console.log(this.checked)
-			this.$emit('updateResponse', {'question':q , 'option': this.checked, 'type': this.question.type})
-		}
-	}
-};
-</script>
-
-<style lang="css" scoped>
-</style>
diff --git a/erpnext/public/js/education/lms/components/Quiz/QuizSingleChoice.vue b/erpnext/public/js/education/lms/components/Quiz/QuizSingleChoice.vue
deleted file mode 100644
index 235cbce..0000000
--- a/erpnext/public/js/education/lms/components/Quiz/QuizSingleChoice.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-	<div class="question mt-4">
-    <h5>{{ question.question }}</h5>
-    <div class="options ml-2">
-        <div v-for="option in question.options" :key="option.name" class="form-check pb-1">
-            <input class="form-check-input" type="radio" :name="question.name" :id="option.name" :value="option.name" @change="emitResponse(question.name, option.name)" :disabled="isDisabled">
-            <label class="form-check-label" :for="option.name">
-                {{ option.option }}
-            </label>
-        </div>
-    </div>
-</div>
-</template>
-
-<script>
-export default {
-	props: ['question', 'isDisabled'],
-	name: 'QuizSingleChoice',
-	methods: {
-		emitResponse(q, o) {
-			this.$emit('updateResponse', {'question':q , 'option': o, 'type': this.question.type})
-		}
-	}
-};
-</script>
-
-<style lang="css" scoped>
-</style>
diff --git a/erpnext/public/js/education/lms/components/ScoreCard.vue b/erpnext/public/js/education/lms/components/ScoreCard.vue
deleted file mode 100644
index 80b12cb..0000000
--- a/erpnext/public/js/education/lms/components/ScoreCard.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-    <div v-if="quizData" class='py-3 col-md-4 col-sm-12'>
-        <div class="card h-100">
-            <div class='card-body'>
-                <h5 class='card-title'>{{ quizData.program }}</h5>
-                <div v-for="attempt in quizData.quiz_attempt" :key="attempt.content" class="course-list" id="getting-started">
-                    <div>
-                        {{ attempt.content }}
-                        <ul v-if="attempt.is_complete">
-                            <li><span class="text-muted">Score: </span>{{ attempt.score }}</li>
-                            <li><span class="text-muted">Status: </span>{{attempt.result }}</li>
-                        </ul>
-                        <span v-else>- Unattempted</span>
-                    </div>
-                </div>
-            </div>
-            <div class='p-3' style="display: flex; justify-content: space-between;">
-                <div></div>
-                <div class='text-right'>
-                    <a-button
-                            :type="'primary'"
-                            size="sm btn-block"
-                            :route="programRoute"
-                        >
-                            Go To Program
-                        </a-button>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-<script>
-import AButton from './Button.vue';
-export default {
-    props: ['program'],
-    name: "ScoreCard",
-    data() {
-    	return {
-            quizData: {}
-    	};
-    },
-    mounted() {
-        this.getQuizProgress().then(data => this.quizData = data)
-    },
-    methods: {
-       getQuizProgress() {
-			return lms.call('get_quiz_progress_of_program', {
-                    program_name: this.program
-				})
-        },
-        programRoute() {
-            return {name: 'program', params: {program_name: this.program}}
-        },
-    },
-    components: {
-        AButton
-    },
-};
-</script>
-
diff --git a/erpnext/public/js/education/lms/components/TopSection.vue b/erpnext/public/js/education/lms/components/TopSection.vue
deleted file mode 100644
index c27d003..0000000
--- a/erpnext/public/js/education/lms/components/TopSection.vue
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-<div class="hero">
-	<h1 class="text-center" v-html="title"></h1>
-	<p class='text-center' v-html="description"></p>
-	<p class="text-center padding">
-		<slot></slot>
-	</p>
-</div>
-</template>
-<script>
-
-export default {
-	props: ['title', 'description'],
-    name: "TopSection",
-};
-</script>
-<style scoped>
-	.hero {
-		padding-top: 50px;
-		padding-bottom: 100px;
-	}
-
-	.hero h1 {
-		font-size: 40px;
-		font-weight: 200;
-	}
-</style>
diff --git a/erpnext/public/js/education/lms/components/TopSectionButton.vue b/erpnext/public/js/education/lms/components/TopSectionButton.vue
deleted file mode 100644
index 0fa49d4..0000000
--- a/erpnext/public/js/education/lms/components/TopSectionButton.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-    <button v-if="isLoggedIn" class='btn btn-primary btn-md' @click="primaryAction()">{{ buttonName }}</button>
-	<a v-else class='btn btn-primary btn-md' href="/login#signup">{{ buttonName }}</a>
-</template>
-<script>
-export default {
-    name: "TopSectionButton",
-    data() {
-        return {
-            buttonName: '',
-            isLoggedIn: lms.store.checkLogin(),
-            nextContent: '',
-            nextContentType: '',
-            nextCourse: '',
-            link: '',
-        }
-    },
-    mounted() {
-        this.computeButtons()
-    },
-    methods: {
-        computeButtons(){
-            if(this.isLoggedIn){
-                    this.buttonName = 'Explore Programs'
-            }
-            else{
-                this.buttonName = 'Sign Up'
-            }
-        },
-        primaryAction() {
-            if(this.$route.name == 'home'){
-                this.$router.push('List/Program');
-            }
-            else if(this.$route.name == 'program' && lms.store.enrolledPrograms.includes(this.$route.params.program_name)){
-                this.$router.push({ name: 'content', params: { program_name: this.$route.params.program_name, course: this.nextCourse, type: this.nextContentType, content: this.nextContent}})
-            }
-            else {
-                lms.call("enroll_in_program",
-                    {
-                        program_name: this.$route.params.program_name,
-                        student_email_id: frappe.session.user
-                    }
-                )
-                lms.store.updateEnrolledPrograms()
-            }
-        },
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/TopicCard.vue b/erpnext/public/js/education/lms/components/TopicCard.vue
deleted file mode 100644
index 4cb8e85..0000000
--- a/erpnext/public/js/education/lms/components/TopicCard.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-
-<template>
-    <div class="py-3 col-md-4 col-sm-12">
-        <div class="card h-100">
-            <div class="card-hero-img" v-if="topic.hero_image" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>
-            <div v-else class="card-image-wrapper">
-                <div class="image-body">{{ topic.topic_name }}</div>
-            </div>
-            <div class='card-body'>
-                <h5 class="card-title">{{ topic.topic_name }}</h5>
-                <span class="course-list text-muted" id="getting-started">
-                    Content
-                    <ul class="mb-0 mt-1" style="padding-left: 1.5em;">
-                        <li v-for="content in topic.topic_content" :key="content.name">
-                            <router-link v-if="isLogin" tag="a" :class="'text-muted'" :to="{name: 'content', params:{program_name: program_name, topic:topic.name, course_name: course_name, type:content.content_type, content: content.content} }">
-                                {{ content.content }}
-                            </router-link>
-                            <div v-else><span style="padding-right: 0.4em"></span>{{ content.content }}</div>
-                        </li>
-                    </ul>
-                </span>
-            </div>
-            <div v-if="isLogin" class='p-3' style="display: flex; justify-content: space-between;">
-                <div>
-                    <span v-if="complete"><i class="mr-2 text-success fa fa-check-circle" aria-hidden="true"></i>Course Complete</span>
-                </div>
-                <div class='text-right'>
-                    <a-button
-                    :type="'primary'"
-                    size="sm"
-                    :route="firstContentRoute"
-                >
-                    {{ buttonName }}
-                </a-button>
-                </div>
-            </div>
-        </div>
-    </div>
-</template>
-
-<script>
-import AButton from './Button.vue';
-
-export default {
-    props: ['topic', 'course_name', 'program_name'],
-    name: "TopicCard",
-    data() {
-        return {
-            topicDetails: {}
-        }
-    },
-    mounted() {
-        if(lms.store.checkLogin()) this.gettopicDetails().then(data => this.topicDetails = data)
-    },
-    components: {
-        AButton
-    },
-    computed: {
-        firstContentRoute() {
-            if(lms.store.checkLogin()){
-                return `/Program/${this.program_name}/${this.course_name}/${this.topic.name}/${this.topicDetails.content_type}/${this.topicDetails.content}`
-            }
-            else {
-                return {}
-            }
-        },
-        complete() {
-            if(lms.store.checkProgramEnrollment(this.program_name)){
-                if (this.topicDetails.flag === "Completed" ) {
-                    return true
-                }
-                else {
-                    return false
-                }
-            }
-            else {
-                return false
-            }
-        },
-        isLogin() {
-            // return lms.store.checkProgramEnrollment(this.program_name)
-            return lms.store.checkLogin()
-        },
-        buttonName() {
-            if(lms.store.checkProgramEnrollment(this.program_name)){
-                if (this.topicDetails.flag == 'Continue'){
-                    return 'Continue'
-                }
-                else {
-                    return 'Start Topic'
-                }
-            }
-            else {
-                return "Explore"
-            }
-        }
-    },
-    methods: {
-        iconClass(content_type) {
-            if(content_type == 'Video') return 'fa fa-play'
-            if(content_type == 'Article') return 'fa fa-file-text-o'
-            if(content_type == 'Quiz') return 'fa fa-question-circle-o'
-        },
-        gettopicDetails() {
-			return lms.call('get_student_topic_details', {
-                    topic_name: this.topic.name,
-                    course_name: this.course_name,
-				})
-        },
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/Video.vue b/erpnext/public/js/education/lms/components/Video.vue
deleted file mode 100644
index 50b4dd4..0000000
--- a/erpnext/public/js/education/lms/components/Video.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-<div>
-    <div class='mt-2'>
-    <div>
-        <div class="mt-3 row">
-            <div class="col-md-8">
-                <h2>{{ contentData.name }}</h2>
-                <span class="text-muted">
-                    <i class="octicon octicon-clock" title="Duration"></i> <span v-if="contentData.duration"> {{ contentData.duration }} Mins &mdash; </span><span v-if="contentData.publish_date"> Published on {{ contentData.publish_date }}. </span>
-                </span>
-            </div>
-            <div class="col-md-4 text-right">
-                <slot></slot>
-            </div>
-        </div>
-        <youtube-player :url="contentData.url" class="mt-3"/>
-        <hr>
-    </div>
-</div>
-<div class="video-description-section">
-    <div>
-        <div class="content" v-html="contentData.description">
-        </div>
-        <div class="text-right hidden">
-            <a class='btn btn-outline-secondary' href="/classrooms/module">Previous</a>
-            <a class='btn btn-primary' href="/classrooms/module">Next</a>
-        </div>
-        <div class="mt-3 text-right">
-            <a class="text-muted" href="/report"><i class="octicon octicon-issue-opened" title="Report"></i> Report a
-                Mistake</a>
-        </div>
-    </div>
-</div>
-</div>
-</template>
-<script>
-import YoutubePlayer from './YoutubePlayer.vue'
-
-export default {
-	props: ['content', 'type'],
-	name: 'Video',
-	data() {
-    	return {
-            contentData: '',
-    	}
-    },
-    components: {
-        YoutubePlayer
-    },
-    mounted() {
-        this.getContent()
-            .then(data => this.contentData = data)
-    },
-    methods: {
-        getContent() {
-            return lms.call('get_content', {
-                content_type: this.type,
-                content: this.content
-            })
-        }
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/VideoModal.vue b/erpnext/public/js/education/lms/components/VideoModal.vue
deleted file mode 100644
index 71227ad..0000000
--- a/erpnext/public/js/education/lms/components/VideoModal.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-	<div class="modal" id="videoModal" tabindex="-1" role="dialog">
-		<div class="modal-dialog" role="document">
-			<div class="modal-content">
-			<div class="modal-header">
-				<h5 class="modal-title">{{ title }}</h5>
-				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
-				<span id="close_modal" aria-hidden="true" @click="stopVideo()">&times;</span>
-				</button>
-			</div>
-			<div class="modal-body">
-				<youtube-player :url="video"/>
-			</div>
-			</div>
-		</div>
-	</div>
-</template>
-<script type="text/javascript">
-import YoutubePlayer from './YoutubePlayer.vue'
-
-export default {
-	name: 'VideoModal',
-	props: ['title', 'video'],
-	components: {
-		YoutubePlayer
-	},
-	methods: {
-		stopVideo() {
-			$('.yvideo').each(function() {
-  				this.contentWindow.postMessage('{"event":"command","func":"stopVideo","args":""}', '*')
-			});
-		}
-	}
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/components/YoutubePlayer.vue b/erpnext/public/js/education/lms/components/YoutubePlayer.vue
deleted file mode 100644
index 9377b57..0000000
--- a/erpnext/public/js/education/lms/components/YoutubePlayer.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-<template>
-	<div class="embed-responsive embed-responsive-16by9">
-        <iframe class="embed-responsive-item yvideo" :src="'https://www.youtube.com/embed/' + videoID + '?version=3&enablejsapi=1'" allowfullscreen></iframe>
-    </div>
-</template>
-<script type="text/javascript">
-	export default {
-		name: 'YoutubePlayer',
-		props: ['url'],
-		data() {
-			return {
-				videoID: ''
-			}
-		},
-		watch: {
-			url() {
-				this.videoID = this.getVideoID(this.url)
-			}
-		},
-		methods: {
-			getVideoID(link) {
-				if (!Array.prototype.last){
-					Array.prototype.last = function(){
-						return this[this.length - 1];
-					};
-				};
-				if (link.includes('v=')){
-					return link.split('v=')[1].split('&')[0]
-				}
-				else if (link.includes('youtu.be')) {
-					return link.split('/').last().split('?')[0]
-				}
-		    }
-		}
-	};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/lms.js b/erpnext/public/js/education/lms/lms.js
deleted file mode 100644
index 4665b14..0000000
--- a/erpnext/public/js/education/lms/lms.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import Vue from 'vue/dist/vue.js';
-import VueRouter from 'vue-router/dist/vue-router.js';
-import moment from 'moment/min/moment.min.js';
-
-import lmsRoot from "./lmsRoot.vue";
-import routes from './routes';
-import './call';
-
-Vue.use(VueRouter);
-
-var store = {
-	enrolledPrograms: [],
-	enrolledCourses: []
-};
-
-// let profile_page = `<a class="dropdown-item" href="/lms#/Profile" rel="nofollow"> LMS Profile </a>`
-// document.querySelector('#website-post-login > ul').innerHTML += profile_page
-
-frappe.ready(() => {
-	frappe.provide('lms');
-
-	lms.moment = moment;
-
-	lms.store = new Vue({
-		data: store,
-		methods: {
-			updateEnrolledPrograms() {
-				if(this.checkLogin()) {
-					lms.call("get_program_enrollments").then(data => {
-						this.enrolledPrograms = data;
-					});
-				}
-			},
-			updateEnrolledCourses() {
-				if(this.checkLogin()) {
-					lms.call("get_all_course_enrollments").then(data => {
-						this.enrolledCourses = data;
-					});
-				}
-			},
-			checkLogin() {
-				return frappe.is_user_logged_in();
-			},
-			updateState() {
-				this.checkLogin();
-				this.updateEnrolledPrograms();
-				this.updateEnrolledCourses();
-			},
-			checkProgramEnrollment(programName) {
-				if(this.checkLogin()){
-					if(this.enrolledPrograms) {
-						if(this.enrolledPrograms.includes(programName)) {
-							return true;
-						}
-						else {
-							return false;
-						}
-					}
-					else {
-						return false;
-					}
-				}
-				else {
-					return false;
-				}
-			}
-		}
-	});
-	lms.view = new Vue({
-		el: "#lms-app",
-		router: new VueRouter({ routes }),
-		template: "<lms-root/>",
-		components: { lmsRoot },
-		mounted() {
-			lms.store.updateState();
-		}
-	});
-	lms.view.$router.afterEach((to, from) => {
-		window.scrollTo(0,0);
-	});
-});
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/lmsRoot.vue b/erpnext/public/js/education/lms/lmsRoot.vue
deleted file mode 100644
index d359265..0000000
--- a/erpnext/public/js/education/lms/lmsRoot.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-	<div id="lms-root">
-		<navbar></navbar>
-		<main class="container my-5">
-			<div class="page_content">
-				<router-view :key="$route.fullPath"></router-view>
-			</div>
-		</main>
-	</div>
-</template>
-<script>
-import Navbar from "./components/Navbar.vue"
-export default {
-	name: "lmsRoot",
-	components: {
-		Navbar
-	}
-};
-</script>
-<style>
-	div.card-hero-img {
-        height: 220px;
-        background-size: cover;
-        background-repeat: no-repeat;
-        background-position: center;
-        background-color: rgb(250, 251, 252);
-    }
-
-    .card-image-wrapper {
-        display: flex;
-        overflow: hidden;
-        height: 220px;
-        background-color: rgb(250, 251, 252);
-        justify-content: center;
-    }
-
-    .image-body {
-        align-self: center;
-        color: #d1d8dd;
-        font-size: 24px;
-        font-weight: 600;
-        line-height: 1;
-        padding: 20px;
-    }
-</style>
diff --git a/erpnext/public/js/education/lms/pages/ContentPage.vue b/erpnext/public/js/education/lms/pages/ContentPage.vue
deleted file mode 100644
index 224ee03..0000000
--- a/erpnext/public/js/education/lms/pages/ContentPage.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<template>
-	<div>
-		<component v-bind:is="currentComponent" :content="content" :type="type">
-			<ContentNavigation :nextContent="nextContent" :nextContentType="nextContentType"/>
-		</component>
-	</div>
-</template>
-<script>
-import Article from "../components/Article.vue"
-import Quiz from "../components/Quiz.vue"
-import Video from "../components/Video.vue"
-import ContentNavigation from "../components/ContentNavigation.vue"
-
-export default {
-	props:['program_name', 'course_name', 'topic', 'type', 'content'],
-	name: "ContentPage",
-	data() {
-		return{
-			nextContent: '',
-			nextContentType: '',
-		}
-	},
-	computed: {
-	  currentComponent: function() {
-	  	if(this.type === "Article") {
-	  		return 'Article'
-	  	}
-	  	else if(this.type === "Quiz") {
-	  		return 'Quiz'
-	  	}
-	  	else if(this.type === "Video") {
-	  		return 'Video'
-	  	}
-	  },
-	},
-	mounted() {
-	  	this.getNextContent().then(data => {
-	  		this.nextContent = data.content,
-	  		this.nextContentType = data.content_type
-	  	});
-	},
-	methods: {
-		getNextContent(){
-			return lms.call("get_next_content",
-				{
-					current_content: this.content,
-					current_content_type: this.type,
-					topic: this.topic,
-			  	}
-			);
-		}
-	},
-	components: {
-		Article,
-		Video,
-		Quiz,
-		ContentNavigation
-	}
-};
-</script>
-
-<style>
-.footer-message {
-	display: none;
-}
-
-.video-description-section {
-	padding-top: 0em !important;
-}
-
-.article-top-section {
-	padding-top: 0.5em !important;
-	padding-bottom: 0rem !important;
-}
-
-.article-content-section {
-	padding-top: 0em !important;
-}
-
-.quiz-section {
-	padding-top: 0.5em !important;
-	padding-bottom: 0rem !important;
-}
-</style>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/pages/CoursePage.vue b/erpnext/public/js/education/lms/pages/CoursePage.vue
deleted file mode 100644
index dc3d130..0000000
--- a/erpnext/public/js/education/lms/pages/CoursePage.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-<div>
-	<breadcrumb></breadcrumb>
-	<TopSection v-bind:title="course.course_name" v-bind:description="course.course_intro">
-    </TopSection>
-	<CardList :title="'Topics'" :description="''">
-        <TopicCard slot="card-list-slot" v-for="topic in topicData" :topic="topic" :course_name="course_name" :program_name="program_name" :key="topic.name"/>
-    </CardList>
-</div>
-</template>
-<script>
-import TopSection from "../components/TopSection.vue"
-import CardList from "../components/CardList.vue"
-import TopicCard from "../components/TopicCard.vue"
-import Breadcrumb from "../components/Breadcrumb.vue"
-
-export default {
-	props: ['program_name','course_name'],
-    name: "CoursePage",
-    components: {
-		TopSection,
-		CardList,
-		TopicCard,
-		Breadcrumb
-	},
-	data() {
-		return {
-			course: {},
-			topicData: [],
-		}
-	},
-	mounted() {
-		this.getCourseDetails().then(data => this.course = data);
-		this.getTopics().then(data => this.topicData = data);
-	},
-	methods: {
-		getCourseDetails() {
-			return lms.call('get_course_details', {
-				course_name: this.course_name
-			});
-		},
-		getTopics() {
-			return lms.call('get_topics', {
-				course_name: this.course_name
-			})
-		}
-	}
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/pages/Home.vue b/erpnext/public/js/education/lms/pages/Home.vue
deleted file mode 100644
index 6554a76..0000000
--- a/erpnext/public/js/education/lms/pages/Home.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-<div>
-	<TopSection :title="portal.title" :description="portal.description">
-        <TopSectionButton/>
-    </TopSection>
-	<CardList :title="'Featured Programs'" :description="'Master ERPNext'">
-        <ProgramCard slot="card-list-slot" v-for="item in featuredPrograms" :key="item.program.name" :program="item.program" :enrolled="item.is_enrolled"/>
-        <AButton slot="list-bottom" :type="'primary'" :size="'md'" :route="'List/Program'">View All</AButton>
-    </CardList>
-</div>
-</template>
-<script>
-import Button from '../components/Button.vue';
-import TopSection from "../components/TopSection.vue"
-import CardList from "../components/CardList.vue"
-import ProgramCard from "../components/ProgramCard.vue"
-import TopSectionButton from "../components/TopSectionButton.vue"
-
-export default {
-    name: "Home",
-    data() {
-    	return{
-    		portal: {},
-            featuredPrograms: {},
-            // enrolledPrograms: new Set()
-    	}
-    },
-    components: {
-        AButton: Button,
-		TopSection,
-        CardList,
-        ProgramCard,
-        TopSectionButton
-    },
-	mounted() {
-        this.getPortalDetails().then(data => this.portal = data);
-        this.getFeaturedPrograms().then(data => this.featuredPrograms = data);
-    },
-    methods: {
-        getPortalDetails() {
-            return lms.call("get_portal_details")
-        },
-        getFeaturedPrograms() {
-            return lms.call("get_featured_programs")
-        }
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/pages/ListPage.vue b/erpnext/public/js/education/lms/pages/ListPage.vue
deleted file mode 100644
index cf5cecc..0000000
--- a/erpnext/public/js/education/lms/pages/ListPage.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-	<div>
-		<TopSection :title="'Programs at ' + portal.title" :description="portal.description">
-        	<AButton v-if="isLogin" :type="'primary'" :size="'lg'" :route="{ name: 'signup'}">Sign Up</AButton>
-    	</TopSection>
-		<CardList :title="'All Programs'" :description="''">
-			<ProgramCard slot="card-list-slot" v-for="item in masterData" :key="item.program.name" :program="item.program" :enrolled="item.is_enrolled"/>
-		</CardList>
-	</div>
-</template>
-<script>
-import ProgramCard from '../components/ProgramCard.vue';
-import CourseCard from "../components/CourseCard.vue"
-import Button from '../components/Button.vue';
-import TopSection from "../components/TopSection.vue"
-import CardList from "../components/CardList.vue"
-
-
-export default {
-	props: ['master'],
-    name: "ListPage",
-    components: {
-        AButton: Button,
-		CourseCard,
-		ProgramCard,
-		CardList,
-		TopSection
-	},
-	data() {
-		return {
-			portal: {},
-			masterData: {}
-		}
-	},
-	mounted() {
-        this.getPortalDetails().then(data => this.portal = data);
-        this.getMaster().then(data => this.masterData = data);
-    },
-    methods: {
-        getPortalDetails() {
-            return lms.call("get_portal_details")
-        },
-        getMaster() {
-            return lms.call("get_all_programs")
-        }
-	},
-	computed: {
-		isLogin() {
-			return !lms.store.checkLogin()
-		}
-	}
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/pages/ProfilePage.vue b/erpnext/public/js/education/lms/pages/ProfilePage.vue
deleted file mode 100644
index beff5eb..0000000
--- a/erpnext/public/js/education/lms/pages/ProfilePage.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-<template>
-<div>
-	<ProfileInfo :enrolledPrograms="enrolledPrograms"></ProfileInfo>
-	<div v-if="enrolledPrograms">
-		<CardList :title="'Your Progress'" :description="''">
-	        <ProgressCard slot="card-list-slot" v-for="program in enrolledPrograms" :program="program" :key="program"/>
-	    </CardList>
-		<CardList :title="''" :description="''">
-	        <ScoreCard slot="card-list-slot" v-for="program in enrolledPrograms" :program="program" :key="program"/>
-	    </CardList>
-	</div>
-	<div v-else>
-		You haven't enrolled in any programs yet.
-	</div>
-
-</div>
-</template>
-<script>
-import Button from '../components/Button.vue';
-import TopSection from "../components/TopSection.vue"
-import CardList from "../components/CardList.vue"
-import ProgressCard from "../components/ProgressCard.vue"
-import ProfileInfo from "../components/ProfileInfo.vue"
-import ScoreCard from "../components/ScoreCard.vue"
-
-export default {
-    name: "ProfilePage",
-    components: {
-        AButton: Button,
-		TopSection,
-		CardList,
-		ProfileInfo,
-		ProgressCard,
-		ScoreCard
-	},
-	data() {
-		return {
-			enrolledPrograms: {},
-		}
-	},
-	mounted() {
-        this.getEnrolledPrograms().then(data => this.enrolledPrograms = data);
-    },
-    methods: {
-        getEnrolledPrograms() {
-            return lms.call("get_program_enrollments")
-        }
-    }
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/pages/ProgramPage.vue b/erpnext/public/js/education/lms/pages/ProgramPage.vue
deleted file mode 100644
index 415c861..0000000
--- a/erpnext/public/js/education/lms/pages/ProgramPage.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-<template>
-<div>
-	<breadcrumb></breadcrumb>
-	<TopSection v-bind:title="program.program_name" v-bind:description="program.description">
-    </TopSection>
-	<CardList :title="'Courses'" :description="''">
-        <CourseCard slot="card-list-slot" v-for="course in courseData" :course="course" :program_name="program_name" :key="course.name"/>
-    </CardList>
-</div>
-</template>
-<script>
-import TopSection from "../components/TopSection.vue"
-import CardList from "../components/CardList.vue"
-import CourseCard from "../components/CourseCard.vue"
-import Breadcrumb from "../components/Breadcrumb.vue"
-
-export default {
-	props: ['program_name'],
-    name: "ProgramPage",
-    components: {
-		TopSection,
-		CardList,
-		CourseCard,
-		Breadcrumb
-	},
-	data() {
-		return {
-			program: {},
-			courseData: [],
-		}
-	},
-	mounted() {
-		this.getProgramDetails().then(data => this.program = data);
-		this.getCourses().then(data => this.courseData = data);
-	},
-	methods: {
-		getProgramDetails() {
-			return lms.call('get_program', {
-				program_name: this.program_name
-			});
-		},
-		getCourses() {
-			return lms.call('get_courses', {
-				program_name: this.program_name
-			})
-		}
-	}
-};
-</script>
\ No newline at end of file
diff --git a/erpnext/public/js/education/lms/routes.js b/erpnext/public/js/education/lms/routes.js
deleted file mode 100644
index 483f222..0000000
--- a/erpnext/public/js/education/lms/routes.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import Home from "./pages/Home.vue";
-import ProgramPage from "./pages/ProgramPage.vue";
-import CoursePage from "./pages/CoursePage.vue";
-import ContentPage from "./pages/ContentPage.vue";
-import ListPage from "./pages/ListPage.vue";
-import ProfilePage from "./pages/ProfilePage.vue";
-
-const routes = [{
-	name: 'home',
-	path: '',
-	component: Home
-},
-{
-	name: 'program',
-	path: '/Program/:program_name',
-	component: ProgramPage,
-	props: true
-},
-{
-	name: 'course',
-	path: '/Program/:program_name/:course_name/',
-	component: CoursePage,
-	props: true,
-},
-{
-	name: 'content',
-	path: '/Program/:program_name/:course_name/:topic/:type/:content',
-	component: ContentPage,
-	props: true,
-	beforeRouteUpdate (to, from, next) {
-		if (lms.store.checkProgramEnrollment(to.params.program_name)) {
-			next();
-		} else {
-			next({
-				name: 'program',
-				params: {
-					program_name: to.params.program_name
-				}
-			});
-		}
-	}
-},
-{
-	name: 'list',
-	path: '/List/:master',
-	component: ListPage,
-	props: true
-},
-{
-	name: 'signup',
-	path: '/Signup',
-	beforeEnter(to, from, next) {
-		window.location = window.location.origin.toString() + '/login#signup';
-	},
-	component: Home,
-	props: true
-},
-{
-	name: 'login',
-	path: '/Login',
-	beforeEnter(to, from, next) {
-		window.location = window.location.origin.toString() + '/login#login';
-	},
-	component: Home,
-	props: true
-},
-{
-	name: 'logout',
-	path: '/Logout',
-	beforeEnter(to, from, next) {
-		window.location = window.location.origin.toString() + '/?cmd=web_logout';
-	},
-	component: Home,
-	props: true
-},
-{
-	name: 'profile',
-	path: '/Profile',
-	component: ProfilePage,
-	props: true,
-	beforeEnter: (to, from, next) => {
-		if (!lms.store.checkLogin()) {
-			next({
-				name: 'home'
-			});
-		} else {
-			next();
-		}
-	}
-}];
-
-export default routes;
\ No newline at end of file
