University of Peradeniya

|

Department of Computer Engineering

Redefining Debate Management

Vivaathi

The ultimate digital transition for debate tournaments.
Move from cumbersome paper-based scoring to a seamless, real-time cloud experience.

React TypeScript Vite Tailwind CSS Spring Boot PostgreSQL REST API Axios

Project Structure

Organized codebase hierarchy for Backend (Spring Boot) and Frontend (React).

DMS/ ├── backend/ # Spring Boot application │ ├── src/main/java/com/dms/ │ │ ├── entity/ # JPA entities │ │ ├── dto/ # Data Transfer Objects │ │ ├── repository/ # Spring Data JPA repos │ │ ├── service/ # Business logic layer │ │ ├── controller/ # REST API controllers │ │ ├── security/ # JWT filter & util │ │ ├── exception/ # Global exception handler │ │ └── config/ # Security & CORS config │ └── src/main/resources/ │ ├── application.properties # DB & JWT config │ └── data.sql # Seed data └── frontend/ # React application └── src/ ├── components/ │ ├── layout/ # Navbar, Footer, PublicLayout │ └── common/ # Avatar, Toast, SearchBar, Spinner ├── pages/ │ ├── public/ # Home, Scoring, News, About, Search │ ├── auth/ # RoleSelect, Login, Signup │ ├── dashboard/ # Debater, Judge, Organizer dashboards │ ├── tournament/ # Tournament page, CreateWizard, ScoreSheet │ └── shared/ # Notifications, Calendar, Settings, Profile ├── context/ # AuthContext (JWT + user state) ├── api/ # Axios instance + all API calls └── types/ # TypeScript interfaces

System Architecture

High-level Software Architecture for Full-Stack Debate Management System

Frontend

React
TypeScript
Vite
Tailwind CSS
React Router DOM
Recharts
API Calls
Requests / Responses

Backend

Spring Boot Java
Entity
DTO
Repository
Service REST API Architecture
Controller
Security Config JWT
Exception Handling
Database Access
Requests / Responses

Database

PostgreSQL

Proper Relational schema with:

  • Foreign keys
  • Optimized Indexes

Database Entity-Relationship (EER)

Our optimized relational schema designed for high-performance debate data management.

calendar_events
id bigint
description varchar(1000)
end_at timestamp
start_at timestamp
title varchar(500)
user_id bigint
debater_stats
id bigint
best_debater_count int
losses int
matches_played int
wins int
debater_id bigint
judge_stats
id bigint
losses int
matches_judged int
wins int
judge_id bigint
users
id bigint
email varchar(255)
full_name varchar(255)
username varchar(255)
role varchar(50)
expertise varchar(255)
location varchar(255)
years_of_experience int
created_at timestamp
news_posts
id bigint
category varchar(50)
content text
title varchar(255)
author_id bigint
notifications
id bigint
message varchar(1000)
read_status boolean
created_at timestamp
user_id bigint
school_debaters
id bigint
debater_id bigint
school_id bigint
tournaments
id bigint
name varchar(255)
status varchar(50)
debate_type varchar(100)
tournament_type varchar(100)
organizer_id bigint
tournament_judges
id bigint
judge_id bigint
tournament_id bigint
score_sheet_templates
id bigint
name varchar(255)
criteria_json jsonb
tournament_id bigint
discussion_comments
id bigint
content text
user_id bigint
tournament_id bigint
match_id bigint
parent_comment_id bigint
schools
id bigint
name varchar(255)
tournament_id bigint
matches
id bigint
round_number int
topic varchar(1000)
status varchar(50)
tournament_id bigint
proposition_school_id bigint
opposition_school_id bigint
match_judges
id bigint
judge_id bigint
match_id bigint
score_sheet_submissions
id bigint
proposition_score double
opposition_score double
judge_id bigint
match_id bigint
selected_best_speaker_id bigint

Operational Workflow Diagram

Organizer Actions

Tournament PageSetup & Config
Create Match FlowAssigning Teams & Judges

System Processing

Generate Secure LinksJudge-Specific Access
Real-Time NotificationsSent to Judges & Debaters

Match Result Logic

  • • Calculate Averages
  • • Save Winner & POTM
  • • Mark as Completed

Judge Flow

Open Assigned Score SheetMatch ID Validation
Submit Score SheetScores & Comments
Prevent Duplicate Submission

