This project is still in the early stages of development. Expect bugs and incomplete features.
Yet another Chess web app. Live demo at ches.su.
- play against other users in real-time
- spectate and chat in ongoing games with other users
- optional user accounts for tracking stats and game history
play solo against Stockfish(wip)- mobile-friendly
- ... and more (view roadmap)
Built with Next.js 13, Tailwind CSS + daisyUI, react-chessboard, chess.js, Express.js, socket.io and PostgreSQL.
Configuration
This project is structured as a monorepo using npm workspaces, separated into three packages:
client- Next.js application for the front-end, deployed to ches.su.server- Node/Express.js application for the back-end, deployed to server.ches.su.types- Shared type definitions for the client and server.
For separate deployments, you may exclude the client or server directory. However, you should include the types folder as it contains shared type definitions that are required by both packages.
Scripts
# install all dependencies, including eslint and prettier for development
npm install
# concurrently run frontend and backend development servers
npm run dev # -w client/server to run only one
# for separate production deployments
npm install -w client
npm install -w server
npm run build -w client
npm run build -w server
npm start -w client
npm start -w server
Environment variables
You may also create a .env file in each package directory to set their environment variables.
client:
NEXT_PUBLIC_API_URL=http://localhost:3001 # replace with backend URL
server:
CORS_ORIGIN=http://localhost:3000 # replace with frontend URL
PORT=3001
SESSION_SECRET=randomstring # replace for security
# PostgreSQL connection info (required)
PGHOST=db.example.com
PGUSER=exampleuser
PGPASSWORD=examplepassword
PGDATABASE=chessu
Contributing
Pull requests are welcome. For feature changes or suggestions, please open an issue first for discussion.
