Skip to content
Go back

Designing a minimal, local-first version of lichess.

Published:  at  08:52 PM

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.

  1. Anonymous game playing (play with friend in lichess)
  2. Real time gameplay (moves of opponent relayed to player in real time)
  3. Game logic validation
  4. Game state persistence (server side)
  5. Client interface
  6. View ongoing game (spectate)
  7. Leaderboard (for tournaments)
  8. Rate Limiting
  9. Matchmaking
  10. Scoring (Elo/Glicko/any other system)

Non Functional Requirements

  1. High concurrency support
  2. Low latency move relaying
  3. Extensible (plan to build an online version and scale later)

Suggested Tech stack

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]


Suggest Changes

Previous Post
Building a Python Package to Turn Unstructured Data into Financial Insights
Next Post
A quick introduction to data modeling in real world applications