Hello CI!
This exists as a somewhat functional demo of my final-project with some changes for the sake of not hitting API limits or unnecessarily raising storage reqs. Most notably, the PDFs are served from one file through ActiveStorage on disk due to the GET limit attached to the S3 free tier & the newest message will delete the oldest on creation as to not massively inflate the message windows. The first would be minimised with proper caching & the second would actually be ideal in a production environment for the sake of persistence but I don't intend to update this beyond that which I submitted as my university project, not yet anyways.

This sign-in flow may seem strange but ad-hoc buttons seemed nicer than a list of email addresses and then the expecation for people to want to type them in.

There are three courses configured through the seed, Admin is a listed owner of them all, with Staff owning Course 1. Staff can be made an owner of the latter two by editing the course as Admin and adding the email address [email protected]. All being well, student's on differing courses shouldn't know of each others assistance. The accounts of the other students shown as taggable are accessible via student#{i}@erudite.com, with the 3 courses splitting the 15 students into thirds, i being the index of the student.

There's a bug with the WebSockets I haven't solved just yet whereby Messages don't always update on send, clicking the relevant topic tab again should solve the issue

The seeded messages randomly tag a user, messages the current user are tagged in are displayed with a different background. Also, the creation of a new messages deletes the message held at Message.first. This is solely to stop thousands of messages amassing

Generally, this project was ambitious given my experience and there are issues/things I'd have liked to added before submission some of which being:
- Caching to stop the PDF loading on every nav
- A better implementation of tracking the active tab
- Email verification for pw resets as currently anyone can do it
- An imitation feature instead of having Admins enrolled on a course to view student views
- A MD editor alongside Trix for choice
- JS features that permitted tagging via "@user" instead of a select
Frankly, given the timescale and the associated report I'm proud with what I managed to make, despite it being rough around the edges. The above bullet points are effectively pipe dreams for if I had double the time or a second developer.

Erudite