An intelligent web-based application that analyzes thousands of chess games to extract insights, visualize trends, and assist players in improving their strategic understanding. Developed as part of the COMP7039 β Agile Processes module (Autumn 2025).
Live Demo: https://chess-app.kkv9.ovh/
Sprint Progress: 2/3 Sprints Completed
Repository: https://github.com/KKV9/chess-analyzer
- Project Overview
- Features
- Architecture
- Technology Stack
- Agile Development
- Installation
- Usage Guide
- API Documentation
- Team
Chess Analyzer is a web-based application that takes large collections of chess games and turns them into useful feedback for players. It works by analyzing performance, spotting trends in play, and giving feedback on how players approach different situations or openings. The goal is to help users understand their play more clearly through accurate data rather than guesswork, allowing them to hone their skills.
This project demonstrates Agile development practices using the Scrum framework, with work divided into three focused sprints:
- Data Input & Validation (Sprint 1)
- Data Visualization (Sprint 2)
- Knowledge Extraction with AI (Sprint 3)
- Import and validate chess game datasets (CSV format)
- Visualize game statistics through interactive charts
- Generate AI-powered strategic insights using Google Generative AI
- Deploy a production-ready application with CI/CD
- Demonstrate Agile/Scrum methodologies in practice
| Feature | Status | Description |
|---|---|---|
| CSV File Upload | β Complete | Upload your own chess games (max 2MB) |
| Data Validation | β Complete | Validate chess CSV datasets for integrity and format |
| Win Rate Analysis | β Complete | Interactive charts showing black vs white performance |
| AI Player Analysis | β Complete | Strategic profiles using Google's Generative AI |
| Animated Chess Demos | β Complete | Interactive Opera Game with move animations |
| Responsive Design | β Complete | Mobile-friendly interface with dark theme |
Scrum Master: Cillian Houlihan
Velocity: 25/25 story points
- β CSV file upload system with 2MB limit
- β Python validation script (validate.py)
- β Data integrity checking (missing values, invalid format)
- β Sample size reduction (200,000 β 5,000 games)
- β Express.js backend with Multer file handling
- β GitHub repository setup and team onboarding
Scrum Master: Daniel Sheehan
Velocity: 36/36 story points
- β Win rate visualization with Chart.js
- β Interactive bar charts (White/Black/Draws)
- β Enhanced UI with CSS animations
- β Animated chess board demo (Opera Game)
- β CI/CD pipeline with GitHub Actions
- β AWS EC2 deployment with zero-downtime
- β Nginx reverse proxy configuration
- β Let's Encrypt SSL certificates
Scrum Master: Scott Wolohan
Status: In Progress
- β Google Generative AI (Gemini) integration
- β Strategic player profile analysis
- β Opening preference identification
- β Personalized training recommendations
- π Final report documentation
- π Presentation preparation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Browser β
β (HTML/CSS/JavaScript + Chart.js) β
ββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β HTTP/HTTPS Requests
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Nginx Reverse Proxy β
β (SSL, Port 443β3000, Caching) β
ββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Express.js Server (Node.js) β
β Routes: /upload-csv, /run-validation, β
β /run-black-white, /run-strategy β
ββββββββββββββ¬ββββββββββββββββββββββ¬βββββββββββββββββββββ
β β
β Multer Upload β Child Process Exec
βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββββββββ
β data/data.csv β β Python Scripts β
β (5000 games) β β - validate.py β
ββββββββββββββββββ β - wins.py β
β - strat.py β
ββββββββββββ¬ββββββββββββ
β
βΌ
ββββββββββββββββββββββββ
β Google Generative AI β
β (Gemini API) β
ββββββββββββββββββββββββ
| Layer | Technologies | Purpose |
|---|---|---|
| Frontend | HTML5, CSS3, JavaScript, Bootstrap 5, Chart.js | User interface and data visualization |
| Backend | Node.js 14+, Express.js 4.18 | Web server and API routing |
| File Handling | Multer | CSV file uploads (max 2MB) |
| AI/ML | Google Generative AI (Gemini), Python 3.10 | Strategic analysis and insights |
| Data Processing | Python CSV module, JSON | Chess game analysis and statistics |
| DevOps | GitHub Actions, PM2, Nginx | CI/CD and process management |
| Hosting | AWS EC2 (t3.micro, eu-north-1), Cloudflare DNS | Production deployment |
| Security | Let's Encrypt SSL, SSH keys, .env variables | HTTPS encryption and secrets management |
chess-analyzer/
βββ .github/
β βββ workflows/
β βββ deploy.yml # CI/CD pipeline configuration
βββ public/ # Frontend assets
β βββ css/
β β βββ styles.css # Main stylesheet with animations
β βββ js/ # JavaScript modules
β β βββ index.js # Chess board animations
β β βββ strategy.js # AI analysis interface
β β βββ validator.js # Data validation UI
β β βββ visualiser.js # Chart.js visualizations
β βββ images/
β β βββ logo.png # Application logo
β β βββ favicon_white.png
β β βββ favicon_black.png
β βββ index.html # Homepage with chess demo
β βββ validator.html # CSV validation page
β βββ visualiser.html # Win rate charts page
β βββ strategy.html # AI analysis page
βββ scripts/ # Python analysis scripts
β βββ validate.py # CSV validation (Sprint 1)
β βββ wins.py # Win rate analysis (Sprint 2)
β βββ strat.py # AI player analysis (Sprint 3)
β βββ requirements.txt # Python dependencies
βββ data/
β βββ data.csv # Chess games dataset (user uploads)
βββ venv/ # Python virtual environment (gitignored)
βββ logs/ # PM2 application logs
βββ server.js # Express server with API endpoints
βββ ecosystem.config.js # PM2 production configuration
βββ package.json # Node.js dependencies
βββ .env # Environment variables (gitignored)
βββ .env.example # Environment template
βββ README.md # This file
| Sprint | Duration | Focus | Scrum Master | Velocity | Status |
|---|---|---|---|---|---|
| Sprint 1 | 22 Sep β 29 Sep (7 days) | Data Input & Validation | Cillian Houlihan | 25/25 points | β Complete |
| Sprint 2 | 6 Oct β 20 Oct (14 days) | Visualization & DevOps | Daniel Sheehan | 36/36 points | β Complete |
| Sprint 3 | 3 Nov β 17 Nov (14 days) | AI Integration & Docs | Scott Wolohan | 18+ points | π In Progress |
| Member | Role | Contributions |
|---|---|---|
| Cillian Houlihan | Sprint 1 Scrum Master | Data validation, CSV sampling, project foundation |
| Daniel Sheehan | Sprint 2 Scrum Master | Visualization, UI/UX, GitHub repo management |
| Scott Wolohan | Sprint 3 Scrum Master | AI integration, research, strategic analysis |
| CiarΓ‘n O'Brien | DevOps Lead | AWS deployment, CI/CD, Nginx config, infrastructure |
- Project Management: Jira (Product Backlog, Sprint Backlogs, Burndown Charts)
- Version Control: GitHub with feature branches and pull requests
- Communication: Discord (daily standups), Weekly lab sessions (in-person reviews)
- Ceremonies: Sprint Planning, Daily Standups, Sprint Reviews, Retrospectives
- Metrics: Story points, velocity tracking, burndown charts
- π Perfect velocity in Sprint 2 (36/36 points, 100% completion)
- π Automated CI/CD deployment (Oct 7, 2025 - commit 87699f5)
- π¨ Professional UI with animations and responsive design
- π€ AI-powered player analysis operational
- π Interactive data visualizations with Chart.js
- Node.js (v14 or higher)
- Python (v3.10 recommended)
- npm (v6 or higher)
- Google Generative AI API Key (Get one free)
- Clone the Repository
git clone https://github.com/KKV9/chess-analyzer.git
cd chess-analyzer- Install Node.js Dependencies
npm install- Setup Python Virtual Environment
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# Install Python dependencies
pip install --upgrade pip
pip install -r scripts/requirements.txt
# Deactivate when done
deactivate- Configure Environment Variables
# Copy template
cp .env.example .env
# Edit .env with your settings
nano .env.env file:
# Server Configuration
PORT=3000
# Google Generative AI API Key
GENAI_KEY=your_google_genai_api_key_here
# Node Environment
NODE_ENV=development- Start the Application
# Development mode
node server.js
# Or with PM2 (production-like)
npm install -g pm2
pm2 start ecosystem.config.js
pm2 logs chess-analyzer- Access the Application
http://localhost:3000
The application automatically deploys to AWS EC2 when code is pushed to the master branch via GitHub Actions.
Manual Deployment:
# SSH to EC2
ssh ubuntu@your-ec2-ip
# Navigate to project
cd /var/www/chess-analyzer
# Pull latest changes
git pull origin master
# Install dependencies
npm install --omit=dev
# Setup Python venv if needed
python3 -m venv venv
source venv/bin/activate
pip install -r scripts/requirements.txt
deactivate
# Reload application
pm2 reload ecosystem.config.js --update-env- Navigate to the Validator page
- Click "Choose File" and select your CSV file (max 2MB)
- Click "Upload File"
- Once uploaded, click "Run Validation" to verify data integrity
CSV Format Requirements:
- Must contain columns:
White,Black,Result - Result format:
1-0(white wins),0-1(black wins),1/2-1/2(draw) - Maximum file size: 2MB
- Go to Visualizer page
- Click "Graph Wins" to analyze uploaded data
- View interactive Chart.js visualizations showing:
- White win percentage
- Black win percentage
- Draw percentage
- Total games analyzed
- Access Strategy Analysis page
- Enter a player name exactly as it appears in your CSV
- Click "Analyze Player"
- Wait 10-30 seconds for AI analysis
- Review strategic profile including:
- Playing style (Aggressive/Positional/Tactical/Defensive)
- Strengths and weaknesses
- Opening preferences
- Middlegame skills assessment
- Personalized training recommendations
- Homepage features an animated Opera Game
- Watch pieces move, captures, and special effects
- See check/checkmate indicators
- Confetti animation on game completion
POST /upload-csv
Content-Type: multipart/form-data
Body:
csvFile: [file] (max 2MB)
Response:
{
"success": true,
"message": "File uploaded successfully",
"filename": "data.csv",
"size": 1234567
}GET /run-validation
Response: Plain Text
β
Found file: data/data.csv
β
Header columns: ['White', 'Black', 'Result', ...]
β
First data row: [...]
π CSV validation completed successfully!GET /run-black-white
Response: JSON
{
"success": true,
"total_games": 5000,
"white_wins": 1876,
"black_wins": 1634,
"draws": 1490,
"white_percentage": 37.52,
"black_percentage": 32.68,
"draw_percentage": 29.80
}GET /run-strategy?player=PlayerName
Response: Formatted Text
π Searching for games by: PlayerName
β
Found database: data/data.csv
β
Found 42 game(s) for PlayerName
π§ Generating AI analysis... (this may take 10-30 seconds)
============================================================
PLAYER PROFILE:
- Style: Aggressive
- Strengths: [AI-generated insights]
...
============================================================The validate.py script ensures:
- CSV file exists and is readable
- Required columns present (
White,Black,Result) - Headers are valid
- Data rows contain values
- No empty or malformed entries
The wins.py script:
- Parses all game results
- Counts wins for white, black, and draws
- Calculates accurate percentages
- Returns structured JSON data
- PM2 Monitoring:
pm2 monitshows real-time CPU/memory usage - Application Logs:
pm2 logs chess-analyzerfor debugging - Health Checks: Manual testing after each deployment
- CI/CD Testing: GitHub Actions verifies deployment success
- β HTTPS encryption via Let's Encrypt
- β SSH keys for server access (admin + GitHub Actions)
- β
Environment variables in
.env(gitignored) - β Input sanitization on all API endpoints
- β File upload restrictions (2MB max, CSV only)
- β API rate limiting (60 second timeout)
- β GitHub Secrets for CI/CD credentials
"File size exceeds 2MB limit"
- Reduce your CSV file size
- Remove unnecessary columns
- Sample fewer games
"Missing GENAI_KEY environment variable"
# Verify .env file exists
cat .env | grep GENAI_KEY
# Restart server after adding key
pm2 restart chess-analyzer"Player not found in database"
- Check spelling matches CSV exactly
- Player names are case-insensitive
- Ensure player has games in uploaded file
Python Script Errors
# Activate virtual environment
source venv/bin/activate
# Reinstall dependencies
pip install -r scripts/requirements.txt
# Test script manually
python3 scripts/validate.pyDeployment Issues
# Check application status
pm2 status chess-analyzer
# View logs
pm2 logs chess-analyzer --lines 50
# Restart application
pm2 restart chess-analyzer- Interim Report - Submitted 02 November 2025
- Final Report - Due 01 December 2025
- Presentation Slides - Scheduled 24 November 2025
Module: COMP7039 β Agile Processes
Institution: Munster Technological University
Semester: Autumn 2025
Lecturer/Product Owner: Dr Alex Vakaloudis
This project demonstrates:
- Scrum framework implementation
- Agile software development practices
- Sprint planning and execution
- Continuous integration and delivery
- Team collaboration and communication
- Iterative development and feedback loops
| Component | Status | Notes |
|---|---|---|
| Data Upload | β Production | Multer integration, 2MB limit |
| Data Validation | β Production | Handles 5000+ game datasets |
| Visualization | β Production | Interactive Chart.js graphs |
| AI Analysis | β Production | Google Gemini integration |
| Deployment | β Production | AWS EC2 with CI/CD |
| Documentation | π In Progress | Interim report complete, final report WIP |
| Member | Role | GitHub | Contributions |
|---|---|---|---|
| Cillian Houlihan | Sprint 1 Lead | @houlihan999 | Data validation, CSV processing |
| Daniel Sheehan | Sprint 2 Lead | @Daniel-Sheehan-Projects | UI/UX, visualization, repo management |
| Scott Wolohan | Sprint 3 Lead | @ScottW23 | AI integration, research, documentation |
| CiarΓ‘n O'Brien | DevOps Lead | @KKV9 | Infrastructure, CI/CD, deployment |
This project is developed for educational purposes as part of COMP7039 β Agile Processes.
Not intended for commercial use.
All chess data used for analysis is from publicly available sources and used for educational demonstration only.
Chess Analyzer - Developed with βοΈ using Agile/Scrum
Β© 2025 - Munster Technological University
