Login

BBS Server

Teletype Games BBS is a Telnet-accessible, Synchronet-style community bulletin board system. It serves as a retro-style central hub for messaging, chat, news, guides, and software within the Teletype Games ecosystem.

Access it live at: games.teletype.hu:2323

Overview

The BBS is a Ruby application built on top of the rubbs gem — an in-house BBS framework that provides the full-screen ANSI interface, the top menubar, stacked modal windows, the Telnet server, and the xterm mouse support. The bbs-server repository contains only the Teletype-specific configuration: the service wiring, the window definitions, and the formatters.

On connect, the user is asked for a name (blank = Anonymous), then a full-screen Synchronet-style shell opens with a top menubar.

Features and Capabilities

Community Features

  • Multi-board messaging: Separate sub-boards (General / Tech / Off-Topic / Sysop), each stored in its own CSV file under data/boards/. A multi-line composer (TextArea, up to 1000 chars per post) is used for new messages.
  • Live chat: A broadcast hub with ~1 Hz polling and history replay when a user joins.
  • Online user list: See who else is currently connected.
  • Last callers: A login log of recent visitors, also surfaced on the login bulletin.
  • Persistent user profile: Signature / location / homepage / notes stored per username.
  • Bulletin on login: Shows online count, total message count, and recent callers.
  • Sysop console: Stats and broadcast, available only to usernames listed in BBS_SYSOPS.

Content Integration

  • Wiki Reader: Integrated with Grav wiki. Fetches blog posts and HowTo guides and renders them in a split view (titles on the left, selected page rendered on the right). Markdown is converted to ANSI-friendly, width-wrapped lines.
  • Game Catalog: A browser for the Teletype Games API. Each game card shows its story and external links (play / download / source).

Technical Excellence

  • Telnet & ANSI: Provided by the rubbs framework — IAC negotiation, full-screen ANSI rendering, themed windows.
  • xterm mouse support: Click menus, buttons, and list items; wheel-scroll lists.
  • Configurable desktop art: Drop .ans / .ansi / .asc / .nfo / .txt files into the path pointed to by BBS_DESKTOP_ART. Classic CP437 BBS art is auto-decoded and SAUCE metadata is stripped. If a directory is given, a random file is shown per session.
  • Idle disconnect at 10 minutes.
  • Persistent state: Boards, last-callers log, and profiles are CSV-backed under data/, mounted as a Docker volume so they survive container restarts.

Menus & Keys

Menu Items
File Bulletin · System Info · Exit
Messages Boards… · New Post…
Files Blog Posts · HowTo Guides · Game Catalog
Users Online · Last Callers · Profile…
Chat Open chat
Sysop Console (sysops only)
Help About · Keys
Key Action
Alt+letter Open the matching top menu
F10 Open the leftmost menu
F1 Help
F2 Message Boards
F3 Quick post
F4 Chat
Tab / Shift-Tab Move focus inside a window
Enter Activate focused button / submit input
Esc Close the top window / menu

Configuration

The application is configured via environment variables (copy env-example to .env):

Variable Default Description
BBS_PORT 2323 TCP port to listen on.
BBS_SYSOPS empty Comma-separated list of usernames with sysop access.
WEBAPP_WIKIJS_TOKEN Bearer token for the Grav wiki API.
BOARDS_PATH data/boards Directory of per-board CSV files.
MESSAGES_PATH data/messages.dat Legacy single-board file; auto-migrated into the General board on first run.
LAST_CALLERS_PATH data/last_callers.csv Login log CSV.
PROFILE_PATH data/profiles.csv Per-user profile CSV.
BBS_DESKTOP_ART data/art/teletype.ansi Single ANSI art file, or a directory of them (random per session).

Running

Docker Compose:

BASH
docker compose up --build

Directly (Ruby 3.x):

BASH
bundle install
ruby bbs.rb

Connect:

BASH
telnet localhost 2323

Project Structure

TEXT
bbs.rb                       entry point — service wiring + Application definition
lib/
  domain/
    repository/              online users, boards, wiki, catalog, last callers, profiles
    service/                 online, board, wiki, games, chat, last callers, profile
    model/                   value objects (MessageModel, GameModel, …)
  bbs/ui/                    per-window builders and formatters
data/
  boards/<id>.csv            per-board messages (auto-created)
  last_callers.csv           login log
  profiles.csv               persistent user profiles

Repository

https://git.teletype.hu/tools/bbs-server