Amiga-Z Wiki

“Modern tools for old-school communities.”

User Tools

Site Tools


kb2mob_bbs:start

KB2MOB BBS

# Packet BBS — v0.1 Architecture & Design Specification

## 1. Project Philosophy

This project is a modern, lightweight BBS inspired by classic systems such as C-Net and Mystic, but designed specifically with packet radio as a future transport.

The BBS should:

* Be useful and enjoyable as a standalone local BBS. * Preserve the nostalgia and character of classic BBS systems. * Use modern, maintainable software internally. * Remain useful without an Internet connection. * Avoid unnecessary complexity. * Separate BBS functionality from communications transports. * Allow future packet-radio functionality to be added without rewriting the BBS core.

The initial version will have no radio or packet connectivity.

The first goal is a stable local BBS.

—

# 2. Initial Scope

Version 0.1 will provide a local-console BBS with:

* Users * Access levels * Message boards * Threaded messages * Per-user unread/read tracking * Private messaging * File areas * ANSI screens and colors * External screen/template files * Main menu and hierarchical submenus * User preferences * Logging * Configuration * SQLite database * Sysop functionality through the local interface

Future transports will be added later.

—

# 3. High-Level Architecture

The system will be modular.

```text

                       BBS CORE
                          |
      +-------------------+-------------------+
      |                   |                   |
      v                   v                   v
  Data Layer          Services Layer      UI Layer
      |                   |                   |
   SQLite          Users/Messages/etc.    ANSI Renderer
                                          Screen Files
      |
      +----------------------------------------+
                                               |
                                        Local Interface

```

Future transports will connect to the same BBS services:

```text

                       BBS CORE
                          |
      +-------------------+-------------------+
      |                   |                   |
    Local              Telnet              AX.25
                                            |
                                        Dire Wolf

```

The BBS core must not depend on any particular transport.

—

# 4. Database

SQLite will be used as the initial database.

The database will be relational, with separate tables for logically distinct entities.

Initial tables:

* `users` * `boards` * `threads` * `messages` * `thread_reads` * `file_areas` * `files` * `sessions` * `logs`

Additional tables may be introduced when required by future functionality.

The database should remain simple and understandable rather than attempting to anticipate every future feature.

—

# 5. Users and Access

Users will have a simple access-level system.

Initial conceptual levels:

```text GUEST USER TRUSTED SYSOP ```

The exact numeric representation can be determined during implementation.

Potential permissions include:

* Read local messages * Post local messages * Private messaging * Upload files * Download files * Read packet messages * Post packet messages * Read NTS traffic * Originate NTS traffic * Sysop functions

The system should avoid an elaborate ACL system unless future requirements demonstrate a need for one.

### Packet identity

When packet connectivity is eventually added, an amateur station's AX.25 callsign will serve as its packet identity.

Packet users will not be required to perform a traditional BBS username/password login.

### Telnet identity

When Telnet is eventually added, authentication will be required.

A BBS account may be associated with a callsign while still having a separate username/password for Internet-based access.

### Web administration

The future web administration interface will use authenticated access and provide administrative functions without requiring direct database manipulation.

—

# 6. Message System

Messages will be organized as:

```text Board

|
+-- Thread
     |
     +-- Message
     +-- Message
     +-- Message

```

A thread is the primary object displayed to users.

Threads will contain:

* Subject * Board * Creator * Creation date/time * Last activity * Reply count

Messages will contain:

* Author * Thread * Body * Creation date/time * Optional reply relationship

—

# 7. C-Net-Style Thread Reading

Board listings will show threads rather than individual messages.

Example:

```text GENERAL DISCUSSION

1  Packet BBS Development             12 replies  Aug 14 10:42

*2 What's on 2 meters? 7 replies Aug 14 09:17

3  New node coming online              3 replies  Aug 13 21:03

*4 Old TNC equipment 18 replies Aug 12 18:31 ```

The unread indicator will be an asterisk in the first column.

The message number is shifted one position when the asterisk is displayed.

Headers begin at the first printable column.

—

# 8. Read/Unread Tracking

Read state will be tracked per user and per thread.

The system will maintain the user's last-read message within each thread.

Conceptually:

```text user_id thread_id last_read_message_id last_read_at ```

This allows the BBS to:

* Mark threads containing unread messages. * Show an asterisk beside unread threads. * Resume reading where the user stopped. * Offer “Read New” functionality. * Avoid retransmitting an entire thread over a future low-bandwidth packet connection.

When entering a thread with unread messages, the user may eventually be offered:

```text [R] Read New [A] Read All [L] Last Message ```

—

# 9. Main Menu and Submenus

The BBS will use a single primary menu with hierarchical submenus.

