# Solid Chess

This is a decentralized Chess game, build on top of Solid. No central sever is required to run or set up a game. All personal data about the game is stored on your POD. Requests to join and updates of a game are sent to the inbox of your opponent directly.

The game is available in the browser and terminal. Check the live version or the screencast of the Web app, and the screencast of game in the terminal.

WARNING: The "Clear inbox" button removes all files with (chess) game data in your inbox! So be careful!

## Documentation

- Code documentation can be found here.
- If you want to know more about how the application interacts with different Solid PODs, you can read this.

## What you can do

- Create a new game, which will send a request to join to your opponent.
- Join a game
- Continue a game you started earlier

## Used technologies/concepts/libraries

- Linked Data: to represent/share the details of the games
- Decentralization: information is fetched from different servers
- Solid PODs: store personal data about the games
- LDflex for Solid: simple access to data in Solid pods through LDflex expressions
- SPARQL: query/update games
- RDF: representation of the data
- Comunica: querying different data sources
- chess.js: chess engine
- chessboard.js: chessboard

## Install

### Web app

You can run the game locally by doing the following:

- Clone this repo.
- `npm i`: install Node.js dependencies.
- `npm run build:web`: bundle the JavaScript via Webpack. The result can be found in `web-app/dist/main.js`.
- Serve the contents of the root folder, e.g., via `http-server`.

### CLI

- `npm i solid-chess -g`: install the game.
- `solid-chess`:launch the game.

## Credits

- Freevector Chess Pieces Set (CC BY-SA 4.0, no changes were made)
- Font Awesome chess-rook icon (CC BY 4.0, no changes were made)

## License

© 2018 Pieter Heyvaert, MIT License