Note: This project was originally bootstrapped using AI-assisted programming (Cursor IDE + Claude) in 2025. The web multiplayer version was built with Claude Code in 2026.
A Scrabble board game for the Estonian language with web-based multiplayer. Play with friends online — no installation or registration needed. Supports Estonian special characters (õ, ä, ö, ü, š, ž) with full morphological word validation via Hunspell.
Play now: klauseduard.duckdns.org/scrabble
Keywords: scrabble, estonian language, word game, multiplayer, web game, python, fastapi, websocket
Before you begin, ensure you have the following installed:
sudo apt-get install python3 # For Ubuntu/Debian
sudo dnf install python3 # For Fedora
brew install python3
pip --version # or pip3 --version
git clone https://github.com/klauseduard/estonian-scrabble.git
cd estonian-scrabble
cmd, press Enterterminal, press Entercd path/to/scrabble # Replace with actual path
pip install -r requirements.txt # or pip3 install -r requirements.txt
python main.py # or python3 main.py
The game includes a web-based multiplayer mode using WebSockets.
pip install -r requirements-server.txt
uvicorn server.app:app
Then open http://localhost:8000 in your browser.
docker compose up --build
Then open http://localhost:8080 in your browser.
Fly.io (free tier available):
fly launch # first time
fly deploy # subsequent deploys
Railway: connect your GitHub repo and Railway will auto-detect the Dockerfile.
Quick sharing with ngrok:
uvicorn server.app:app --port 8080
ngrok http 8080
Share the ngrok URL with friends to play remotely.
Lobby — create a new game or join with a room code
Waiting room — share the room code with friends
Game board with scores, tile rack, and chat
In-game chat with system move notifications
Screenshots show the Pygame desktop version, which is still available.
Desktop game board with premium squares
Valid word placement (green highlight)
python main.pypip install -r requirements.txt to install dependencies.Report bugs or suggest features: GitHub Issues or email klaus.eduard@gmail.com
├── game/ # Game logic and state management
│ ├── __init__.py # Package exports
│ ├── constants.py # Game constants (letter distribution, premium squares)
│ ├── state.py # Core game state management
│ └── word_validator.py # Word validation logic
├── ui/ # User interface components
│ ├── __init__.py # Package exports
│ ├── components.py # UI components (Board, Tile, Rack, ScoreDisplay)
│ └── language.py # LanguageManager for Estonian/English i18n
├── tests/ # Unit tests
│ ├── test_game_state.py
│ └── test_word_validator.py
├── docs/ # Additional documentation
├── main.py # Main game entry point
├── wordlist.py # Hunspell dictionary integration (spylls)
├── requirements.txt # Python dependencies
└── README.md # This file
The project follows a modular architecture with clear separation of concerns:
game/):
state.py: Manages game state, player turns, and tile placementword_validator.py: Handles word validation and scoringconstants.py: Contains game constants and configurationui/):
components.py: Reusable UI componentsThe project includes automated tests to verify game logic and behavior:
# Run all tests
python3 -m unittest discover tests
# Run specific test file
python3 -m unittest tests/test_word_validator.py
# Run tests with verbose output
python3 -m unittest -v tests/test_word_validator.py
Key test areas:
When adding new features:
This project is open source and available under the MIT License.