PHP Classes

File: docs/proposals/PremiumFeatures.md

Recommend this page to a friend!
  Packages of Matthew Asham   Binkterm PHP   docs/proposals/PremiumFeatures.md   Download  
File: docs/proposals/PremiumFeatures.md
Role: Auxiliary data
Content type: text/markdown
Description: Auxiliary data
Class: Binkterm PHP
Bulletin board system based on the Web
Author: By
Last change:
Date: 5 days ago
Size: 6,595 bytes
 

Contents

Class file image Download

> Draft ? This proposal was generated by AI and may not have been reviewed for accuracy.

Premium Features for Registered Installations

Why Registration Matters

BinktermPHP is open source and the community edition is fully functional. Registration is how sysops who find value in the project can support its continued development.

Motivations for sysops to register:

  • Sustain development ? BinktermPHP is actively maintained. Registration directly supports bug fixes, new features, protocol compatibility work, and documentation. Without ongoing support, development slows.
  • Unlock branding control ? registered sysops can present a fully branded experience to their users without BinktermPHP attribution in the footer.
  • Access to upcoming premium tools ? as premium features are developed (see below), registered installations will receive them automatically without needing to re-register.
  • Recognition ? the "Registered to \<system name\>" badge in the footer and admin dashboard signals a supported, professionally operated system.
  • Perpetual license ? registration is a one-time purchase for the current version line. There is no subscription or recurring fee.

The goal is to make registration feel worthwhile, not coercive. The community edition remains generous by design.

Current State

Licenses are currently issued with a single feature string:

  • `registered_badge` ? shows "Registered to \<system name\>" in the site footer and admin dashboard

All other premium feature gating uses License::isValid() ? i.e. the simple presence of a valid license, regardless of what features are listed in it. There is no per-feature entitlement enforcement at this time.

Down the road, licenses may be issued with additional named features, and gating will shift toward License::hasFeature('feature_string') for finer-grained control. For now, isValid() is the correct check for any registered-only behavior.

Currently Implemented Premium Features

These features are live and gated behind License::isValid().

| Feature | Description | Check | |---|---|---| | Registration badge | "Registered to \<system name\>" shown in site footer and admin dashboard | registered_badge in license_features | | Custom footer text | Replace the default node/sysop line with custom text | License::isValid() | | Hide "Powered by BinktermPHP" | Remove BinktermPHP attribution from the site footer | License::isValid() | | Message templates | Save and load subject/body templates in the compose form; per-user, filterable by netmail/echomail | License::isValid() | | Economy viewer | Admin dashboard for credit economy stats, transaction history, and active user reporting | License::isValid() | | Referral analytics | Admin page showing top referrers, referral signups, bonus credits earned, and summary totals | License::isValid() | | Custom splash pages | Sysop-defined Markdown/HTML content shown above the login and registration forms | License::isValid() | | Netmail forwarding to email | Forward incoming netmail (including FTN attachments) to the user's email address; opt-in per-user setting | License::isValid() | | Echomail digest | Periodic email digest (daily or weekly) summarising new messages across subscribed echo areas; per-user opt-in | License::isValid() | | Public file areas | Per-area is_public flag allowing unauthenticated visitors to browse and download files; optional /public-files index page controlled by features.public_files_index BBS setting | License::isValid() | | Anonymous FTP | Allow anonymous / ftp logins to the FTP daemon for browsing and downloading files from public file areas without a BBS account | License::isValid() | | MCP server access | User MCP key management and AI-assistant access to the MCP server when MCP_SERVER_URL is configured | License::isValid() | | BinkP packet inspector | Admin tools to browse, inspect, and download kept packets and live queue packets from the BinkP session pages | License::isValid() | | Ad analytics | Admin page showing advertisement impression/click performance, daily activity chart, per-ad CTR breakdown, and period filtering | License::isValid() |

Guiding Principle

Core operational capability ? packet processing, netmail, echomail, binkp transport, account login, admin access ? must never be gated. Only optional value-add features should be restricted to registered installations.

The community edition already provides a generous feature set. The following are offered free to all users and must not be gated:

  • Advanced message search with author, subject, and date filters
  • Enhanced compose editor with formatting toolbar and Markdown preview
  • Opt-in BBS directory listing
  • File area echomail comments (see `docs/proposals/FileAreaComments.md`)

Feature Ideas for Future Registered Tiers

The following are candidate features for future consideration. None are implemented yet.

Branding and Appearance

  • Custom CSS themes beyond the built-in set
  • Fully editable About page from admin UI
  • Curated ANSI art packs (distributed separately from the main repo)

Admin Convenience and Diagnostics

  • Undeliverable packet browser
  • Filterable web UI over `data/logs/packets.log`
  • Configuration export/import via admin UI
  • Expanded database health dashboard
  • Admin audit log ? web-viewable record of configuration and user management actions

Messaging

  • Per-area message retention settings from admin UI

File Areas

  • Per-user upload quota enforcement
  • Batch browser download of multiple files as a ZIP
  • Per-area download stats and trending files view
  • Virus scan results dashboard

Telnet / SSH BBS

  • Admin-visible BBS session log
  • Custom ANSI welcome/logoff screens managed from admin UI
  • Per-user or per-group session time limit overrides

WebDoors

  • Premium bundled WebDoor game packs
  • Per-door credit transaction history and reporting
  • Cross-user leaderboard support

User and Community

  • Extended user profile pages
  • Referral tracking analytics
  • Sysop-assignable user badges

Implementation Notes

When the time comes to gate individual features:

  • PHP: `\BinktermPHP\License::hasFeature('feature_string')`
  • Twig: `{% if 'feature_string' in license_features %}`
  • For now, use `License::isValid()` for any registered-only behavior

Premium checks must always fail safely ? degrade to community behavior, never to an error.

Do not run license checks inside packet processing loops or per-message paths.