INTERNAL — RESTRICTED
Confidential Engineering & Ops Doc
This document consolidates the end‑to‑end design, code architecture, release notes, and operating procedures for the widgets and UI systems we built and refined in this thread: MVP TV — Featured Channels (Sidebar), BD Related Posts — Auto‑Rotating Card Deck, and eco3 — Collapsible All‑in‑One Sidebar. It is intended for internal engineering, growth, and product ops.
0) Executive Summary
- Goal: Increase attention, time‑on‑page, return visits, and cross‑ecosystem discovery while preserving a smooth, minimal, mobile‑friendly experience that works inside Brilliant Directories (BD) and general PHP/LAMP environments.
- What we shipped:
1) Product Principles (“Key Values”)
- Attention wins: bold but minimal; motion has purpose (low cognitive load).
- Frictionless preview → intent: instant previews, short hooks, clear CTAs.
- Continuity: pop‑outs continue the current stream/session when possible (don’t “restart” viewers).
- Graceful degradation: BD quirks, ad blockers, slow networks; never show broken UI.
- Observability by default: all key interactions fire measurement events compatible with CrownLytics/UTMs.
- Accessibility first: semantic roles, ARIA labels, keyboard pause, color contrast.
2) MVP TV — Featured Channels (Sidebar)
2.1 Features
- Branding: title “MVP TV”, big 📺 icon above, “Featured Channels” subtitle in gold pill on black.
- Player: Viloud
- Rotation: random start; auto‑rotate every 70s (60s preview + 10s buffer). Timer is global/static and keeps ticking while window open.
- Controls: Removed “Next”/mute UI; added two minimalist black icons under player:
- Watch Now (opens current channel in a new window; continuation intent)
- Copy Link (copies the current channel URL)
- Now Watching (below screen): emoji + channel title + short description.
- Linear vs OD: OD uses
- Preload: next channel is prepared to minimize buffer; hover tooltips reflect the actual next item.
- Powered by: small footnote: Powered by Melanated Voices Platform (MVP) → tv.melanatedvoices.com.
2.2 Channel Catalogue
- OD (random): ThriveHope (adds sustainability initiatives), Locticians, ThriveHealth, ThriveCulture, ThriveBusiness, ThriveFinance, ThriveGaming.
- Linear: MVP TV (flagship), MVP BLACK (linear), MVP+ FAST via m3u8:
2.3 UX/Interaction Rules
- No logo overload; minimal header; no redundant pills; consistent “Now Watching” grammar across channels.
- Sticky/PiP disabled unless we re‑enable only on manual user interaction (deferred).
- Pop‑out seeks to preserve the current channel/continuity (best‑effort with Viloud).
2.4 Accessibility
- role="complementary"
- Keyboard users can pause rotation by focusing the widget; tooltips avoid motion surprise.
2.5 Engineering Notes
- Timer: single interval; remains active as long as page is open; rotation gated by in‑view state.
- Preload: image/link hints for “next” channel; avoids blocking main thread.
- Sync: rotation clock dictates channel change; progress/timer UI matches the 70s cadence.
- Removal list: mute button, browse/expand variants, duplicate pills, PiP, full‑width buttons.
2.6 Event Map (CrownLytics)
- mvtv_view
- mvtv_channel_change
- mvtv_popout_click
- mvtv_copy_click
Data layer snippet (example):
window.dataLayer = window.dataLayer || [];
function track(evt, payload){ try{ dataLayer.push({event: evt, ...payload}); }catch(e){} }
3) BD Related Posts — Auto‑Rotating Card Deck
3.1 Why we rebuilt
- Prior attempts broke images (protocol/path issues) and introduced stray chars (e.g.,
- Needed strict compatibility with BD’s default query + media resolution to ensure thumbnails always render.
3.2 What’s inside
- Queries: identical to BD’s
- Media: re‑runs
- Deck: 8–10 items; single-card rotation, no bullets/arrows; pauses on hover/off‑screen.
- Titles: one line + explicit
- Header: rotating single‑emoji hook (e.g.,
- Actions: Open and Copy link (with robust clipboard fallback).
- No stray preload: removed
3.3 Known BD Quirks + Fixes
- Mixed PHP/HTML can duplicate blocks — keep the render layer clean.
- Avoid
- mysql()
3.4 Events
- bdrel_impression
- bdrel_card_view
- bdrel_copy_click
4) eco3 — Collapsible All‑in‑One Sidebar (Closed by default)
4.1 Composition
- Header: “Verified Integrations”.
- Brand/Platform Pills: Rotating strip (if more than visible count) prioritizing active socials; backfilled with ecosystem placeholders (Locticians, ThriveSeat, CrownRewards, CrownFluence, Mane Experience, Artful Mane, CrownLytics).
- Main Rotator: 5–8s slides with randomized animations (fade/up/left/zoom/tilt).
- Collapsible Ecosystem: one‑open‑at‑a‑time accordion; QuickNav select jumps; deep‑link hash mapping.
4.2 Content Pools
- Core Integrations (conditional on member fields): ThriveSeat, ThrivePeer, CrownThriveU, CrownRewards, Crown Affiliates.
- Go‑Flipbooks: normalized and classified (Services / Lookbook / Guide / Catalog / Booking).
- Sustainability: EcoDrive (water, plastics, trees, kelp, etc.) + Stripe Climate (DAC, Mineralization, Bio, OAE, EW).
- XENThrive: added and positioned with correct brand tone; links active.
4.3 Link Decoration Policy
- Append UTMs/affiliate to all ecosystem/internal links originating from this widget, except: Social media domains, EcoDrive, Stripe.
- Ensure
4.4 Events
- eco3_pill_rotate
5) Release Notes & Changelog
Dates/times omitted; sequence reflects our iteration order.
MVP TV — Sidebar
- v1.0: Base widget; random channel; minimal header; Now Watching; Preview/Pop‑out.
- v1.1: Remove logo; center all; unify design across channels; Featured Channels gold; Powered by MVP link.
- v1.2: Add channels: ThriveHealth, ThriveCulture, ThriveBusiness, MVP TV (linear), MVP BLACK (linear).
- v1.3: Add big 📺 icon; “Loading…” pill above screen; fix browse/expand.
- v1.4: Convert dropdown → rotating badge; 10s timers; add ThriveFinance & ThriveGaming; remove bottom pill.
- v1.5: Button → Preview Channel; Now Watching + description below TV; add Pop‑out.
- v1.6: Sync progress & channel; Featured subtitle in black pill; refine typography.
- v1.7: Static 70s timer (60+10 buffer); pop‑out preserves continuity; remove PiP; autoplay in view / pause out of view.
- v1.8: Remove “Next” button; preload next channel; accurate hover tooltip; icons only (black) for Watch and Copy; remove mute UI (bottom reminder removed per latest).
- v1.9: Add MVP+ FAST (m3u8); OD vs linear rules hardened.
BD Related Posts — Deck
- v1.0: Port BD queries exactly; 8–10 rotating cards; ellipsis; copy/open actions.
- v1.1: Fix double emoji in hooks; remove stray
- v1.2: Image bullet‑proofing: re‑run BD media; normalize
eco3 — Collapsible Sidebar
- v1.0: Verified Integrations header; rotating social/brand pills; main slide rotator; collapsible ecosystem.
- v1.1: UTM/affiliate appending to ecosystem/internal links; exemptions: socials, EcoDrive, Stripe.
- v1.2: Go‑Flipbooks pool; classification; sustainability interleaving cadence; XENThrive links added; pill rotation bug fixed in header.
6) Architecture & Key Implementation Details
6.1 Common
- IntersectionObserver for auto‑pause out of view (MVP TV & BD Deck) to save CPU and avoid dissonance.
- Timers: one interval per component; cleared/resumed on hover/focus, re‑scheduled on view change.
- Preload strategy: lightweight image hints in hidden container—no
- Responsiveness: narrow (≤420px) rules set buttons to stack or size to text; no full‑width buttons unless requested.
- A11y/ARIA: roles on landmarks & slides;
6.2 MVP TV specifics
- Channel object:
- Rotation:
- Preload Next: prepare next URL/tooltip; swap on tick.
- Pop‑out:
6.3 BD Deck specifics
- Media Normalizer: if
- Title Clamp: explicit
6.4 eco3 specifics
- Pill Rotation: if more items than visible, rotate every ~6s; pause on hover; no rotation if only placeholders.
- Link Decorator: read UTM/affiliate params from
- Accordion: only one
7) Install Guides
7.1 MVP TV (Sidebar)
- Include the widget PHP/HTML/CSS/JS in a BD widget or theme partial that renders in the sidebar.
- Ensure Font Awesome is available (for icons).
- Add/maintain the
- Confirm
7.2 BD Related Posts Deck
- Replace the stock “Bootstrap Theme – Display – Related Posts by Category” widget with our image‑safe v3.6 render layer.
- Do not change the BD queries or
- Place CSS in widget header or theme CSS; JS at bottom of widget.
7.3 eco3 Sidebar
- Drop
- Map member fields (
- Confirm brand pill icons (Font Awesome) load; verify QuickNav ids; confirm link decoration exemptions.
8) QA & Acceptance Checklist
- Visual:
- MVP TV header center‑aligned; gold pill subtitle on black; no extra pills.
- “Now Watching” shows correct emoji/title/desc for each channel.
- BD Deck cards show real images; titles never wrap to two lines; no layout shift.
- eco3 pills rotate (if socials active) and stop on hover.
- Behavior:
- MVP TV: auto‑starts when in view; pauses out of view; rotates every 70s; pop‑out continues current channel; copy link puts full absolute URL on clipboard.
- BD Deck: rotates 6.5s, pauses on hover/off‑screen; copy link works with fallback.
- eco3: slides rotate 5–8s; QuickNav opens correct section; only one accordion open.
- Perf: no console errors; CPU stable when not in view; no network floods.
- A11y: focusable controls;
9) Analytics & Attribution
- UTM & Affiliate decoration: eco3 appends for internal/ecosystem links; exempt socials/EcoDrive/Stripe.
- Suggested UTM defaults:
- Event names aligned to CrownLytics; confirm GA4 or CDP mapping.
10) Roadmap (Short‑Term)
- MVP TV: lightweight channel lineup tooltip w/ next‑up preview art; optional keyboard shortcuts (←/→) when focused.
- BD Deck: add post type badges (Article/Video/Event) via a small corner pill; optional “Save” action for logged‑in users.
- eco3: add campaign‑of‑the‑day slot; A/B test slide order/cadence; progressive image loading per slide.
11) Troubleshooting
- Images not showing (BD): verify
- Auto‑rotation stuck: IntersectionObserver may be paused (not in viewport); hover/focus stops the timer; test by scrolling slightly.
- Pop‑out restarts: Viloud linear streams may not support mid‑point seek; continuity is best‑effort.
12) Security & Compliance
- Open in new window always with
- No third‑party preload injections; adhere to BD output constraints.
- Privacy: events include generic IDs only; no PII in analytics payloads.
13) Appendix — Key Snippets (for reference)
These are illustrative only; actual widgets in codebase are canonical.
A. MVP TV: Channel map → embed URL
$random = $c['isLinear'] ? 0 : 1;
$embed = "https://player.viloud.tv/embed/channel/{$c['id']}?autoplay=1&volume=1&controls=1&title=1&share=1&open_playlist=0&random={$random}";
B. BD Deck: image hardening
$img = $r['img'];
if ($img && strpos($img, 'http') !== 0) {
$img = preg_replace('~^.*?/public_html~i', '', $img);
if ($img === '' || $img[0] !== '/') $img = '/'.$img;
}
C. eco3: decorate links with UTMs (exempt list)
const EXEMPT = ['soundcloud.com','youtube.com','instagram.com','facebook.com','twitter.com','x.com','pinterest.com','tiktok.com','snapchat.com','wa.me','app.ecodrive.community','climate.stripe.com'];
function decorate(url){
try{ const u=new URL(url,location.origin);
if(!/^https?:$/.test(u.protocol)) return url;
if(EXEMPT.some(d=>u.hostname.endsWith(d))) return url;
const s=new URLSearchParams(location.search);
['utm_source','utm_medium','utm_campaign','utm_term','utm_content','crown-aff'].forEach(k=>{
const v=s.get(k)||sessionStorage.getItem(k); if(v && !u.searchParams.has(k)) u.searchParams.set(k,v);
});
return u.toString();
}catch(e){return url}
}