Zsolt Tasnadi bbeea678cf Fix frozen string crash in new_msg; remove redundant inner titles
Bug: frozen_string_literal: true makes '' a frozen String literal.
@input << ch raised FrozenError immediately on any keystroke, causing
the TUI runner to exit. Fixed by using +'' (mutable string) for @input
everywhere it is initialised or reset.

Also removed the section header text lines that were being drawn inside
each page's content area — the page title is already embedded in the
right panel's box border, so the inner header was redundant.

Adjusted content offsets and scroll window sizes to use the reclaimed row.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:02:46 +02:00
2026-03-11 07:28:14 +01:00
2026-05-11 21:06:59 +02:00
2026-05-11 21:06:59 +02:00
2026-04-28 22:58:37 +02:00
2026-04-28 22:58:37 +02:00
2026-04-28 22:58:37 +02:00

Teletype BBS Server

Telnet-accessible community BBS server built on the rubbs gem. ANSI-rendered retro terminal interface with a message board, wiki integration, and a game catalog.

Running

Docker Compose (recommended):

docker compose up --build

Directly (requires Ruby 3.x):

bundle install
ruby bbs.rb

Connect with:

telnet localhost 2323

Configuration

Copy env-example to .env and fill in the values:

Variable Default Description
WEBAPP_WIKIJS_TOKEN Bearer token for Wiki.js API (optional)
MESSAGES_PATH data/messages.dat Path to the messages CSV file

Menu

Option Description
Message Board View the last 30 messages
New Message Post a message (max 200 chars)
Blog Posts Browse blog entries from Wiki.js
HowTo Guides Browse how-to articles from Wiki.js
Game Catalog Browse the Teletype game catalog
Online Users List of currently connected users
System Info Server stats

Project structure

bbs.rb              Entry point — BBS configuration and flow definition
lib/
  online_users.rb   Thread-safe connected-users map
  message_board.rb  CSV-backed message store
  wiki.rb           Wiki.js GraphQL client
  catalog.rb        Games API client
  display.rb        ANSI rendering helpers and content handlers
data/
  messages.dat      Message board records (auto-created)

Data

Messages are stored in data/messages.dat (plain CSV, auto-created on first post). The data/ directory is mounted as a Docker volume so records survive container restarts.

Description
No description provided
Readme 263 KiB
Languages
Ruby 98.9%
Dockerfile 0.9%
Shell 0.2%