====== Community Bulletin TV ====== **Community Bulletin TV** is a retro-inspired, web-based bulletin board system designed to emulate classic cable-access and community information channels from the 1980s–1990s. It uses modern HTML, CSS, and JavaScript, but keeps the visual and behavioral feel of old-school TV bulletin systems: fixed-resolution screens, rotating pages, scrolling tickers, blinking text, and date/time overlays. {{ :projects:544358890-0b34ef26-b0d3-416f-ad5a-1b2915091dc7.png?600 |}} ---- ===== Project Links ===== * **GitHub Repository** https://github.com/mobbyg/Community-Bulletin-TV * **Live Demo (GitHub Pages)** https://mobbyg.github.io/Community-Bulletin-TV/ ---- ===== Core Concepts ===== Community Bulletin TV is driven entirely by a single JSON file: * Screens rotate automatically * Each screen contains one or more "bands" * Bands render text, colors, alignment, blink state, and size * A global ticker scrolls continuously along the bottom * Macros allow live date/time and spacing substitutions No database is required for playback. ---- ===== Key Features ===== * Multiple rotating screens * Band-based layout with fixed pixel heights * Global scrolling ticker * Date & time macros (strftime-style) * Spacing macros for formatting text * 4:3 and 16:9 aspect ratio support * Fullscreen playback (ESC to exit) * CRT-style scanlines overlay * JSON-based configuration * Editor UI for building bulletins (local / server-based) ---- ===== File Layout (Typical) ===== /community-bulletin-tv ├── play.html # Playback screen ├── editor.html # Bulletin editor UI ├── css/ │ └── bulletin.css ├── js/ │ ├── bulletin.js # Playback logic │ └── editor.js # Editor logic ├── data/ │ └── bulletin.json # Main configuration └── save.php # Optional server-side save endpoint ---- ===== bulletin.json Overview ===== The system is controlled via a JSON file with the following major sections: * **settings** * **screens** * **ticker** * **macros** Example structure: { "settings": { "aspectRatio": "4:3", "screenDuration": 10 }, "screens": [ ... ], "ticker": { ... }, "macros": { ... } } ---- ===== Band Properties ===== Each screen contains one or more bands with properties such as: * text * height (pixels) * bgColor / textColor * fontSize (small, medium, large, xlarge) * align (left, center, right) * blink (true/false) Bands stack vertically from top to bottom. ---- ===== Macros ===== Macros allow dynamic replacement inside band and ticker text. ==== Date / Time ==== Macros are defined in JSON using strftime-style format strings: "macros": { "date": "%Y-%m-%d", "time": "%H:%M:%S", "datetime": "%Y-%m-%d %H:%M:%S" } Usage in text: * {date} * {time} * {datetime} These update live every second. ==== Spacing Macros ==== Built-in spacing helpers: * **{space}** → single space * **{tab}** → three spaces * **{linef}** → line feed These help with alignment and formatting in fixed-width layouts. ---- ===== Playback Behavior ===== * Screens rotate every N seconds (screenDuration × 1000 ms) * Ticker scrolls continuously using requestAnimationFrame * Date/time macros refresh once per second * Ticker does NOT reset when screens change * Aspect ratio scaling preserves original resolution feel ---- ===== Editor Notes ===== The editor allows: * Creating screens * Adding, removing, and reordering bands * Editing band properties * Editing global ticker text and speed * Saving JSON via save.php (server required) GitHub Pages demo is playback-only. ---- ===== Planned / Future Upgrades ===== * Macro registry system (extensible macros) * Additional date/time tokens * Per-screen ticker overrides * Screen transition effects * Editor UI cleanup & grouping * Preset templates * Read-only "demo mode" toggle * Optional audio support * Raspberry Pi kiosk mode guide ---- ===== Personal Notes ===== This project is ideal for: * Community access TV * Retrocomputing displays * Museum exhibits * Hacker spaces * LAN party signage * Always-on TVs The design intentionally favors predictability, legibility, and nostalgia over modern responsiveness. ---- Last updated: %%DATE%%