No description
- Ruby 61.9%
- Gherkin 19.8%
- JavaScript 7.4%
- TypeScript 5.6%
- CSS 4.6%
- Other 0.7%
- Gateway realtime: subscribe to aethyr:combat:events and aethyr:combat:state - Gateway game commands: punch, kick, slash, block, dodge, stance, flee, cstatus - PlayClient: combat event subscriptions with live combat panel - PlayClient: combat quick commands (punch, kick, slash, block, dodge, stance, flee) - PlayClient: combat status overlay showing AP, stance, round, phase, body status - CSS: grid areas for combat pane in full/wide layouts - Help text updated with combat commands |
||
|---|---|---|
| .devcontainer | ||
| .docker | ||
| .forgejo/workflows | ||
| bin | ||
| conf | ||
| design_handoff_aethyr_webapp | ||
| docs | ||
| gateway | ||
| lib/aethyr | ||
| mockup-web | ||
| sorbet | ||
| tests | ||
| web | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .simplecov | ||
| .standard.yml | ||
| aethyr.gemspec | ||
| Caddyfile | ||
| CHANGELOG.md | ||
| COMBAT_PLAN.md | ||
| CONTRIBUTING.md | ||
| CONTRIBUTORS.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| docusaurus.config.js | ||
| Gemfile | ||
| Gemfile.lock | ||
| intro.txt | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| prompt | ||
| Rakefile | ||
| README.md | ||
| README.rdoc | ||
| seed_engine.rb | ||
| seed_world.py | ||
| sidebars.js | ||
| TEST_REPORT.md | ||
Aethyr Web Platform
A dual-interface MUD system supporting both Telnet and modern web browser access.
Quick Start
With only Docker installed:
docker compose up --build
Access points:
- Web App: http://localhost:3000
- Telnet:
telnet localhost 8888 - Gateway API: http://localhost:8889
- WebSocket: ws://localhost:8889/ws
Architecture
┌─────────────┐ REST ┌──────────────┐ REST/WS ┌─────────┐
│ Engine │ ◄──────────────► │ Gateway │ ◄──────────────► │ Web │
│ (Telnet + │ port 8889 │ (Sinatra + │ port 8889 │ (Next.js│
│ REST API) │ │ Faye WS) │ │ 14) │
└──────┬──────┘ └──────┬───────┘ └─────────┘
│ │
│ Redis Pub/Sub │
└────────────────────────────────┘
Authentication
- Master Password: Strong bcrypt hash for web login
- Telnet Password: Separate weak password transmitted in plaintext (with warning)
- Both passwords belong to the same unified account
Web Surfaces
| Surface | Route | Description |
|---|---|---|
| Landing | / |
Hero, live demo, elemental matrix, tweaks |
| Wiki | /wiki |
World encyclopedia with inline editing |
| Chat | /chat |
Real-time chat with WebSocket |
| Play | /play |
Web MUD client |
| Profile | /profile/:id |
Player profile and stats |
| Docs | /docs/:slug |
Documentation |
| Hall | /hall |
Leaderboard |
| Dashboard | /dashboard |
Server metrics (admin) |
| Moderation | /moderation |
Proposal queue (admin) |
Development
# Start individual services
docker compose up engine # MUD engine + REST API
docker compose up gateway # Gateway + WebSocket
docker compose up web # Next.js dev server
docker compose up redis # Redis pub/sub
# Run tests
cd gateway && bundle exec rspec
cd web && npm run typecheck
Design Patterns Used
- Event Queue: Redis pub/sub decouples engine from gateway
- Service Locator:
ServiceRegistryfor endpoint discovery - Observer: WebSocket topic subscriptions
- Command:
WorldCommandencapsulates all mutations - Facade:
WorldReposimplifies engine API access - Adapter:
Serializerstranslate engine objects to JSON
License
Apache-2.0