# PO connect-4
![](./banner.png)
> Some of this project's code is in Dutch (commit messages, documents etc.),
> along with the whole website. This was originally a school project, but I'm
> going to keep maintaining this project during my exams and summer break
## Planned features:
- [x] working connect 4 game
- [x] client-server connection with socket.io
- [x] account creation
- [ ] anonymous accounts
- [x] invite links
- [x] safe password authentication
- [ ] play against the computer
- [x] follow people/add as friend
- [ ] game rating like on chess.com
- [x] rest api that handles all of this instead of some janky solution
- [ ] Messages
- [ ] Multiple game modes
- [ ] Themes
- [ ] Animations
## Used libraries and frameworks:
- [Flask](https://flask.palletsprojects.com/) for the REST API
- [ReactJS](https://reactjs.org/) to create the website
- [NextJS](https://nextjs.org/) for static react pages and html page routing
- [socket.io](https://socket.io/) for bidirecitonal communication during a game
- [SQLite](https://sqlite.org/index.html) for the database
- [nginx](https://nginx.org/en/) for serving static files generated by nextjs,
caching and reverse proxy
A design prototype of the website can be found on
[Figma](https://www.figma.com/file/rTciVQApAe6cwrH1Prl5Wn/4-op-een-rij?node-id=0%3A1).
An outdated version of the API documentation is still on Google Docs, but I'm
moving and updating it to be in api/readme.md.
![](./diagram.png)
## setup
To set up this project you'll need to install npm and pip dependencies, pull all
git submodules and compile voerbak and the sql extensions.
> I haven't figured out how to run this project on Windows, so please install
> [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) if you want
> to run this yourself on Windows. The distro you choose doesn't matter, though
> package names in ./configure may vary if your distro doesn't use the apt
> package manager.
### automatic setup using `./configure` (debian/ubuntu)
This script might also work on other distro's using the `apt` package manager.
To start the setup process you only need to run the following command:
```sh
./configure
```
The script calls sudo and apt install so some password input/manual confirmation
is required, but most of the install should be automated.
### manual setup (other distro's)
If your disto doesn't use the `apt` package manager, you can still run this
project by following these steps:
0. `git clone https://github.com/lonkaars/po-4-op-een-rij`
1. Make sure you have [python](https://python.org/downloads) (with pip and venv)
installed.
2. Make sure you have [nodejs](https://nodejs.org/en/download) (with npm)
installed.
3. Make sure you have [nginx](https://nginx.org/en/) installed.
4. Make sure you have [make](https://www.gnu.org/software/make/) and the gnu c
compilers [gcc](https://gcc.gnu.org/) installed (most distro's will have
these by default).
5. Install typescript, react-scripts and yarn:
```sh
npm i -g typescript yarn
```
6. Create a new python virtual environment and install pip modules:
```sh
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
7. Install node modules:
```sh
yarn
```
8. Build voerbak:
```sh
cd voerbak
make
```
9. Download submodules:
```sh
git submodule init
git submodule update
```
10. Initialize database and build SQL extensions:
```sh
cd database
./init_db.sh
make
```
## How to start
In order to start this project you'll need three terminal windows to start the
flask server, react server, and nginx seperately:
```sh
# term 1
source venv/bin/activate
python3 api/main.py
# term 2
yarn dev
# term 3
sudo nginx -c $PWD/nginx.conf
# if nginx can't run as the user nobody, try running the following command and restart nginx:
# this command is also in ./configure
sed "s/user nobody/user $(whoami)/" -i nginx.conf
```