Chess Application
Developed a full-stack chess application as a BYU CS 240 course project. The system included a command-line client, a Java server, persistent data services, HTTP-based web services, WebSocket-based realtime interaction, and the full rules of chess. The project highlights modular application design, testing, persistence, and building a medium-scale server program from the ground up.

Overview
This project used the game of chess as the vehicle for building a medium-scale software system. The work began with implementing the rules of chess, then expanded into a full server-backed application where multiple clients could connect, register users, create games, and play against one another.
The class emphasized building software in a principled way: up-front design, clean code construction, unit testing, assertions, error handling, and modular architecture. One milestone also required rewriting the early chess-rule implementation from a base template during a timed exam, which reinforced working independently and efficiently under pressure.
Architecture Focus
The course outcomes centered on:
- building a medium-scale server program with data persistence
- applying software design principles such as single responsibility, low coupling, information hiding, and avoiding code duplication
- using relational database design and programmatic data access
- incorporating basic security concepts
- validating behavior through testing
- using professional development tools such as debuggers, IDEs, version control, and documentation tools
Technology Stack
The project touched a broad software stack:
- Java
- command-line client tooling
- HTTP and Web Services
- MySQL-backed data services
- WebSocket-based realtime interaction
- security, testing, and application design
Project Progression
The chess project progressed through several architectural stages:
- Implement the rules of chess and core game-state logic
- Rewrite the early project from scratch during a timed exam to demonstrate independent mastery
- Build a chess server that supports registering users, joining games, and running multiplayer interactions
- Add persistence and security-oriented design so the program behaves like a real software system rather than an isolated assignment
Results

Joining a game through the chess client interface