Example:

```text MAIN MENU

[M] Message Center [F] File Areas [U] User Services [N] New Messages [H] Help [Q] Quit ```

Major functions will have their own submenus.

The menu presentation will be external to Python code.

The command engine determines what an option does; the screen/template determines how it looks.

—

# 10. ANSI and Screen System

ANSI support is a core requirement.

The UI system will support, as practical:

* ANSI foreground colors * ANSI background colors * Bold * Underline * Reverse video * Cursor movement * Screen clearing * Box drawing * Symbols * ASCII fallback

Screens will not be hard-coded into Python.

Example structure:

```text screens/

  welcome.ans
  login.ans
  main.ans
  messages.ans
  files.ans
  help.ans
  goodbye.ans

```

Screen files may contain variables such as:

```text {bbs_name} {username} {callsign} {message_count} ```

and presentation tags such as:

```text {cyan} {bold} {reset} ```

The renderer will convert these into the appropriate output.

—

# 11. Themes

The screen system should support themes.

Conceptually:

```text themes/

  classic/
      welcome.ans
      main.ans
      messages.ans
  green/
      welcome.ans
      main.ans
      messages.ans

```

The active theme will be selected through configuration.

Future web administration should allow the sysop to edit and preview screens without manually editing files.

—

# 12. Distribution Classes

Messages will have a distribution classification.

Initial classes:

```text LOCAL PACKET NTS ```

### LOCAL

Local-only BBS traffic.

It must not automatically be forwarded to packet-network peers.

### PACKET

Traffic explicitly designated for packet-network distribution.

### NTS

Traffic intended for the NTS subsystem.

NTS will eventually have additional structure and rules beyond ordinary BBS messages.

—

# 13. Origin and Distribution Are Separate

Messages will track both:

```text origin distribution ```

Examples:

```text Origin: LOCAL Distribution: LOCAL ```

```text Origin: TELNET Distribution: PACKET ```

```text Origin: PACKET Distribution: PACKET ```

This distinction will be important for future forwarding, auditing, and administration.

—

# 14. Telnet Access to Packet/NTS Content

When Telnet support is eventually implemented:

* Packet messages may be read through Telnet. * NTS messages may be read through Telnet. * Packet-originated content does not require special Internet restrictions merely because it arrived over RF. * Telnet-originated traffic destined for packet distribution requires explicit authorization.

A Telnet user should never accidentally cause a local message to be transmitted over RF.

Posting packet-distributed content from Telnet should require:

1. Appropriate account permission. 2. Explicit selection of packet distribution. 3. Confirmation before transmission/queueing.

—

# 15. Packet Forwarding

Packet forwarding will not be part of the initial implementation.

It will be considered after the BBS has reached a stable beta.

The future forwarding subsystem will be separate from the BBS message engine.

Its responsibilities may eventually include:

* Peer configuration * Forwarding queues * Message exchange * Duplicate detection * Routing * Retry handling * Delivery status * Network topology

The BBS should be designed now so that forwarding can be added later without changing the basic message model.

—

# 16. Message IDs and Duplicate Detection

Messages intended for future network distribution should have an identifier suitable for detecting duplicates.

A GUID/UUID or cryptographic hash-based identifier should be considered.

The system should distinguish between:

* Local database ID * Network/global message ID

The local integer database ID should not be assumed to be globally unique.

The exact GUID/hash mechanism will be selected during implementation of the future distribution subsystem.

—

# 17. File Areas

Files will use separate file areas.

Each file area will have its own properties, including future distribution rules.

Files should not automatically be eligible for packet transmission simply because they exist in the BBS.

The architecture must accommodate future specialized transfer methods.

A future idea is QR-code-based file transfers, particularly for Internet-connected clients or local/high-bandwidth use.

QR transfers are explicitly out of scope for v0.1.

—

# 18. Transport Awareness

The BBS session system will eventually identify the transport being used.

Examples:

```text LOCAL TELNET AX25 ```

The UI can use transport information to adapt presentation.

For example, an eventual AX.25 session may use:

* Smaller menus * Reduced decorative output * Pagination * Explicit large-transfer confirmation * Less ANSI artwork * Bandwidth-conscious defaults

Telnet and future specialized clients can provide richer interfaces.

—

# 19. Session State

The BBS will maintain a logical session state.

Example:

```text Main Menu

  |
  +-- Message Center
        |
        +-- General
              |
              +-- Thread 42
                    |
                    +-- Message 17

```

Returning from a screen should normally return the user to the appropriate parent menu rather than resetting the entire session.

This will also make future commands such as `WHO` possible.

The eventual `WHO` command may show currently connected users and their current BBS location/activity.

