{"id":43769131,"url":"https://github.com/kluth/stream-buddy","last_synced_at":"2026-02-05T16:09:44.663Z","repository":{"id":324526358,"uuid":"1096252598","full_name":"kluth/stream-buddy","owner":"kluth","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-04T12:53:58.000Z","size":912,"stargazers_count":0,"open_issues_count":223,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-07T20:55:55.377Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kluth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-14T06:40:26.000Z","updated_at":"2025-11-17T06:29:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kluth/stream-buddy","commit_stats":null,"previous_names":["kluth/stream-buddy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kluth/stream-buddy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kluth%2Fstream-buddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kluth%2Fstream-buddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kluth%2Fstream-buddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kluth%2Fstream-buddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kluth","download_url":"https://codeload.github.com/kluth/stream-buddy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kluth%2Fstream-buddy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29125135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T14:05:12.718Z","status":"ssl_error","status_checked_at":"2026-02-05T14:03:53.078Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-05T16:09:43.821Z","updated_at":"2026-02-05T16:09:44.658Z","avatar_url":"https://github.com/kluth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BroadBoi\n\nProfessional browser-based multi-platform streaming application built with Angular 20+ and NestJS.\n\n## Features\n\n- **Multi-Platform Streaming**: Stream simultaneously to Twitch, YouTube, and custom RTMP destinations\n- **Advanced Audio Processing**: Noise suppression, compression, EQ, and effects\n- **Browser-Based Capture**: WebRTC media capture for webcam, microphone, and screen\n- **Keyboard Shortcuts**: Fully customizable hotkeys for all actions\n- **Chat Integration**: Unified chat from Twitch, YouTube with moderation tools\n- **Goal Tracking**: Visual progress overlays for followers, subscribers, donations\n- **Browser Sources**: Embed web pages and custom HTML overlays\n- **Settings Management**: Comprehensive configuration with quality presets\n- **Font Management**: Dynamic Google Fonts integration with 1000+ fonts\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js** 18.x or 20.x (LTS)\n- **npm** 9.x or higher\n- **Docker** 20.10+ with Docker Compose V2\n- **OpenSSL** (for SSL certificate generation)\n\n### Installation\n\n```bash\n# Clone repository\ngit clone https://github.com/matthias/broadboi.git\ncd broadboi\n\n# Install dependencies\nnpm install\n\n# Generate SSL certificates for MediaMTX\n./scripts/generate-certs.sh\n\n# Start MediaMTX server\ndocker-compose up -d\n\n# Start development servers (API + Web)\nnpm start\n```\n\nOpen your browser to `http://localhost:4200`\n\n### Development Commands\n\n```bash\n# Start both API and web\nnpm start\n\n# Start individual services\nnpm run start:api    # NestJS API on port 3000\nnpm run start:web    # Angular web on port 4200\nnpm run start:https  # Angular with HTTPS\n\n# Build\nnpm run build:api\nnpm run build:web\n\n# Test\nnpm test            # Run all tests\nnpm run test:api    # API tests only\nnpm run test:web    # Web tests only\n\n# Lint\nnpm run lint\n```\n\n## Architecture\n\nBroadBoi uses a modern microservices architecture:\n\n```\n┌─────────────────────┐\n│   Angular App       │  - WebRTC media capture\n│   (Browser)         │  - Scene composition\n│                     │  - Settings \u0026 controls\n└──────────┬──────────┘\n           │ WebRTC (WHIP)\n           ▼\n┌─────────────────────┐\n│   MediaMTX Server   │  - WebRTC to RTMP gateway\n│   (Docker)          │  - Audio transcoding (Opus → AAC)\n└──────────┬──────────┘\n           │ RTMP\n           ▼\n┌─────────────────────┐\n│ Streaming Platforms │  - Twitch\n│                     │  - YouTube Live\n│                     │  - Custom RTMP\n└─────────────────────┘\n```\n\n**Tech Stack**:\n- **Frontend**: Angular 20+, TypeScript 5.9, RxJS 7, Signals\n- **Backend**: NestJS 11, TypeORM, SQLite, Socket.IO\n- **Infrastructure**: Docker, MediaMTX, Nx Monorepo\n- **Testing**: Vitest 2, Jest 29\n\n## Documentation\n\n### User Documentation\n- **[Features Guide](docs/FEATURES.md)** - Complete feature documentation\n  - Settings Management\n  - Keyboard Shortcuts\n  - Advanced Audio Processing\n  - Multi-Platform Chat Integration\n  - Dynamic Font Management\n  - Goal Overlays System\n  - Browser Source Support\n\n### Developer Documentation\n- **[Developer Guide](docs/DEVELOPER_GUIDE.md)** - Architecture, setup, and best practices\n  - Architecture Overview\n  - Development Setup\n  - Project Structure\n  - Core Services\n  - Testing Guidelines\n  - Code Style\n\n### Infrastructure Documentation\n- **[Infrastructure Setup](docs/INFRASTRUCTURE.md)** - MediaMTX deployment and configuration\n- **[Deployment Guide](docs/DEPLOYMENT.md)** - Production deployment instructions\n- **[Platform Limitations](docs/PLATFORM_LIMITATIONS.md)** - Known platform constraints\n\n### Technical Specifications\n- **[Technical Specs](docs/tech-specs/)** - Detailed design documents\n\n## Key Services\n\nAll business logic is encapsulated in Angular services using reactive patterns:\n\n| Service | Purpose | Key Features |\n|---------|---------|--------------|\n| `SettingsService` | Application configuration | Quality presets, import/export, auto-save |\n| `KeyboardShortcutsService` | Hotkey management | Custom bindings, conflict detection |\n| `AudioProcessingService` | Real-time audio effects | Noise suppression, EQ, compressor |\n| `ChatIntegrationService` | Multi-platform chat | Unified interface, moderation |\n| `FontManagementService` | Dynamic font loading | Google Fonts API, custom fonts |\n| `GoalTrackingService` | Progress overlays | Followers, subs, donations |\n| `BrowserSourceService` | Web embedding | Custom HTML, transparency |\n| `MediaCaptureService` | Device access | Webcam, mic, screen capture |\n\n## Project Structure\n\n```\nbroadboi/\n├── apps/\n│   ├── api/                    # NestJS backend\n│   │   └── src/\n│   │       └── app/\n│   │           ├── chat-integration/\n│   │           ├── twitch-auth/\n│   │           └── youtube-auth/\n│   │\n│   └── broadboi-web/          # Angular frontend\n│       └── src/\n│           └── app/\n│\n├── libs/\n│   └── core/                   # Shared library\n│       └── src/\n│           └── lib/\n│               ├── services/   # Core services\n│               └── models/     # TypeScript interfaces\n│\n├── docs/                       # Documentation\n├── scripts/                    # Build scripts\n├── docker-compose.yml         # Docker config\n└── mediamtx.yml              # MediaMTX config\n```\n\n## Testing\n\n```bash\n# Run all tests\nnpm test\n\n# Run with coverage\nnpm test -- --coverage\n\n# Watch mode\nnpm test -- --watch\n\n# Individual projects\nnpm run test:api\nnpm run test:web\n```\n\n**Coverage Goals**:\n- Services: 80%+\n- Components: 60%+\n- Utilities: 90%+\n\n## Contributing\n\nWe welcome contributions! Please see our [Developer Guide](docs/DEVELOPER_GUIDE.md) for:\n- Code style guidelines\n- Git workflow\n- Pull request checklist\n\n### Commit Convention\n\nWe follow [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\nfeat(audio): add noise suppression filter\nfix(chat): prevent duplicate messages\ndocs(readme): update installation steps\n```\n\n## Troubleshooting\n\n### Common Issues\n\n**Port already in use**:\n```bash\nkill -9 $(lsof -ti:4200)\n```\n\n**MediaMTX won't start**:\n```bash\ndocker-compose logs mediamtx\n./scripts/generate-certs.sh\ndocker-compose restart mediamtx\n```\n\n**Tests failing**:\n```bash\nnpx nx reset\nnpm install\n```\n\nSee [Developer Guide](docs/DEVELOPER_GUIDE.md#troubleshooting) for more.\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Support\n\n- **Documentation**: [docs/](docs/)\n- **Issues**: [GitHub Issues](https://github.com/matthias/broadboi/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/matthias/broadboi/discussions)\n\n---\n\nBuilt with ❤️ using Angular, NestJS, and modern web technologies","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkluth%2Fstream-buddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkluth%2Fstream-buddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkluth%2Fstream-buddy/lists"}