Contribute to TallyHub or build custom integrations
git clone https://github.com/YOUR_USERNAME/Tallyhub.git
cd Tallyhubnpm installnpm run devNavigate to http://localhost:3000
npm run devStart development server with ts-node + nodemon (hot reload)
npm run buildCompile TypeScript to dist/ for production
npm startRun compiled production build from dist/
npm run typecheckTypeScript strict type checking (no emit)
npm run lintLint codebase (ESLint + TypeScript rules)
npm run lint:fixAuto-fix lint issues where possible
npm run formatFormat code with Prettier across the repo
npm run logs:pruneRemove log files older than 14 days
npx tallyhubCLI launcher - builds and starts server
Tallyhub/
โโโ src/ # TypeScript source files
โ โโโ index.ts # Main entry point
โ โโโ routes/ # API routes
โ โโโ services/ # Business logic
โ โโโ types/ # TypeScript types
โโโ public/ # Static assets
โ โโโ firmware/ # Device firmware files
โ โโโ flash.html # Firmware flasher UI
โโโ dist/ # Compiled JavaScript (build output)
โโโ logs/ # Application logs
โโโ docker/ # Docker configuration
โโโ firmware/ # Device firmware source
โโโ bin/ # CLI tools
โโโ docs/ # DocumentationBefore contributing, please read our comprehensive contributing guide:
View CONTRIBUTING.md on GitHub โfeature/ - New featuresfix/ - Bug fixesdocs/ - Documentation updatesrefactor/ - Code refactoringtest/ - Test additions or changesUse conventional commits format:
feat: add support for TriCaster mixers
fix: resolve device discovery timeout
docs: update installation guide
refactor: improve WebSocket connection handling
chore: bump version to 1.2.0Before submitting a PR, ensure all quality checks pass:
npm run typecheck # No TypeScript errors
npm run lint # No linting errors
npm run format # Code is formatted
npm run build # Builds successfullyTallyHub provides a REST API for custom integrations:
/api/devicesList all registered devices
/api/devicesRegister a new device
/api/assignmentsGet camera assignments
/api/assignments/:idUpdate camera assignment
Real-time tally updates via WebSocket:
// Connect to WebSocket
const ws = new WebSocket('ws://localhost:3000/api/tally');
// Listen for tally updates
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Tally update:', data);
};Devices can discover the hub using UDP broadcast or mDNS:
NODE_ENVdevelopment | productionSet environment mode
LOG_LEVELerror | warn | info | debugSet logging verbosity
PORTnumberHTTP server port (default: 3000)
GITHUB_TOKENstringGitHub personal access token for firmware downloads
DISABLE_MDNS1 | 0Disable mDNS service advertising
TallyHub firmware is written in C++ for ESP32 devices using Arduino framework.
firmware/
โโโ esp32-1732s019/ # 1.9" display tally
โโโ m5stick-c-plus/ # M5Stick C Plus 1.1
โโโ m5stick-c-plus2/ # M5Stick C Plus2Use PlatformIO or Arduino IDE to build firmware:
# Using PlatformIO
cd firmware/esp32-1732s019
pio run
# Build and upload
pio run --target uploadA comprehensive test suite is planned. Current testing workflow:
npm run typecheck)npm run lint)npm run format)To build and run TallyHub in production:
# Build the project
npm run build
# Run production server
NODE_ENV=production LOG_LEVEL=info node dist/index.js
# Or use the CLI
NODE_ENV=production npx tallyhubNODE_ENV=productionLOG_LEVEL=info unless debuggingnpm run logs:prune)TallyHub follows semantic versioning (semver):
Current version: 1.2.0
TallyHub is open source software licensed under the MIT License.
You are free to use, modify, and distribute TallyHub for any purpose, including commercial use. See the LICENSE file for details.