LMS System

LMS System

Aug 2024

Personal
Node Next Spring
Frontend Git Backend Git Website

This is a training project for a learning management system where teachers and students can login and access details about thier class. Teachers can login, then upload or delete files for thier classes, create tests, assign scores or modify them for students per test. Based on the user’s role (teacher or student) the UI changes to show different information. Students cannot see modification options or other students scores for tests, or be able to add or delete files for example.

This came about after VR Classrooms to learn more indepth front-end and practicing full stack development. The NextJS app is hosted on vercel, the SpringBoot Api and MySql db are hosted on fly.io VMs.

For security the front-end contains a middleware hosted seperately via Vercel, the auth server follows OAuth2 standards with JWT (Json Web Tokens) signed with limited validity to be used with the Spring Rest API and Spring security filters. The API is connected to a MySql DB hosted in a public cloud closed off from external connections outside the cloud.

For the SpringBoot app the goal was to use proper practice to secure things like secrets, setup proper authentication using encryption keys etc.. and be able to host my application in different enviroments to develop way to test it safely. The other goals was to develop it in a sustainable way, make it resilent and give proper error messages with apporiate status codes for http responses. Adding logging and a monitoring stack like ELK (Elastic + Kibana + Logstash/Filebeat) would be another extension possible.

The front-end development goals was to understand and develop a responsive UI which give user feedback on actions from hovering, clicking on a link, loading, etc… Combining that with optimization techniques to render interactive components on client based on thier roles retrieved from the auth server and SEO optimization.

Overall it was a good learning experience, exploring more infrastructure, security topics for backend and more optimization for front-end, making something that can be used in an actual production scenario possibly.