A retro-style, JSON-driven community bulletin board inspired by classic cable-access TV.
A lightweight, retro-inspired Community Bulletin Board system that recreates the look and feel of classic 1990s cable-access TV displays — blinking text, stacked bands, and scrolling tickers — all editable through a web browser.
Built with plain HTML, CSS, JavaScript, and PHP. No frameworks. No database.

Community Bulletin TV is designed to feel like a classic cable-access bulletin board — bold text, simple layouts, and continuous rotation.
This project displays rotating “screens,” each made up of horizontal text bands and an optional scrolling ticker. It’s designed for:
- Community centers
- Local cable channels
- Lobby or signage displays
- Art projects and installations
- Retro / lo-fi broadcast systems
Everything is edited visually via a browser-based editor and saved to a simple JSON file.
- Authentic CRT-style bulletin board layout
- Multiple rotating screens
- Configurable screen duration
- Stacked text bands with:
- Color, size, alignment
- Optional blinking
- Smooth scrolling ticker
- Live date & time macros
- Web-based editor with live preview
- JSON storage (no database required)
- Runs well on low-power or older hardware
community-bulletin/
├── play.html # Public display page
├── editor.html # Editor interface
├── save.php # Saves bulletin data
├── data/
│ └── bulletin.json # All content & settings
├── js/
│ ├── bulletin.js # Display logic
│ └── editor.js # Editor logic
├── css/
│ └── bulletin.css # Shared styles
└── README.md- Web server (Apache or NGINX)
- PHP enabled
- No database
- Copy or clone the project into your web root:
/var/www/html/community-bulletin/
- Ensure PHP can write to the data directory:
chown -R www-data:www-data data
chmod 664 data/bulletin.json- Open in your browser:
- Display:
/community-bulletin/play.html- Editor:
/community-bulletin/editor.htmlThis repository includes a fully-featured example configuration:
The demo file showcases:
- Multiple rotating screens
- Band alignment (left / center / right)
- Font sizes and colors
- Blinking text
- Spacing macros (
{space},{tab},{linef}) - Date & time macros
- Global ticker
- Screen rotation timing
If you want to experiment, start by editing bulletin.json and reload the play page.
🕒 Macros
Macros are placeholders in band or ticker text that update automatically.
Date & Time Macros
Defined in bulletin.json:
"macros": {
"date": "%Y-%m-%d",
"time": "%H:%M:%S",
"datetime": "%Y-%m-%d %H:%M:%S"
}Usage:
Date: {date} Time: {time}Macros update live on the display page.
Spacing Macros (Built-In)
These do not need to be configured:
| Macro | Result |
|---|---|
{space} |
Single space |
{tab} |
3 spaces |
{linef} |
Line break |
Example:
Date:{tab}{date}{linef}Time:{tab}{time}⏱ Screen Rotation
Screen timing is controlled globally:
"settings": {
"screenDuration": 10
}-
Duration is in seconds
-
Screens rotate automatically on the display page
📜 Ticker
Ticker settings:
"ticker": {
"speed": 40,
"text": "COMMUNITY EVENTS • LOCAL ANNOUNCEMENTS • WEATHER ALERTS"
}-
Speed is pixels per second
-
Ticker text supports macros
🛠 Editor Notes
- Editor includes a live preview
- Changes are saved to bulletin.json
- Preview resolves macros for readability
- Display page updates macros in real time
🔐 Security Notes
This project assumes a trusted environment.
If exposed publicly:
- Restrict access to editor.html
- Protect save.php
- Consider HTTP authentication or IP filtering
🧠 Design Philosophy
- Simple over clever
- Files instead of databases
- Predictable rendering
- Hardware-friendly
- Nostalgia with purpose
🧭 Roadmap Ideas
- Per-screen ticker overrides
- Custom macro definitions
- Transition effects
- Editor UI enhancements
- Authentication
- Preset import/export
📄 License
GPL2 License Free to use, modify, and redistribute.
If you run this on a cable channel in 1996, that’s on you 😉


