Phase 1: Course catalog and instructor management

In this phase, we would like to implement a course catalog. Each course has its own name and a short description to make it clear what it is about. Users will be able to browse the course offerings and click on individual courses for more information. Courses are publicly available, without the need for user registration.

App design

The app should be in line with our company brand manual, which you can find at this link.

Application structure

Home page

  • It can have any design, but it should be clear, attract the user's attention, and allow easy access to the list of courses.

List of courses

  • The page must be available at /courses, where all available courses will be displayed.
  • It should be possible to search for courses by name.
  • Each course should open on its own page at /courses/:uuid with additional information that is not visible on the course list and will be added in later stages. uuid is a unique identifier for the course.

Administration

  • The instructor logs in using the login form on the /login page.
  • Available on the /dashboard page, where the instructor manages courses as described above.
  • The link to this page should only be visible to logged-in instructors.
  • If someone tries to access this page by rewriting the address in the browser, the unregistered user must be automatically redirected to /login, where they will have the option to log in.

Lecturer

The lecturer will be the only user who will manage the courses. Registration is not yet available, so please include this fixed lecturer account with the following login credentials:

Username: lecturer

Password: TdA26!

After logging in, the lecturer will have access to controls where they can:

  • add new courses (name + description)
  • edit existing courses
  • delete courses
  • and also log out

Info: we will also want to address registration later on, so keep that in mind when designing the application.

Backend

Without any data, the website itself would be quite empty. That is why it’s necessary to implement a backend – the part of the application that runs operations that a basic user shouldn’t be able to and provides data for the frontend (the frontend is the part of the application that the user can interact with directly).

Your task will be to implement a REST API that will enable the management of courses, their materials, and activities (e.g., quizzes).

We have prepared the entire API specification for you in OpenAPI format – in it you will find a detailed description of all available endpoints, what data they expect, and what they return. The specification is in the form of a YAML file, which you can simply download and upload to an online visualizer such as Swagger.

This specification contains the minimum API endpoints that your application must contain in order to pass the automated tests. It’s up to you if you want to extend it in any way.

Database

Application data needs to be stored somehow, so you should implement a database[?] into your application that will store records of courses, materials, and activities. If you are a beginner, we recommend using one of the simpler database systems, such as SQLite or MySQL.

It is important to keep in mind that databases running inside our system will not be persistent. This means that when you restart the application or upload a new version, all data will be lost. We therefore strongly recommend that you automatically upload a set of basic data (so-called seeding) to the database when you start the application so that you don't have to add everything manually each time. Of course, this is not a problem if you use an externally hosted database.