I’m building a smaller, local version of Lichess to learn more about how it works, improve my knowledge of real time protocols and local first web.
I’m learning Go as I go about building this project, and I’m stoked about the delicate balance between simplicity and low level control provided by the language.
Functional Requirements
A wishlist of what stuff users and the system should be able to do.
- Anonymous game playing (play with friend in lichess)
- Real time gameplay (moves of opponent relayed to player in real time)
- Game logic validation
- Game state persistence (server side)
- Client interface
- View ongoing game (spectate)
- Leaderboard (for tournaments)
- Rate Limiting
- Matchmaking
- Scoring (Elo/Glicko/any other system)
Non Functional Requirements
- High concurrency support
- Low latency move relaying
- Extensible (plan to build an online version and scale later)
Suggested Tech stack
- Go (server side logic)
- Websockets (real time communication)
- Javascript (client interface)
Since it’s a local system, I’m trying to keep it as lean as possible, therefore I’ll be using SQLite or even a flat file as a database.
![init data model]