ChessDB is a Flask-based web application backed by a MySQL relational database that simulates a FIDE-style chess management system.
It models real-world entities like players, coaches, arbiters, teams, tournaments, halls, and matches, while enforcing constraints with a carefully designed relational schema.
This project demonstrates:
- Complex relational modeling (inheritance, weak entities, many-to-many, participation constraints).
- Role-based access control (DB Managers, Players, Coaches, Arbiters).
- Integration of SQL schema, seed data, and a Python/Flask frontend.
- A retro-style pixel-art UI using custom HTML/CSS.
- Backend: Python 3.12, Flask
- Database: MySQL
- Frontend: HTML, CSS (retro pixel-art style, Press Start 2P font)
- Add new users (Players, Coaches, Arbiters).
- Enforce validation rules (passwords, ELO rating > 1000, date formats).
- Manage entities like halls (rename, edit).
- View their personal dashboard with pixel-art portrait.
- See all opponents they have faced.
- Identify their most played opponents and average opponent ELO.
- View current coaching contract and team info.
- Create new matches (respecting hall availability, time slots, contract period).
- Assign players to unassigned matches.
- Delete matches if needed.
- Browse all available halls.
- View assigned matches.
- Submit ratings for completed matches.
- Track personal statistics (total matches rated, average rating).
- Inheritance: User → Player, Coach, Arbiter.
- Weak Entities:
Table_Entitydepends onHall. - Many-to-Many: Players ↔ Teams (
Plays_In), Arbiters ↔ Certifications, Coaches ↔ Certifications. - Constraints:
- ELO rating > 1000 enforced in
Player. - Unique arbiter assignment per time slot.
- Teams must face different opponents.
- Matches restricted to slots
1–4.
- ELO rating > 1000 enforced in
The schema is defined in:
sql/01_schema.sql→ DDL for database creation.sql/02_seed.sql→ Seed data (users, teams, matches, etc.).




