lonate12 / mrs-pattersons-desk

Capstone project for Bloomtech Backend Engineering course

Home Page:http://mrs-pattersons-desk-front-end.s3-website.us-east-2.amazonaws.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Learning Management System (LMS) Capstone Project

Table of Contents

Background

In June 2023, I decided to upskill myself by going through the Bloomtech Backend Engineering course. The course material was developed by Amazon for their Amazon Technical Academy program that takes employees in non-tech roles and prepare them to be software engineers at Amazon.

To see a live instance of the app: Mrs. Patterson's Desk

There are two different personas, use the corresponding logins to view the app from each perspective:

Persona Username Password
Assignment Reviewer reviewer@example.com password
Student student@example.com password

What is it and why?

This is a learning management system where students can submit assignments and reviewers can pick assignments from a queue to review. This capstone projects serves to demonstrate the application of skills and technologies I've learned while in the program.

What I did

Starting with a design document, it was up to me to implement everything. Where there were gaps in design decisions or in knowledge about a piece of technology, I either made properly thought through design decisions, consulted with stakeholders to ensure design decisions would align with the project requirements that may have not been laid out in the original design document, or filled in the gaps on my knowledge. While I was made aware of technologies like Spring Boot in conversations with folks during the course, it was up to me to get up to speed on the technology, read the documentation, understand what I needed to find out in order to make my project work.

I quickly got up to speed on Spring Security, Spring JPA, and Spring Boot more broadly. When it came time do deploy, I educated myself about different hosting possibilities and learned about Supabase, Docker, and AWS App Runner (along with other bits that were needed when dealing with these techs, e.g. AWS CLI, IAM, Amazon ECR, Docker CLI, etc.)

Technologies Used

Backend

Java, Spring Boot, Spring Security, PostgreSQL

Frontend

JavaScript, React, ReactRouter, Bootstrap, JWT, Postman

Deployment

AWS, AWS App Runner, Docker, ECR, S3, Supabase

How did I go about it?

Planning phase

First step was to go through the design document in order to understand what the requirements were. This reflects the real-world scenario of what the dev would receive from the product team. From there, I created an entity diagram:

Entity Diagram Entity Diagram

Next, thinking through the use cases, I started to work out some flow diagrams, examples below:

Edit Assignment Flow Edit assignment flow

Get All Unclaimed/Pending Flow Get all unclaimed/pending assignment flow

Submit Assignment Flow Submit assignment flow

Backend

With this in place, I started to code up the backend leveraging Spring Boot with Spring JPA and Spring Security. As I mentioned earlier, this was new technology to me, so I had to learn as much as needed to get things up and running. Once I had my backend at a good spot and was able to test it out with Postman, I got to work on the frontend.

Frontend

Along with the design document, I also received some wireframes as to what the frontend should look like. I'm no designer, so I put together a frontend that with the aim of being functional and live up to the essence of the wireframes. In a real-world project, I would, likely, receive detailed renderings of what the frontend should look like from a graphic designer.

Some examples of the wireframes and screenshots of the end result:


Authenticated Home Page

Learner authenticated home page - wireframe Wireframe

Learner authenticated home page - live Live


Learner Dashboard Page

Learner dashboard - wireframe Wireframe

Learner dashboard - live Live


Learner Assignment Detail Page

Learner assignment detail - wireframe Wireframe

Learner assignment detail - live Live


Deployment

When it came time to deploy, there was no preference/guidance in the design document. With my previous experience at AWS, that was the first place I went to. Having previously obtained the AWS Certified Solutions Architect - Associate certification, I knew what general technologies to consider. For the frontend, I settled on serving it as a static website from an S3 bucket. For the backend, I decided to containerize the application and deploy it via AWS App Runner. For the database, I opted to use Supabase's free tier. I know the infrastructure is not as hardened as it should be if this was a production app intended to be used by many thousands (even millions) of users. However, I plan to refresh myself on AWS best practices in order to make sure I have a cloud architecture that aligns with those pillars.

Reflection

I'm very proud to present this project as a culmination of what I've learned at Bloomtech. I know there's still a lot to learn and the tech landscape is ever evolving and evolving faster than we can individually keep up. This is just the start and I plan to continue to learn and improve on my knowledge.

As far as the app goes, there's plenty of room for improvement (see improvements roadmap below) and I plan to work on continuing to improve the app, not because it will actually be used by live users, but in an attempt to continue to learn, be curious, and dive deep into new topics that will make me a better technologist.

Improvements Roadmap

  • Input validation on both the frontend and the backend
  • Email notifications for different events (e.g. assignment marked as complete)
  • Password reset flow
  • Infrastructure improvements (e.g. Cloudfront in front of S3? Load balancer fronting App Runner? CI/CD pipeline?)

About

Capstone project for Bloomtech Backend Engineering course

http://mrs-pattersons-desk-front-end.s3-website.us-east-2.amazonaws.com/


Languages

Language:Java 48.7%Language:JavaScript 46.7%Language:CSS 3.4%Language:HTML 1.1%Language:Dockerfile 0.1%