Change the website's theme

Select either light or dark mode based on your operating system settings

A user answering a single choice question correctly. The question features notes which give the user more context

Quiz World

Technologies used

  • Angular 20
  • Angular Material
  • ASP.NET 8
  • Entity Framework Core 8
  • MS SQL Server
  • Redis
  • SignalR

Project overview

Quiz World is a web application that's all about quizzes. The app provides a clean UI for playing and creating quizzes. The quizzes in the app support three types of questions:

  • Single-choice questions - multiple options provided, of which one is correct
  • Multiple-choice questions - multiple options provided, of which at least one is correct. Players must pick all correct options
  • Text questions - the player must input the correct answer in the provided text field

In addition to creating and playing quizzes, the app also features:

  • Role-based authorization - the app supports different roles that give their users various permissions. Certain actions performed by certain roles are also logged, which reduces the risk of abuse with power
  • Good UX when creating quizzes - the UI packs various quality-of-life features to make creating (and editing) quizzes easier. For example, when adding a new answer to a question, its text field will receive automatic focus, allowing them to start typing immediately
  • Feedback during a game - players can easily tell if they have answered a question correctly or incorrectly. The app also provides a "performance" tracker, which shows the player how many questions they've got right or wrong, as well as if there are questions that are still awaiting an answer
  • Administration area - in line with the role-based authorization mentioned earlier, users that are administrators can manage certain parts of the app, such as promoting users to and demoting users from certain roles

The app was originally written in Angular 16 and ASP.NET 6. It has since been migrated to Angular 19/20 and ASP.NET 8. On the front-end, the migration included a total overhaul of the UI and the addition of new quality-of-life features. The front-end also saw improvements in the code quality and the adoption of modern Angular features like signals. On the back-end, the migration included a significant improvement to the code and its architecture, as well as making the web API easier to consume (for example, in its initial version, there were three endpoints for retrieving a list of quizzes - one for all quizzes, one for searching by title, and one for retrieving a user's quizzes. In the new version, all of those functionalities were merged in one endpoint). The backend also utilizes a Redis cache store to maintain a list of "blacklisted" JWTs, which enables the logout functionality of the app.

Back to the portfolio index