How project-name-here/opencountdown works
openCountdown is a locally hosted event-countdown application, optionally wrapped in an Electron desktop shell. Operators configure timer state through the admin panel; the server exposes controls and distributes state to timer displays, which render countdown modes, progress and messages. The graph also shows the desktop lifecycle and a small server utility layer. Several server routes and the state-broadcast implementation were not included in the excerpts, so uncertain internal wiring is omitted.
Main entry points: index.js HTTP server and routes · startHandler.js Desktop lifecycle · window.js Status window · ng-timerview.html Timer page
Components 18
Desktop shell
- Desktop lifecycle
startHandler.js - Status window
electronAssets/window.js - IPC bridge
electronAssets/windowPreload.js
Countdown server
- HTTP server and routes
index.js - Live countdown state
index.js - WebSocket updates
index.js - Page templates
templates - Language profiles
lang
Admin controls
- Admin panel
templates/newAdminPanel.html - Admin interactions
static/js/interface.js
Timer displays
- Timer page
templates/ng-timerview.html - Timer rendering
static/js/timer/timerview.js - Legacy timer page
templates/timerPage.html - Legacy timer rendering
static/js/script.js
Server utilities
- Input helpers
helpers.js - Logging
logging.js
Other components
- Operator
- Event audience
Connections 24
- Desktop lifecycle → HTTP server and routes: starts process
- Desktop lifecycle → HTTP server and routes: polls status
- Status window → IPC bridge: sends IPC
- IPC bridge → Desktop lifecycle: forwards IPC
- Desktop lifecycle → Status window: sends status
- Operator → Status window: uses controls
- Operator → Admin panel: configures timer
- HTTP server and routes → Page templates: renders pages
- HTTP server and routes → Language profiles: loads translations
- Admin panel → Admin interactions: loads interactions
- Admin interactions → HTTP server and routes: sends API requests
- HTTP server and routes → Live countdown state: updates state
- HTTP server and routes → Input helpers: converts inputs
- HTTP server and routes → Logging: logs events
- HTTP server and routes → WebSocket updates: sets up updates
- WebSocket updates → Live countdown state: distributes state
- HTTP server and routes → Timer page: serves page
- HTTP server and routes → Legacy timer page: serves page
- Timer page → Timer rendering: loads renderer
- Legacy timer page → Legacy timer rendering: loads renderer
- Timer rendering → WebSocket updates: receives state
- Legacy timer rendering → WebSocket updates: receives state
- Event audience → Timer page: views countdown
- Event audience → Legacy timer page: views countdown