—

# 20. Configuration

Configuration will be external to the Python source.

A configuration file will contain settings such as:

* BBS name * BBS callsign * Location * Time zone * Database location * Active theme * Interface settings * Future Telnet settings * Future packet settings * Logging settings

The exact configuration format will be selected during implementation.

Future web administration should expose appropriate configuration settings without requiring manual file editing.

—

# 21. Logging

Logging is a first-class feature.

The system should record useful operational events such as:

* User creation * Login/logout * Session start/end * Failed authentication * Message creation * Message deletion * File upload/download * Sysop actions * Configuration changes * Future packet connections * Future packet transmissions * Future forwarding activity * Permission changes

Logs should be useful for troubleshooting without becoming an excessive database of everything the user does.

—

# 22. Web Administration — Future

The web administration interface is not required for the first local prototype, but the architecture must accommodate it.

The future web interface should provide:

* User management * Access-level management * Message moderation * Board management * File-area management * File management * Screen/template editing * Theme management * Configuration * Session monitoring * Log viewing * Packet/network administration * Forwarding administration

The web interface should use the same BBS service layer as the other interfaces.

It should not directly manipulate SQLite tables.

—

# 23. Future Internet Client

A specialized Internet client may eventually be developed.

Possible inspiration includes:

* Hotline * KDX * Classic AOL-style client software * Dedicated BBS clients

The client could provide a richer interface while still using the same BBS core and services.

This is explicitly outside the initial scope.

—

# 24. Initial Software Structure

A starting structure may look like:

```text packetbbs/

  main.py
  core/
      users.py
      boards.py
      threads.py
      messages.py
      files.py
      sessions.py
      access.py
  database/
      database.py
      schema.py
  ui/
      renderer.py
      ansi.py
      menus.py
      screens.py
  interfaces/
      local.py
  screens/
      welcome.ans
      login.ans
      main.ans
      messages.ans
      files.ans
      help.ans
      goodbye.ans
  themes/
      classic/
  config/
      bbs.toml
  data/
      bbs.sqlite3
  logs/
  tests/

```

This is a starting point, not a requirement that every file exist immediately.

Modules should be introduced as functionality is implemented.

—

# 25. Development Strategy

Development will proceed incrementally.

## Phase 1 — Local Prototype

Build only:

* SQLite database * User accounts * Access levels * Local console * ANSI renderer * External screen files * Main menu * Submenus * Boards * Threads * Messages * Read/unread state * Basic file areas * Logging

No network connectivity.

## Phase 2 — Local Beta

Add:

* Better error handling * User preferences * Private messages * Search * Sysop functions * Improved file handling * Screen/theme management * More comprehensive tests * Database backup/restore

## Phase 3 — Telnet

Add:

* Telnet transport * Username/password authentication * Shared BBS accounts * Transport-aware UI * Telnet restrictions for packet/NTS-originating traffic

## Phase 4 — Packet

Add:

* AX.25 transport * Dire Wolf integration * Callsign identity * Packet session handling * Bandwidth-aware UI

## Phase 5 — Packet Distribution

Only after the BBS is stable:

* Network message IDs * Duplicate detection * Forwarding queues * Peer management * Packet forwarding * Delivery tracking

## Phase 6 — Future Features

Potential future work:

* NTS automation * Specialized Internet client * QR-code file transfers * Richer web administration * Advanced packet routing * Additional transport types * Doors/games * Additional BBS integrations

—

# 26. Core Design Rule

The most important architectural rule is:

The BBS should know what a user, message, thread, file, and permission are. It should not need to know how the user connected.

Likewise:

A transport should know how to move data. It should not need to know how a BBS stores messages.

And:

The UI should know how something looks. It should not decide what the BBS is allowed to do.

This separation is what will allow the project to start as a small local BBS and eventually become a packet-radio BBS without requiring a rewrite.

—

# 27. v0.1 Success Criteria

The first version is successful when a user can:

1. Start the BBS locally. 2. Create or log into an account. 3. Navigate a main menu and submenus. 4. Browse message boards. 5. See threaded discussions. 6. Identify unread threads with an asterisk. 7. Read an entire thread. 8. Return later and read only new messages. 9. Post and reply to messages. 10. Browse and use file areas. 11. Receive appropriate access restrictions. 12. See attractive ANSI screens loaded entirely from external files. 13. Have the sysop perform basic administration. 14. Shut down and restart the BBS without losing state. 15. Back up the database easily. 16. Review useful logs.

No radio is required to achieve v0.1.

The result should already feel like a complete, usable BBS before packet connectivity is introduced.

kb2mob_bbs/start.txt · Last modified: by freedomotter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki