di_video_*, api/videos/*, VideoPlayer.tsx), device pairing/heartbeat, and player pages. This is an extension, not a new build.Because Eric is an authorized TP-Link reseller (and can obtain dealer accounts for other brands), this add-on has two revenue lanes instead of one:
Onboard the client's existing wired cameras / NVR / DVR (Amcrest, Reolink, Hikvision, Dahua/Lorex, XMEye, Tapoβ¦). Install a small bridge box on their LAN; their feeds appear in the Displayee dashboard and on signage screens.
Revenue: monthly add-on fee + one-time setup/install fee (bridge hardware + config).
For clients with incompatible gear (Ring/Nest/Wyze/Night Owl) or no cameras: sell + install a Boom-standard kit (TP-Link VIGI PoE or Tapo, at reseller margin). Guarantees RTSP/ONVIF compatibility and turns a disqualified lead into a bigger sale.
Revenue: hardware margin + install labor + the same monthly add-on.
Verdicts are for our pipeline: can an on-LAN bridge pull a live stream (RTSP/ONVIF) and relay it to the browser? Sources verified July 2026.
| Brand / line | RTSP | ONVIF | 3rd-party cloud API | Verdict | Notes |
|---|---|---|---|---|---|
| Amcrest (Dahua OEM) | β On by default | β Yes | β (full local HTTP API) | WORKS β best | Reference brand; URLs stable for a decade; NVR channels too; JPEG snapshot API for thumbnails |
| TP-Link Tapo (wired) | β After setup | β Port 2020 | β partner-gated, excludes cameras | WORKS | Needs per-camera "Camera Account" + Third-Party Compatibility toggle; substream ~640Γ360; firmware churn risk; battery models = NO |
| TP-Link VIGI (business) | β | β Profile S | VIGI Cloud VMS | WORKS | Your reseller line β the Path B default (see Β§9) |
| Reolink (wired/NVR) | β Default on | β (toggle) | β | WORKS | h264Preview_01_main|sub; battery Argus/LTE lines = No |
| Hikvision + Annke/LTS OEMs | β | β (enable + ONVIF user) | β | WORKS | /Streaming/Channels/101; NVR ch2 substream = /202. NDAA/FCC caveat for resale (Β§9) |
| Dahua / Lorex (recorders) | β | β | β | WORKS | Same URLs as Amcrest. Lorex Wi-Fi "Lorex Home" app cams = Partial/No β check their compatibility chart |
| Ubiquiti UniFi Protect | β RTSPS :7441 | β | β Official local API (2024-25) | WORKS | Most SaaS-friendly: provision streams programmatically via API key. Premium tier option |
| Swann (DVR/NVR) | β From recorder | β οΈ Inconsistent | β | PARTIALβWORKS | /ch01/0 or Hik-style; SWIFI Wi-Fi cams = No |
| XMEye / Xiongmai β Gurapos | β οΈ Usually available, often not enabled | β οΈ Port 8899, flaky + 2025 CVEs | β cloud UID path closed | PARTIAL | LAN-only via bridge; security-toxic device class β full plan in Β§5 |
| Eufy | β οΈ Some models via HomeBase | β | β | PARTIAL | Bonus if it works; don't promise. Battery cams only stream while awake |
| Wyze | β (Oct 2025 beta fw only, no commitment) | β | β (reverse-engineered bridge only) | NO | docker-wyze-bridge exists but unsupportable for SaaS |
| Ring | β Never | β | β No video-out API; E2EE blocks hacks | NO | Cloud-only by design β Path B upsell |
| Google Nest | β | β | β οΈ SDM WebRTC exists but commercial applications closed | NO (for SaaS) | $5 sandbox is non-commercial; Google not accepting commercial apps |
| Night Owl | β Locked down | β οΈ Claimed, unusable | β | NO | Common at Costco/Sam's β advise replacement (Path B) |
Key sources: TP-Link FAQ 2680 Β· Amcrest RTSP KB Β· Reolink RTSP Β· UniFi Protect API Β· Wyze RTSP Β· Nest Device Access Β· iSpy XMEye DB
rtsp://CAMERAACCT:PASS@CAMERA_IP:554/stream1 β main stream (HQ) rtsp://CAMERAACCT:PASS@CAMERA_IP:554/stream2 β substream ~640Γ360@15fps (use this) ONVIF: port 2020, Profile S
Tested live on the Boom Media LAN: VIGI VMS Auto Discover only finds VIGI-protocol devices β Tapo cameras never appear in the scan. They must be added via Manually Add β ONVIF β camera IP β port 2020 β Camera Account credentials. Same-subnet required (guest Wi-Fi / VLAN / AP client-isolation blocks it).
Camera: rtsp://user:pass@IP:554/cam/realmonitor?channel=1&subtype=0 (0=main, 1=sub) NVR: same URL β channel = camera number on the recorder Playback: /cam/playback?channel=1&starttime=... (recorded clips, later, free) Snapshot: http://IP/cgi-bin/snapshot.cgi?channel=1 (JPEG β cheap dashboard thumbnails)
Sources: Amcrest RTSP KB Β· NVR RTSP KB Β· Official HTTP API spec (PDF)
Confirmed: Gurapos's DVR is a Xiongmai device registered on the xmeye.net cloud portal (visible under the Boom account by cloud serial, custom device credentials). It's online and healthy β but that tells us less than it seems:
python-dvr, dvrip, sofiactl) speak DVRIP directly to TCP 34567 on the LAN only β none traverse the cloud relay.root:xc3511, CVE-2016-1000245).default:tluafed backdoor usable via the cloud, predictable UIDs, unencrypted traffic, unsigned firmware (CVE-2018-17915/17917/17919).rtsp://IP:554/user=admin&password=XXX&channel=1&stream=0.sdp?real_stream rtsp://IP:554/user=admin_password=XXX_channel=1_stream=0.sdp (stream=0 main Β· stream=1 sub; channel = camera number)
| Approach | Verdict | Why |
|---|---|---|
| Port-forward cameras/DVR to the internet | DISQUALIFIED | Shodan-scanned constantly; camera CVE history (esp. XMEye); credentials in URLs; CGNAT customers can't forward anyway |
| Camera-native P2P clouds (XMEye, Tapo cloud, β¦) | CLOSED | Proprietary, no APIs, ToS walls; nothing to build on |
| VPN only (Tailscale subnet router) | WORKS, PRICES BADLY | $1/device/mo past 50 devices at fleet scale; still needs on-site hardware anyway. Plain WireGuard as a management backchannel: yes |
| Cloudflare Tunnel / Stream | NO | Stream has no RTSP ingest (RTMPS/SRT/WHIP only) and ~$1/1,000 min delivered β $43/mo per 24/7 viewer; Tunnel is a ToS minefield for video |
| AWS Kinesis Video Streams | WORKS, 10Γ COST | β$5β10/cam/mo at 1 Mbps vs pennies self-hosted |
| On-site bridge dialing outbound β self-hosted relay | β THE PATTERN | Exactly what Eagle Eye ("all connections outbound-only"), Videoloft (Cloud Adapter), and Solink ship. No router changes, survives CGNAT, credentials never leave the LAN |
sourceOnDemand = only pull/relay while someone's watching (dashboard); continuous push only for cameras pinned to signage. External-auth callback wires directly into Supabase tenancy.| Viewing pattern (per camera) | Egress GB/mo | Infra cost |
|---|---|---|
| Owner checks 2 h/day @ 512 kbps substream | ~13.5 | ~$0.14/mo (usually $0 β inside droplet transfer allowance) |
| 8 h/day @ 1 Mbps | ~108 | ~$1.08/mo |
| 24/7 signage tile @ 1 Mbps | ~324 | ~$3.24/mo DO Β· $1.62 Bunny volume tier (one pull, N screens) |
Ingest is free (DO inbound). DO egress overage $0.01/GiB; Bunny CDN $0.01/GB NA/EU ($0.005 volume). All-in β $0.20β$3.50/cam/mo.
| Brand | Program | How to get in | Reality check |
|---|---|---|---|
| TP-Link (VIGI/Tapo) | SolutionX Partner Program β Registered β Silver β Gold β Platinum. Higher VIGI/Omada margins, demo-kit discounts, deal registration, dedicated AM; current promo: free VIGI camera via Rewards Store | Eric is already in Β· partner portal Β· b2bsales.usa@tp-link.com | Margins not public; typically 10β25% off street by tier/deal-reg. Best structured program of the bunch |
| Amcrest | YES β Authorized Dealer Program + Dealer Portal (dealer-price ordering). No published NFR/demo program, but refurb SKUs ~30% off work as demo stock | Apply: amcrest.com/dealer-new Β· portal.amcrest.com Β· dealers@amcrest.com (expect: business entity, resale/tax cert, install-volume info) | Discounts thin-but-real β street prices are already near-wholesale. No ADI/ScanSource/Ingram distribution; the Dealer Portal is the channel. Worth joining as a free price-hedge |
| Reolink | Partner program with volume minimums β accounts cancelled if minimum missed within 6 months | reolink.com/distributor-reseller | Geared to distributors, not small integrators β skip |
| Ubiquiti | No protected margin β direct-sale model; distributor margins ~5β10% | store.ui.com / ISP Supplies | Money is in design/install/monthly service, not the box |
Ranking for a 5β20 cam/month integrator: TP-Link SolutionX > Amcrest dealer > Reolink. Apply to Amcrest anyway (free), but lead with VIGI.
| Line | Example 4-cam kit | Hardware | Pipeline fit (go2rtc) | Margin | Boom verdict |
|---|---|---|---|---|---|
| TP-Link VIGI | 4Γ C440 turret (~$50β60 ea) + NVR1008H-8MP (8Γ PoE ports, ~$200β250) | ~$440β490 street, less at partner pricing | Excellent β native ONVIF Profile S + RTSP, no cloud account; free VIGI Cloud VMS as client bonus | β SolutionX | PRIMARY |
| Tapo (wired only) | 3Γ C120 (~$35) + C320WS (~$40) + TL-SG1005P switch (~$45) | ~$160β190 | Good with camera-account setup; 2-of-3 feature limit; never battery models | Partial via TP-Link | Budget tier |
| Amcrest | 4Γ IP5M-T1179EW 5MP (~$50β65 ea) + NV4108E-HS NVR (~$99β130) | ~$330β390 | Excellent β Dahua stack fully open, snapshot API | Thin dealer pricing | Secondary |
| Reolink | RLK8-800B4 kit incl. 2TB | ~$400β470 | Spotty β H.265 main-stream + historic RTSP flakiness; battery/Hub sessions cap ~5 min | Volume-gated | Avoid for streaming |
| Hik/Dahua + OEMs | 4Γ 4MP turret + NVR | ~$300β400 | Excellent technically | Channel collapsing | AVOID (FCC) |
| UniFi Protect | 4Γ G5 Turret Ultra ($129 ea) + UNVR ($299) + PoE switch ($109) | ~$925 + HDD | Good via RTSPS re-stream :7441 (test go2rtc unifi source first β known quirks) | β none | Premium tier |
| Kit | Contents | Hardware | Install | Sell at |
|---|---|---|---|---|
| π’ STARTER tiny shop, Wi-Fi, no cable pulls | 2Γ Tapo C120 + 1Γ C320WS outdoor (+ optional C225 pan/tilt) + TL-SG1005P PoE switch (powers edge box/AP) | ~$170β215 | Half-day, screwdriver-level; camera-account setup is the only fiddly bit | ~$499 installed + monthly |
| π£ STANDARD restaurant PoE β the default SKU | 4β6Γ VIGI C440 turrets + 1β2Γ C340 bullets (patio/rear) + NVR1008H-8MP (recorder + PoE switch in one) + 4TB surveillance HDD (~$95). Edge agent pulls RTSP from cameras directly; NVR = local 24/7 evidence; free VIGI Cloud VMS for the client | ~$650β850 street, less at SolutionX | 1β1.5 days (Cat6 pulls; South-FL concrete/block adds drilling) | ~$1,800β2,500 installed + monthly |
| π΅ PREMIUM flagship / multi-zone | UniFi: 6Γ G5 Turret Ultra + G5 Pro (POS/entry) + UNVR + 8TB + PoE switch β $1,600β1,800 Β· or all-VIGI: 6Γ C355/C440 + 1β2Γ C540V pan/tilt + NVR2016H + TL-SG2210P β $1,200β1,500 partner pricing (keeps margin) | $1,200β1,800 | 2 days incl. camera VLAN | $3,500β5,000 installed + higher monthly |
Sources: VIGI ONVIF/RTSP FAQ Β· Amcrest dealer application Β· Reolink distributor T&Cs Β· FCC Covered List Β· Dec 2025 FCC rule Β· IPVM margin report Β· Miami labor guide
Displayee (Displayee/app/) already ships the surfaces this needs β this is an extension of the existing video subsystem, not a greenfield build:
di_video_libraries / di_video_gallery_items tables, api/videos/* routes, Bunny webhooks, VideoPlayer.tsx, signed-URL playback, per-library RLS.api/devices/*) β the same pattern extends to bridge boxes (a bridge is just another paired device that heartbeats)./player/[id], /g/[id], Fire TV / Electron / Chrome players β a camera feed becomes a new playlist tile type.| Phase | Scope | Notes |
|---|---|---|
| P0 Pilot (1β2 wks) | MediaMTX container on boom-hosting via Coolify; one bridge (Pi + go2rtc) on a friendly site (Gurapos or office Tapo cams); hardcoded auth; WebRTC playback in a test page | Proves the whole chain end-to-end before any Displayee code |
| P1 MVP | di_cameras + di_bridges tables; bridge pairing (reuse device-pair flow); dashboard "Cameras" tab with live WebRTC view + snapshot thumbnails; MediaMTX auth-callback β Supabase | Sellable: dashboard live view per location |
| P2 Signage | Camera tile type in playlists; HLS β Bunny fan-out to screens; multi-cam grid layout | The differentiator β nobody else puts the kitchen cam on the menu board network |
| P3 Later | Recorded clips (Amcrest/NVR playback URLs = free), motion events (Frigate upsell), Stripe metering per camera | Only after P1/P2 prove demand |
-an β FL-compliant by default, auto-restart, launch at logon) β MediaMTX on boom-hosting (Docker, restart-unless-stopped, publish auth).http://24.199.95.101:8889/demo/cam1 (sub) Β· /demo/cam1hd (HD) Β· HLS http://24.199.95.101:8888/demo/cam1/index.m3u8http://localhost:1984 (go2rtc). Bridge stack lives in C:\Users\eric\boom\; starts via Startup-folder VBS.stream.boommedia.us β 24.199.95.101 + TLS (required before embedding in https pages β Displayee/BOO), then the Displayee /cam pages + partner API (mockup doc has the file map).The original $0 recipe (all owned hardware):
| Piece | Use | Cost |
|---|---|---|
| Eric's existing Tapo home cameras β confirmed on hand | RTSP sources: create Camera Account in Tapo app + enable Third-Party Compatibility β rtsp://acct:pass@camIP:554/stream2 | $0 (owned) |
| Any spare PC / laptop | Stand-in bridge running go2rtc (single free binary, no install) pulling the Tapo streams | $0 |
| MediaMTX container on boom-hosting (Coolify) | Cloud relay β go2rtc pushes outbound to it; view in any browser via WebRTC | $0 (~10 min setup) |
# 1. Per camera, in the Tapo app: # Device Settings β Advanced β Camera Account β create user/pass # Me β Third-Party Services / Tapo Lab β Third-Party Compatibility β ON # Note the camera IP (app shows it, or router client list) β reserve it in DHCP # 2. On the spare PC β go2rtc.yaml (go2rtc has a native tapo handler too): streams: demo_cam1: rtsp://ACCT:PASS@192.168.1.50:554/stream2 demo_cam2: rtsp://ACCT:PASS@192.168.1.51:554/stream2 publish: # push outbound to the droplet relay demo_cam1: rtsp://USER:PASS@mediamtx.boommedia.us:8554/gurapos-demo/cam1 # 3. On boom-hosting via Coolify: run bluenviron/mediamtx container # (ports 8554 RTSP-in, 8889 WebRTC/WHEP out; set publish/read credentials) # 4. Watch from anywhere: http://mediamtx-host:8889/gurapos-demo/cam1 # β later this URL is what <VideoPlayer> wraps in the Displayee dashboard
Zero-hardware dev note: ffmpeg can publish a synthetic test-pattern stream into MediaMTX β build the Displayee dashboard UI with no camera at all.
Every camera on TP-Link's official camera-account list supports RTSP/ONVIF (FAQ 4372). The cheap picks, street prices β:
| Model | What it is | ~Price | Demo role |
|---|---|---|---|
| Tapo C110 | 2K indoor, fixed | ~$20 | Cheapest RTSP camera that exists β buy 2 |
| Tapo C210 | 2K pan/tilt indoor | ~$24 | The wow-factor tile (pan/tilt via ONVIF) |
| Tapo C120 | 2K indoor/outdoor, spotlight | ~$35 | Doubles as the "patio cam" story |
| Tapo C320WS | 2K QHD outdoor wired, color night | ~$40 | True outdoor demo cam |
| Tapo C216 | 1080p+ pan/tilt (newer) | ~$30 | Alternative to C210 |
| Tapo C325WB ColorPro | Premium outdoor low-light | ~$90+ | Skip for demo β premium tier only |
| Tapo C575D (dual-lens PoE PT) | 4K dual lens | ~$130 β | Skip β note: dual-lens cams expose ONLY the wide lens via ONVIF |
| App | Status | Next step |
|---|---|---|
| Addee | LIVE | Pull live BOO menu items into ad generator |
| Bloggy | LIVE | Auto-draft blog on new BOO menu item |
| Rankee | LIVE | Preload "order online" keywords per restaurant |
| Posttee | SCAFFOLD (stalled) | Blocked on Meta App Review + Google Business API approval |
| Dashee | LIVE (beta) | BMBB bail-bonds vertical in beta; BOO reporting template |
| Approvee | LIVE (active dev) | Most recently touched (Jul 9); PDF/video pin-drop designed, not built |
| Displayee | LIVE | Bunny video shipped Jul 7 β camera add-on is the next extension (this doc) |
| Replyee | LIVE / BETA | Verify 002_live_chat.sql ran + one E2E handoff test |
| QRcodee | LIVE | One-click BOO ordering-page destination preset |
| Rewardee | BUILT β blocked on Eric | Run SQL 001β004 β merge boo-v2 ecosystem-cleanup β smoke test β Stripe products |
| Compliee | BUILT, not deployed | Deploy-gated (Coolify Dockerfile ready); new security-monitoring spec Jul 13 |
| Signnee | LIVE (deploy-gated) | Standard "BOO Restaurant Agreement" template |
| Assistee | BUILT, not deployed | Set .env.local β Vercel deploy (RustDesk relay already live) |
| Localey | BUILT (Phase 1, Jul 1) | Fastest-moving; owns "reviews" ecosystem-wide |
| Servvee | CUT (Jul 11) | Archived in place; BOO-internal promo/menu layer only |
Note: the boundary doc's claim that Displayee is "docs-only" is outdated β the full app lives at Displayee/app/ (nested git repo). Eric's 4 pending Rewardee/BOO steps remain the top ecosystem blocker (see SaaS/.md/CLEANUP_EXECUTION_HANDOFF.md).