Blitz Arena Manager

Chess tournament manager appJul 2018–Feb 2020

Screenshot or cover image from Blitz Arena Manager

Project description

A full-stack web application designed for conducting over-the-board blitz chess tournaments, featuring interfaces for tournament administrators, players, and digital signage.

The project was developed for the “Le Roi” Chess Team of the National Technical University of Athens. It was used to run 2 open university tournaments as well as 3 commercial tournaments for the Athens Chess Club, hosting over 20 players at a time and hundreds of games in total.

Smart pairing

Blitz arena tournaments were popularized in online chess platforms as fast paced competitions with nonstop pairings instead of predesignated rounds.

Our team developed a novel format that brings arenas into the world of over-the-board tournaments and employs a smart live pairing system which takes into account the players' global Elo rating, their tournament points, and the time elapsed since their last pairing among other factors, to produce interesting and competitive games.

Technical overview

Backend

  • Built with Node.js and TypeScript , the project also uses the Express framework for the REST API.
  • PostgreSQL is used for the database, along with SQL triggers to calculate the player points and stats, and ensure data consistency.
  • Sequelize v6 and Sequelize TypeScript provide the ORM (Object-Relational Mapping) layer and abstractions to define models.

Also, memory-cache is used for page caching, Luxon (the successor of moment.js) for datetime manipulation, and winston for logging.

Frontend

  • Vue is the frontend framework of the app (initially written in Vue 2 and later migrated to Vue 3) with a TypeScript codebase and employment of class components and decorators.
  • Pinia is used for state management (migrated from Vuex ).
  • Bootstrap Vue offers UI components built with Bootstrap.
  • Vite serves as the build tool (migrated from Webpack ).

Also, mande is used for API requests, Mozilla's Fluent library for internationalization (Greek and English interfaces), and Luxon for datetime manipulation.