feat: ShellMate - SSH Chess TUI

Play chess in your terminal over SSH. No installs, no accounts.

Features:
- Beautiful terminal-filling chess board with ANSI colors
- Play against Stockfish AI (multiple difficulty levels)
- Two-step move interaction with visual feedback
- Leaderboard with PostgreSQL persistence
- SSH key persistence across restarts

Infrastructure:
- Docker containerized deployment
- CI/CD pipeline for dev/staging/production
- Health checks with auto-rollback
- Landing page at shellmate.sh

Tech: Python 3.12+, asyncssh, python-chess, Stockfish
This commit is contained in:
2026-02-01 20:05:58 +00:00
commit 590fbe045c
33 changed files with 3925 additions and 0 deletions

53
pyproject.toml Normal file
View File

@@ -0,0 +1,53 @@
[project]
name = "shellmate"
version = "0.1.0"
description = "SSH into chess mastery - Terminal chess over SSH"
readme = "README.md"
license = { text = "MIT" }
authors = [{ name = "Greg Hendrickson", email = "greg@gregh.dev" }]
requires-python = ">=3.12"
dependencies = [
"textual>=7.4.0",
"python-chess>=1.999",
"asyncssh>=2.22.0",
"redis>=7.1.0",
"asyncpg>=0.30.0",
"stockfish>=4.0.6",
"rich>=14.3.0",
"pydantic>=2.12.0",
"pydantic-settings>=2.7.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3.0",
"pytest-asyncio>=0.25.0",
"ruff>=0.9.0",
"mypy>=1.14.0",
]
[project.scripts]
shellmate = "shellmate.cli:main"
shellmate-server = "shellmate.ssh.server:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
[tool.mypy]
python_version = "3.12"
strict = true
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
filterwarnings = [
"ignore::DeprecationWarning",
]