EN /HU | Login

BBS Server

Teletype Games BBS is a Telnet, Synchronet-style bulletin board: messaging, chat, news, guides and software in one retro hub.

Live at games.teletype.hu:2323

Overview

A Ruby app on the rubbs gem, our in-house BBS framework — it provides the ANSI interface, menubar, stacked modal windows, Telnet server and xterm mouse support. The bbs-server repo holds only the Teletype-specific parts: service wiring, window definitions, formatters.

On connect the user gives a name (blank = Anonymous), then the full-screen shell opens.

Features

Community

  • Multi-board messaging — General / Tech / Off-Topic / Sysop, one CSV per board under data/boards/. New posts use a multi-line TextArea, max 1000 chars.
  • Live chat — broadcast hub, ~1 Hz polling, history replay on join.
  • Online users and last callers — who is connected now, and a login log that also feeds the bulletin.
  • User profile — signature / location / homepage / notes per username.
  • Login bulletin — online count, total messages, recent callers.
  • Sysop console — stats and broadcast, only for usernames in BBS_SYSOPS.

Content

  • Wiki readerGrav blog posts and HowTo guides in a split view: titles left, page right. Markdown becomes width-wrapped ANSI.
  • Game catalog — browses the Teletype Games API; each card shows the story and its play / download / source links.

Technical

  • xterm mouse — clickable menus, buttons and list items, wheel-scroll lists.
  • Desktop art — drop .ans / .ansi / .asc / .nfo / .txt files where BBS_DESKTOP_ART points. CP437 art is auto-decoded and SAUCE metadata stripped. A directory means a random file per session.
  • Idle disconnect at 10 minutes.
  • Persistent state — boards, last-callers log and profiles are CSV files under data/, a Docker volume, so they survive 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 the focused button / submit
Esc Close the top window or menu

Configuration

Copy env-example to .env:

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

Running

BASH
docker compose up --build     # or, with Ruby 3.x: bundle install && ruby bbs.rb
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               user profiles

Repository

https://git.teletypegames.org/bbs/bbs-server