ADVICE - my honours project - is a platform developed to aid students and student advisors in helping students with curricular advice. Whilst students usually visit a student advisor, this often leads to the same repetitive questions being asked. Though some of the information is readily available on UCT websites, it is not easily accessible with information being scattered across several UCT websites. ADVICE remedies this and provides a platform that collates information, offers summaries of course information and allows calculation of credits. ADVICE also hosts a chatbot that users can interact with to get answers to basic UCT specific questions.
In order to gather a sense of what the requirements were for a system that would address the problem we conducted a series of interviews with both students and SAs as they would be the primary users of the platform. They were able to give us insights on the sorts of problems they face with the current state of student advising as well as the kinds of features that they would like in a platform such as ours. The most requested features included:
A credits calculator to help students calculate how many credits are needed for them to graduate.
An easy to understand summary of the majors/courses section of handbooks.
A frequently asked questions section.
The technology stack used in the development of this platform is driven by the use of TypeScript. We decided to use Next.js which is a React framework. Next.js has all the benefits of React.js as well as built in TypeScript and Sass support as well as built-in support for routing, API routes and client-side/server-side rendering. This allows us to use Next.js for both the front-end as well as the back-end with Next.js serverless functions.
To style the platform, we took advantage of Next.js built-in support for Sass and used Sass. Sass is a superset of CSS. It gives us the ability to use functions in CSS, nesting rulesets and several other benefits which simplifies writing the styles.
Lastly for the database we chose to go the NoSQL route with MongoDB. This is because of the nature of the data that our platform will be dealing with. We anticipate that a lot of the data we work with will be unstructured and take on many different forms and a NoSQL database is perfectly suited for this. NoSQL performance also remains consistent regardless of the load that it takes which is important for scalability on this project. The database is hosted on MongoDB Atlas which is a cloud hosted cluster of database servers. This helps the platform to ensure increased reliability and up-time.
This platform uses the industry standard MVC architecture as it is well suited to our platform and it produces projects that are scalable and easily extensible. The ideology is that the platform is segmented in three discernible aspects. Firstly the model, it is responsible for all data-related logic the user works with. In our platform, this is represented by the database models that MongoDB uses as well as the TypeScript interfaces the front-end uses. Secondly is the view, the view is responsible for the user interface. In our platform this is all the front-end components that have been implemented to display information to the user in an aesthetically pleasing manner. Lastly is the controller, it acts as an interface between the model and view components to process all the logic and incoming requests, manipulate data using the model component and interact with the views to render the final output. The controller is realised in our application through all the TypeScript present in the app for updating state, manipulating rendered components etcetera.