An easy-to-use solution to share assignments with students, even those who don't want to register to follow along class.
Read more about the process of building it here
- Links
- Screenshots
- Tech Stack
- Features
- Run Locally
- Environment Variables
- Lessons Learned
- Roadmap
- Author
To avoid signing up, you may log in with the following credentials:
[email protected] // testtest
To view an example class without loggin in, try this classroom password in the landing page:
metropolitan-Cherice-sheep
Client: JavaScript, HTML, EJS, TailwindCSS
Server: Node, Express, MongoDB/Mongoose
- Secure login with Passport Auth'
- Cache for external API calls to Unsplash
- Uploads pictures to Cloudinary or retrieves a random one if Classroom creation form is left empty
- Light and dark mode toggle
- Prompts and mobile menu are contained in accessible modals
- Responsive for desktop & mobile
- Users may access a classroom using its specific classroom password
- Users don't need to log in to access a classroom or lessons, but their usage is limited
- Students who are logged in and enrolled into a classroom can leave comments in lessons and track lesson completion
Clone the project
git clone https://github.com/raissa-k/easy-classrooms.git
Install dependencies
npm install
Start the server
npm run dev
To run this project, add the following environment variables to your .env
file in /config/.env
A .env.example
file is supplied inside the config
folder.
DB_STRING= (MongoDB)
PORT= (any of your choosing)
CLOUD_NAME= (from Cloudinary Programmable Media)
API_KEY= (from Cloudinary Programmable Media)
API_SECRET= (from Cloudinary Programmable Media)
UNSPLASH_CLIENT_ID= (from Unsplash Image API)
- In this project, it turned out to be simpler to create an Enrollment model schema rather than integrate students, classrooms and lessons directly. Less turned out to be more.
- Rendering a classroom using EJS while taking into account the enrollment status and user authentication was a fun challenge which would have been made much easier with front end libraries such as React.
- When it comes to text, CSS
text-transform: uppercase
also directly affects the element, and so adding aria-labels to buttons might seem like extra work but cannot be skipped. - While I did choose a pre-made color theme which looked fine at first, it turned out to not generate the sufficient contrast in some elements so I had to add further customization.
- Rebuild with React
- Add different authentication methods
- Enable password change and recovery
- Add lesson editing
- Replies to comments inside a lesson
- Integration with calendar
- Add button to share classroom directly
- Comments on lessons
- Lessons can be marked complete
- Add classroom password protection
- Users may view classroom and lesson without logging in
Raissa K.