Debater Context

Passive RoleNo action required
Receives Match InfoThrough Notifications Panel

Post-Match Data Synchronization

Match Completed

Trigger Event

Stream 1: Stats Update

Statistics Update

Debater, Judge & School metrics

Stream 2: End Results

Tournament Results

Calculate Winners & Leaderboards

Application Walkthrough

A step-by-step visual guide through the Vivaathi platform.

01

Choose Your Role

Register by selecting your appropriate role — Debater, Judge, or Organizer. Each role unlocks a tailored experience with specific features and permissions designed for that participant type.

Role Selection - Choose between Debater, Judge, or Organizer
02

Complete Registration

Fill in your profile details — full name, username, email, bio, location, and profile picture URL. The role-based toggle (Debater / Judge / Organizer) ensures the right fields and capabilities are assigned from the start.

Registration form with role selection and profile fields
03

Personal Dashboard

Every user gets a personalized dashboard to keep track of their stats — matches played, wins, losses, win rate, player of the match awards, and best debater recognition. The dashboard also shows win/loss distribution charts and recent notifications.

User dashboard showing statistics and notifications
04

Start a New Tournament

Organizers can create tournaments step by step. Begin with Basic Details — set the tournament name and select the debate type (Traditional, Asian Parliamentary, British Parliamentary, Sulalum Sotpor, Vazhakaadu Mandram, or Other). A guided wizard with a 5-step progress bar ensures nothing is missed.

Create Tournament - Step 1: Basic Details with tournament name and debate type
05

Select Tournament Format

Choose between Knockout (single elimination — winners advance, losers are eliminated) or League (round-robin style — all teams play multiple matches). The stepper tracks progress through Schools & Debaters, Judges, and Score Sheet setup steps.

Create Tournament - Step 2: Choose Knockout or League format
06

Assign Judges

Search and add judges to the tournament. Each judge is assigned a unique ID (JUDGE-001, JUDGE-002, etc.). Manage the panel easily — add or remove judges with a single click before proceeding to score sheet configuration.

Judges assignment - search and add judges to the tournament
07

Score Sheet Setup

Customize scoring criteria for the tournament. Define categories like Matter, Manner, Method, Rebuttal, and Teamwork — each with configurable max marks. Add or remove criteria to match your debate format. The total maximum marks are calculated automatically.

Score Sheet Setup with customizable criteria and max marks
08

Review & Create

Review all tournament details before creation — tournament name, debate type, tournament type, schools, judges, and score criteria are all summarized. See the full list of participating schools with their debaters. Hit Create Tournament to finalize everything.

Review and Create - tournament summary before creation
09

Live Tournament Dashboard

Once created, the tournament goes ACTIVE. View all matches with their matchups, topics, and assigned judges. Create new matches, generate next rounds, and navigate through Leaderboard, Discussion, Score Sheet, Results, and Info tabs.

Active tournament dashboard with matches, leaderboard, and navigation tabs
10

Real-Time Notifications

Notifications are automatically sent to judges and debaters when matches are created. Judges receive assignment details with match IDs, tournament names, and organizing academy info — keeping everyone informed without manual coordination.

Notifications - judges and debaters receive automatic match assignments

The Engineering Team

The core team behind the Vivaathi platform.

P. Pathimilan

P. Pathimilan

Application Security & Backend Integration Engineer
About

Good in application security and authentication systems design. Focuses on secure backend logic and access control mechanisms.

GitHub LinkedIn ePortfolio
K. Bhaveenthan

K. Bhaveenthan

Backend Systems & API Architect
About

An enthusiast in database design and scalable backend systems. Developer of efficient data flow and structured API architecture.

GitHub LinkedIn ePortfolio
A. Lakshigan

A. Lakshigan

UI/UX Engineer
About

Good in user interface design and experience optimization. Skilled in creating responsive layouts and seamless frontend integration.

GitHub LinkedIn ePortfolio
P. Manojh

P. Manojh

Frontend Developer & QA Engineer
About

Frontend developer ensuring reliable interactive application workflows. Ensure user validation and reliable user interactions.

GitHub LinkedIn ePortfolio
Coming Soon Q4 2026

Vivaathi Pro

Bringing AI-driven feedback analysis and multi-room seamless streaming to premium institutional tournaments. Stay tuned as we scale debate infrastructure worldwide.