You are working on the latest Hobo Network codebase. Primary repo: - HoboStreamer/HoboStreamer.com Secondary repo for shared Hobo Tools / admin / notification / account-system work: - HoboStreamer/HoboApp Ground yourself in the real current code before changing anything. HoboStreamer currently includes RTMP, JSMPEG, WebRTC, chat, VODs, clips, moderation, restreaming, and realtime systems :contentReference[oaicite:0]{index=0} Relevant current files in the latest repo include: - server/streaming/rtmp-server.js :contentReference[oaicite:1]{index=1} - server/streaming/jsmpeg-relay.js :contentReference[oaicite:2]{index=2} - server/streaming/routes.js :contentReference[oaicite:3]{index=3} - server/streaming/restream-routes.js :contentReference[oaicite:4]{index=4} - server/streaming/restream-manager.js :contentReference[oaicite:5]{index=5} - server/streaming/broadcast-server.js :contentReference[oaicite:6]{index=6} - public/js/broadcast.js :contentReference[oaicite:7]{index=7} - public/js/chat.js :contentReference[oaicite:8]{index=8} - public/js/messenger.js :contentReference[oaicite:9]{index=9} - public/js/notification-ui.js :contentReference[oaicite:10]{index=10} - public/js/pastes.js :contentReference[oaicite:11]{index=11} - server/pastes/routes.js :contentReference[oaicite:12]{index=12} - public/js/admin.js :contentReference[oaicite:13]{index=13} - server/chat/dm-routes.js :contentReference[oaicite:14]{index=14} HoboApp contains the hobo.tools/admin/email/notification side: - hobo-tools/server/admin/routes.js :contentReference[oaicite:15]{index=15} - hobo-tools/public/admin.html :contentReference[oaicite:16]{index=16} - hobo-tools/server/notifications/email-service.js :contentReference[oaicite:17]{index=17} - hobo-tools/server/notifications/notification-service.js :contentReference[oaicite:18]{index=18} Your job is not to give vague advice. Audit the actual latest code, identify the exact files and root causes, and then implement the work below cleanly. Today’s main roadmap: 1. Fix and finalize the RTMP streaming method. 2. Fix and finalize the JSMPEG streaming method. 3. Finish the built-in Discord/global chat feature. 4. Add built-in Cozmo support. 5. Make the FFmpeg/JSMPEG workflow solid for a long-running 3D printer stream running from a Steam Deck / Linux setup. Additional backlog that must be analyzed and turned into real code changes: A. Breaking news chat feature - Add an optional breaking news system that can inject news updates into chat. - Streamer must be able to turn it off completely. - Pull from Twitter/X equivalents where practical, Reddit, news APIs, and scraping sources where legal/feasible. - Design it so sources are modular and individually enable/disable-able. - Do not spam chat. - Add sane throttling, dedupe, cooldowns, and source labeling. - Add per-stream or per-user settings for enable/disable. - If source credentials are missing, fail clearly in admin/settings instead of silently. B. Clickable links in DMs - Make links clickable in DMs using the same safe/clickable link logic already used in stream chat. - Reuse shared parsing/sanitizing logic rather than duplicating it. - Preserve security/sanitization and do not introduce XSS. C. Pastes NSFW protection - Add NSFW tagging for the paste system. - Text and image pastes flagged NSFW should not blast users immediately on open. - Add blur/cover/interstitial behavior for NSFW image pastes. - Add obvious but lightweight reveal controls. - Make sure metadata, backend storage, and frontend rendering all support the flag consistently. D. Requests system is still broken - The requests system is still very broken. - YouTube links fail to download or otherwise fail in the request flow. - Audit the full request pipeline end to end: submission, validation, provider detection, queueing, downloads, retries, error states, UI states, and playback. - Fix YouTube request failures. - Harden provider-specific errors and show useful failure reasons in UI. - Make the request system extensible for future request types, not just brittle one-off media links. E. Notifications are unreliable - Notifications often fail to load. - DM notifications do not reliably appear on screen. - Audit notification fetch, in-app toast/banner rendering, websocket or polling flow, unread/read state, stale data handling, dedupe, and timing. - Make DM notifications appear reliably when they should. - Remove weird stale/ghost notification behavior. F. Live clip creation on /broadcast is buggy - Improve the live clip feature on the Go Live page while the streamer is live. - Audit the entire live clip path: UI state, VOD readiness, timestamps, chunk timing, duration validation, finalization, and error handling. - Fix race conditions and misleading success states. - Make clip creation feel reliable and immediate. G. hobo.tools admin email editing feature is missing - There is supposed to be an edit email feature in hobo.tools/admin and it was never properly added. - Audit the admin panel and email service code in HoboApp/hobo-tools. - Implement the missing feature fully, including backend route, frontend UI, validation, persistence, and any safe update flow needed. H. Kick restreaming is broken - Kick restreaming appears broken. - Goosely keeps failing to go live on Kick. - Auto-go-live for restream destinations is not being respected. - Fix Kick restream startup, status handling, credential validation, and auto-start logic. - Fix misleading “connected” or “ready” states. - Verify restream manager behavior for enabled auto-start destinations. I. RobotStreamer singular message deletion is broken - Streamers can delete all RobotStreamer messages, but not individual RobotStreamer messages. - Audit permissions, message ownership, moderation/delete routes, frontend actions, and backend enforcement. - Add proper single-message deletion for the streamer where intended. - Do not break delete-all or moderation behavior. J. Kick and YouTube viewer counts are wrong or missing - Fix Kick viewer count and YouTube viewer count. - Add configurable API keys / credentials / settings into hobo.tools/admin where needed. - Make status and credential validation clear. - Do not fake exact live counts if the upstream source is unavailable; instead show degraded/unavailable state honestly. K. Create pastes.hobo.tools and connect it to the existing pastes system - Create a dedicated pastes.hobo.tools surface and link HoboStreamer’s text/image paste system to it. - Reuse the existing paste data model where practical. - Keep auth/account integration consistent with the Hobo network. - Ensure old HoboStreamer paste links and new dedicated paste-domain behavior are handled cleanly. - Do not break existing paste URLs unless you add explicit redirect/compat logic. L. Chat needs drag-and-drop resizability on desktop - Add desktop drag-resizable chat panes for: - stream pages - go live page - Must be smooth, persistent if appropriate, and not janky. - Do not break mobile layout. - Avoid layout thrash and weird pointer-event bugs. M. Discord/global chat finishing work - Audit the built-in global chat and any Discord bridge/relay related code. - Finish broken or partial paths. - Make sure identity, attribution, message delivery, moderation, and failure states are coherent. - Prevent duplicate relays and loopback behavior. N. Cozmo support - Add built-in Cozmo support in a way that fits the HoboStreamer broadcast ecosystem. - Keep streamer setup easy. - Design for future viewer interactions, not just broadcaster-only control. - If native/hardware control is not already present, add the smallest real modular implementation path and a clean integration surface instead of fake UI. O. RTMP and JSMPEG hardening - RTMP and JSMPEG must become reliable first-class broadcast methods. - Audit stream creation, endpoint generation, health reporting, ingest detection, reconnect behavior, viewer playback, docs/instructions, and status UI. - Improve FFmpeg examples, especially for long-running unattended streams. - Add a practical JSMPEG/FFmpeg setup path for a persistent 3D printer stream from a Steam Deck/Linux environment. P. Breaking news + chat safety + moderation - Make sure the breaking news feature respects moderation settings, chat spam controls, and streamer preferences. - Streamer should be able to disable globally and per stream. - Avoid flooding chat with duplicates or low-quality junk. Q. UX cleanup across all touched features - Improve empty states, loading states, error messaging, admin credential validation messaging, and broken-toggle behavior. - Do not leave fake buttons that do nothing. - Do not leave silent failures. R. Connection stats / broadcaster health on Go Live - Audit and improve the Go Live stats button/overlay. - Fix broken bitrate reporting. - Add a simple top-level connection overview such as excellent/good/fair/poor/reconnecting/no data, based on real measured conditions. - Distinguish measured live stats from estimated target settings and unavailable telemetry. - Reset stale counters/timers properly when switching streams, changing media sources, or recovering connections. Execution requirements: Phase 1: audit first - Build a real bug matrix before coding. - For each item above, identify: - exact frontend files - exact backend files - whether HoboStreamer.com or HoboApp owns it - root cause - fix approach - regression risks - Do not make up files, routes, or data models. - Inspect the current code first. Phase 2: implement - Implement the fixes directly in the real codebase. - Keep changes modular. - Reuse shared helpers where possible. - Do not duplicate link parsing, notification logic, auth checks, or restream status logic unnecessarily. - Avoid memory leaks, duplicate intervals, duplicate websocket listeners, stale state, and reconnect loops. - Preserve current architecture unless there is a clear reason to improve it. Phase 3: verify After implementation, provide: - a changed-file summary - any schema/config/env/admin changes - any new API keys or admin settings required - any migration/redirect steps needed - a manual QA checklist for every touched feature - any assumptions made where the current code was incomplete Important coding standards: - No fake placeholders. - No TODO-only output. - No mock-only features passed off as complete. - No giant rewrites unless necessary. - Keep desktop and mobile behavior intact. - Keep the Hobo network identity/admin relationship coherent across HoboStreamer and hobo.tools. - Be explicit when a feature belongs in HoboStreamer.com versus HoboApp/hobo-tools. Prioritization order: 1. RTMP reliability 2. JSMPEG reliability 3. Request system + YouTube failure fixes 4. Notification reliability + DM onscreen notifications 5. Kick restream + auto-go-live + viewer counts 6. Live clip stability 7. DM clickable links 8. RobotStreamer single-message deletion 9. NSFW pastes behavior 10. pastes.hobo.tools integration 11. chat drag-resize on desktop 12. hobo.tools admin email editing 13. Discord/global chat completion 14. connection stats / health overview 15. breaking news feature 16. Cozmo support 17. 3D printer / FFmpeg long-running stream quality-of-life improvements Now start by auditing the latest code and producing the bug matrix, then move straight into implementation.