Primary User
Peacock executives screening unreleased MicroMaker cuts on iPhone.
Bananas is the MicroMaker screening app โ a simple, solid app for executives to screen vertical episodes the way they are meant to be watched. Phase 1 shipped to Peacock on April 21, 2026. Phase 2 is now in scoping.
Bananas โ the MicroMaker screening app โ shipped to Peacock on April 21, 2026. Phase 1 is complete and the app is in active daily use by the network. Phase 2 โ a 30-day push across five workstreams (basic telemetry, advanced telemetry, maintenance, UI, documentation) โ is now in scoping.
| Phase | Status | Where to Read |
|---|---|---|
| Phase 1 โ Core Viewing App | Shipped (Apr 21, 2026) | Section 3 (archive) |
| Phase 2 โ Five workstreams (basic telemetry, advanced telemetry, maintenance, UI, documentation) | Scoping (active) | Section 2 |
| Phase 3+ โ CMS, custom dashboards, downloads | Deferred | Section 3.13 (high-level only) |
On April 21, 2026, Aaron Rothman greenlit the first 14 episodes of Campus Confidential: Miami and invite emails went out at 7:09 PM to 29 Peacock executives, music rights organizations, and program ops contacts, plus 11 additional internal stakeholders. Salon Confessionals with Madison LeCroy is the next series in the pipeline (target air week of 7/6).
The shipped product is a superset of what the v1 spec (Section 3) describes. Notable deltas added during build:
Section 2 lays out Phase 2 in detail. Five workstreams over a 30-day window (04/30 โ 05/30), ranked by importance:
session_start, playback_start, playback_complete) to Amplitude and stand up the dashboard. Fastest path to a usable view; foundation for everything else. Internal rollout end of W2.The strategic purpose is to prove the team can ship a learning tool, not just a screening tool โ building the case for Peacock to expand the partnership and unlock broader investment. (a) gets the dashboard up; (b) gets the insights deep enough to demo.
Peacock_Exec_Rollout_Summary.md.Audience expands from the original ~10โ30 exec cohort to (a) a broader Bravo/Peacock stakeholder pool and (b) a small consumer beta-tester cohort whose engagement data is the signal that actually matters.
Phase 2 work is organized into five areas, ranked by importance. (a), (b), (d), and (e) take place over the next 30 days (04/30 โ 05/30). (c) is ongoing, on retainer + hourly on demand โ not on the deliverable schedule.
| # | Workstream | Window | Owner |
|---|---|---|---|
| (a) | Basic telemetry โ port Phase 1 events to Amplitude / dashboard | 30-day | Engineering |
| (b) | Advanced telemetry โ new Phase 2 event taxonomy + dashboard views | 30-day | Engineering |
| (c) | Maintenance & troubleshooting โ ongoing post-Phase-1 support | Ongoing | Engineering (retainer + hourly) |
| (d) | UI enhancements โ playback affordances surfaced from Phase 1 screening | 30-day | Engineering |
| (e) | Documentation โ product, technology, and vendor docs | 30-day | Jonathan, with Drew consult |
Highest priority. Phase 1 already fires three events to KV via the Worker; the basic workstream wires those into Amplitude and stands up the dashboard. This is the fastest path to a usable view for producers and the foundation everything else builds on.
| Event | Payload | Source |
|---|---|---|
session_start | invite_code, role, device, os, ts | Already firing in Phase 1 |
playback_start | series, episode, user, role, ts | Already firing in Phase 1 |
playback_complete | series, episode, user, role, watch_duration_ms | Already firing in Phase 1 |
Deliverables: Amplitude project stood up; Worker dual-writes the three v1 events to KV (existing) + Amplitude (new); basic dashboard views (sessions per day, episode completion, top series) live and visible to producers by end of W2.
Builds on (a) once basic telemetry is flowing. Adds the events that drive the headline insights โ drop-off curves, continuation funnels, engagement analysis.
| Event | Payload | Notes |
|---|---|---|
| playback_progress | series, episode, position_ms, ts | Sampled every 5โ10s. Drives drop-off curves. |
| playback_pause | series, episode, position_ms | Engagement signal |
| playback_resume | series, episode, position_ms | Pairs with pause |
| playback_seek | series, episode, from_ms, to_ms | Scrub / re-watch |
| episode_advance | from_episode, to_episode, mode (auto / swipe / tap) | Continuation rate โ the headline metric |
| episode_abandon | series, episode, position_ms, exit_reason | User exits without completing or advancing |
| app_background | last_event, position_ms | Best-effort proxy for "they left" |
| app_foreground | ts | Pairs with background |
| session_end | duration_ms, episodes_watched | Cohort engagement |
app_background with no follow-up app_foreground within N minutes as an implicit session end. Document the limitation; do not overstate the data.
Timecode-to-script mapping (stretch). Every progress / pause / abandon event carries position_ms. If episode metadata includes a chapter or scene boundary table โ and eventually word-timed transcripts from the captioning workflow โ the dashboard can resolve any timestamp back to "which scene, which line." Capture the data unconditionally; treat the visualization as a stretch goal pending transcript availability.
Dashboard views (advanced): per-episode drop-off curve, continuation funnel, role-filtered cohort views, app-kill / abandonment view. Live by end of W4.
Working recommendation: Amplitude. Off-the-shelf, supports custom event schemas, native funnel/flow/retention analysis, and cohort filtering by user property. Producers get a real UI without the team building a dashboard from scratch. Free tier likely sufficient at screening-cohort scale. Applies to both basic (a) and advanced (b) telemetry.
Routing โ decision pending. Events can go to Amplitude (a) directly from the iOS / Android client via Amplitude's SDK, or (b) forwarded through the existing Cloudflare Worker. Working assumption: Worker-forwarded, because the Worker is the natural place to enrich events with the role tied to the invite code and dual-write to KV for our own retention.
Out of scope for Phase 2: building a custom dashboard. If Amplitude's stock views aren't sufficient, defer a custom view to Phase 3.
The shipped app already implements role-based content permissions โ internal team members see works-in-progress; network users see only Aaron-approved cuts. That gate is in place. Phase 2 extends the role system in two ways: (1) adds a consumer_beta role for a small consumer test cohort, and (2) wires role into every telemetry event as a user property so analytics can be filtered by audience.
| Role | Source | Status | Treatment in Telemetry |
|---|---|---|---|
internal | Team-issued codes | Already shipped | Filtered out of default reporting |
stakeholder | Peacock exec / partner codes | Already shipped (29 execs + music rights orgs as of 4/21) | Analyzed but flagged |
consumer_beta | New codes for a small consumer test pool | New in Phase 2 | The clean engagement signal |
Owner: Jonathan, with consultation / verification from Drew. Cadence: rolling over the 30-day window, closed out end of W5. Three artifacts:
The goal is durable institutional knowledge so that follow-on work (Phase 3+, vendor renewals, hand-offs) doesn't depend on tribal memory.
Ongoing post-Phase-1 work: bug triage, content-pipeline support, exec-side issue triage, infra monitoring. Engaged on retainer + hourly overflow; not part of the 30-day deliverable schedule. Commercial structure handled outside this spec.
| # | Feature | Behavior |
|---|---|---|
| UI1 | Variable-speed playback (incl. 2ร) | Handled via Settings, not a press-and-hold gesture. See UI3 for surfacing the control on the playback overlay so it isn't buried. |
| UI2 | Press-and-hold to freeze frame | Hold pauses playback on the current frame; release resumes. Use case (Pedro Vital): episodes that surface multiple images on screen at once โ a viewer can hold to study each one without losing their place. The press-and-hold gesture is now reserved for this behavior since speed control moved to Settings (UI1). |
| UI3 | Surface variable-speed control | Already implemented but buried in Settings. Move to playback overlay or make discoverable via tap. |
| UI4 | Scroll-up affordance | Specific behavior TBD โ Jon to confirm from notes. |
| UI5 | Title-safe overlay export for editors | Static asset, not in-app: a Premiere-importable PNG/template showing where app UI chrome sits over the 9:16 frame, so editors don't place on-screen text under app overlays. |
30-day schedule for the four scoped workstreams. (c) maintenance runs in parallel throughout, not pinned to a week.
| Week | Window | Active workstreams | Milestone |
|---|---|---|---|
| W1 (this week) | 04/27 โ 05/01 | (a) scope + research, (e) doc kickoff | Lock telemetry routing decision |
| W2 | 05/04 โ 05/08 | (a) build & ship, (e) ongoing | Basic telemetry โ Amplitude โ internal rollout end of week |
| W3 | 05/11 โ 05/15 | (b) build, (d) UI build, (e) ongoing | UI internal test build |
| W4 | 05/18 โ 05/22 | (b) ship, (d) ship, (e) ongoing | Advanced telemetry + UI โ all users by end of W4 |
| W5 | 05/25 โ 05/29 | (e) close out | Documentation pass complete; Phase 2 wrap-up |
Sequenced for fastest demoable telemetry. Each step gates on the prior.
stakeholder (Peacock execs) or internal (team).session_start, playback_start, playback_complete to Amplitude alongside KV. Stand up basic dashboard views./telemetry endpoint for (b). Accept new event types, attach role from session token.| # | Criterion | How to Verify |
|---|---|---|
| P2-1a | Basic Phase 1 events (session_start, playback_start, playback_complete) arrive in Amplitude within 30s | Amplitude live event view during a test session |
| P2-1b | Advanced Phase 2 events arrive in Amplitude within 30s | Amplitude live event view during a test session |
| P2-2 | Drop-off curve renders for any episode with โฅ10 viewers | Amplitude retention chart |
| P2-3 | All views can be filtered by role | Toggle filter; confirm internal excluded by default |
| P2-4 | Continuation rate computable per episode | Build funnel in Amplitude; validate against raw events |
| P2-5 | Press-and-hold to freeze frame works without conflicting with tap-to-show-controls (release resumes within 100ms) | Manual test on 2+ devices |
| P2-6 | Title-safe template renders correctly in Premiere over a sample 9:16 frame | Editor confirms |
| P2-7 | Consumer-beta codes work end-to-end and tag correctly | Issue code, watch episode, query Amplitude |
| P2-8 | Telemetry instrumentation does not regress 20+ episode binge stability | Repeat the v1 binge test on a Phase 2 build |
| P2-9 | Documentation set (product / tech / vendor) is current as of 05/29 | Doc review with Drew |
The sections below are the original v1 specification authored Mar 17, 2026 and refined through the 03/20 scope review. They are preserved verbatim with section numbers renumbered as 3.1โ3.21. The shipped product is a superset โ see Section 1 for the actual outcome and the deltas added during build.
Editor's note (added 04/30/2026): at the time of writing, the app was unnamed. It later shipped as Bananas ๐. References below to "the MicroMaker Screening App" and the line about a future "consumer-facing app (Bananas)" both refer to what is now Bananas โ the screening tool and the planned consumer product converged under one brand.
The MicroMaker Screening App is a native iPhone app that allows Peacock executives to review MicroMaker vertical cuts in the right viewing context: on a phone, in portrait, with full-screen playback and immediate progression from one episode to the next.
v1 is intentionally narrow. A user enters a personal invite code, opens a private catalog, chooses a series, and watches episodes in sequence. The product is meant for internal screening first, not public release or consumer growth โ but v1 is being built with clear line of sight toward a consumer-facing app (Bananas), so architecture decisions now should not paint us into a corner.
My recommendation is to engage a "Consulting Engineer" to advise on cross-platform architecture, ensure best practices for video playback and app structure, and help build v1 with intentional foundations for the eventual consumer product. I have 2 candidates in mind.
We can use AI coding tools to execute on the code base, with oversight and testing at each phase. Note that cost considerations should include a retainer fee for the Consulting Engineer, AI tokens, and robust video hosting on a service like Cloudflare.
| Date | Milestone | Outcome |
|---|---|---|
| 03/20 | Scope and architecture sign-off | v1 locked, deferred items removed from active build |
| 03/24 | UX flow sign-off | Core screens approved |
| 03/27 | First TestFlight build | End-to-end flow working |
| 04/02 | Internal screening ready | Team can use the app with real cuts |
| 04/17 | Exec-ready delivery (planned) | Polished build ready for Peacock executives |
Peacock executives screening unreleased MicroMaker cuts on iPhone.
Internal Haymaker and MicroMaker stakeholders reviewing the same cuts before exec delivery.
| Area | Included in v1 | Notes |
|---|---|---|
| Access | Yes | Unique invite code, validated server-side |
| Catalog | Yes | Small private catalog of series and episodes |
| Playback | Yes | Full-screen portrait playback with immediate auto-advance |
| Resume | Yes | Saved locally on the same device |
| Captions | Yes | Sidecar VTT support |
| Telemetry | Yes | Play, pause, and drop-off events with timestamps โ stored server-side |
| Admin Interface | Yes | Simple admin for editing series/episode metadata and uploading episodes |
| API Server | Yes | Simple server hosting the API for video playback, metadata, and telemetry โ backed by a relational database |
Out of scope for v1: accounts, search, recommendations, My List, deep links, feedback tools, and downloads.
Open app -> enter invite code -> code is validated -> catalog appears
Catalog -> choose series -> choose episode or resume -> full-screen playback -> next episode starts automatically
Open app -> session still valid -> continue from same series and episode on the same device
Simple entry point with one field, one button, and a clear error state if the code does not work.
Swipe up/down to browse between different series. Each series shows a poster, title, and description. (Deferred until multiple series are available.)
Swipe up/down to move between episodes within a series. Shows series title, description, and series poster. This is the default landing view for v1 (single series).
Video fills the screen. Tap to pause, tap again to resume. Scrub bar shows position in the episode and allows seeking left/right.
| Behavior | v1 Requirement |
|---|---|
| Orientation | Portrait only |
| Episode transitions | Immediate auto-advance, no countdown or interstitial |
| Manual movement | Swipe up/down to switch episodes; scrub bar for seeking within an episode |
| Pause/Resume | Tap to pause, tap again to resume |
| Captions | Supported and available whenever delivered |
| Resume state | Saved locally on-device only |
| Quality bar | Must support stable viewing across 12+ episodes in one sitting |
The following decisions were made in the 03/20 scope review meeting and are reflected throughout this updated spec:
| Topic | Decision |
|---|---|
| Platform | Cross-platform (iOS + Android). Framework TBD โ researching Flutter, React Native, and alternatives. |
| Authentication | Unique invite code per user. User management = creating/revoking codes. |
| Video codec | H.265 (HEVC) preferred. Need to validate CDN compatibility โ H.264 is the fallback. |
| Navigation | Browse View (swipe between series) + Series View (swipe between episodes). v1 launches with Series View only. |
| Playback controls | Tap to pause/resume. Scrub bar for position and seeking. |
| Telemetry | Play, pause, and drop-off events with episode + timestamp โ stored server-side. |
| Backend | Simple API server + relational database for metadata and telemetry. |
| Thumbnails | Series poster only. No episode-level thumbnails. |
| Series metadata | Must include series title and series description (added to spec). |
| Admin | Simple admin interface in v1 for metadata editing and episode uploads. |
| UI components | Research component libraries for chosen framework, ideally with Figma counterparts for mockups. |
| MVP target | ~04/02 โ bare-bones field screening + lightweight CMS for populating content. |
| Top priority | Seamless video playback above all else. Defer anything that blocks fast, reliable playback. |
Content is organized simply: Series -> Episodes. Two navigation views are planned:
Series and episode metadata (titles, descriptions, posters) are stored in a relational database and managed through the admin interface. Video files are stored in Cloudflare R2.
Thumbnails exist at the series level only (a series poster) โ there are no episode-level thumbnails.
Invite Code -> Series View (swipe between episodes) -> Full-Screen Player -> Auto-advance within series
Peacock delivers editorial cuts as high-quality production masters. We convert these to a mobile-optimized format before uploading them to the app.
| Peacock Delivery Spec | What We Convert To | |
|---|---|---|
| File type | MOV | MP4 |
| Video codec | ProRes 422 HQ | H.265 (HEVC) |
| Resolution | 1080 x 1920 (9:16) | 1080 x 1920 (9:16) |
| Video bitrate | 50+ Mbps | 4โ6 Mbps |
| Audio | LPCM, 24-bit, 48kHz | AAC, 128kbps, 48kHz |
| Captions | Sidecar .SCC file | Sidecar .VTT file |
The conversion reduces file size by roughly 90% with no visible quality loss on a phone screen. H.265 (HEVC) is the preferred codec for better compression efficiency at equivalent quality. CDN compatibility with H.265 is still being evaluated โ if delivery issues arise, H.264 remains the fallback. Captions are converted from SCC (a broadcast format) to VTT, so users can toggle captions on and off in the app.
For v1, this conversion is done manually using a simple script before uploading episodes. An automated pipeline is planned for a later phase.
Telemetry events are stored server-side and associated with the user's invite code. The goal is to understand viewing behavior โ especially where users drop off within episodes.
| Event | Data Captured | Purpose |
|---|---|---|
| Session created | Invite code, timestamp | Shows that a valid invite code was used |
| Play | Episode ID, timestamp, playback position | Tracks when a user starts or resumes an episode |
| Pause | Episode ID, timestamp, playback position | Tracks when a user pauses |
| Drop-off | Episode ID, timestamp, playback position | Tracks where a user exits or abandons an episode |
| Episode completed | Episode ID, timestamp | Shows that a viewing run reached the end |
A simple, password-protected admin interface where a producer or team member can manage content in the app without any technical knowledge. This covers two main functions:
The admin interface handles uploading files to storage and updating the relational database automatically. No command line, no code, no developer involvement. Changes appear in the app on the next refresh.
| Date | Phase | Checkpoint |
|---|---|---|
| 03/17 to 04/02 | Phase 1 | Core app: invite code, catalog, playback, autoplay, captions, telemetry |
| 04/03 to 04/17 | Phase 2 (planned) | Polish, bug fixing, device QA, and exec readiness |
| After 04/17 | Phase 3 | Feedback tools and download exploration |
| Later phase | Phase 4 | CMS admin panel and broader content operations |
| Milestone | Date | Deliverable |
|---|---|---|
| Scope lock | 03/18 | Final v1 feature list |
| UX lock | 03/20 | Approved wireframes or mockups |
| First TestFlight build | 03/27 | Working end-to-end beta build |
| Internal ready | 04/02 | Usable build with real episodes |
| Exec-ready release (planned) | 04/17 | Final polished TestFlight build |
| Test Area | Owner |
|---|---|
| Backend testing (invite validation, signed URLs, telemetry endpoints) | Jonathan + Consulting Engineer |
| Binge-viewing QA (12โ20 episode sessions on multiple iPhone models) | Jonathan / Team |
| Network testing (Wi-Fi, LTE, poor connectivity) | Jonathan + Consulting Engineer |
| Security testing (expired URLs rejected, revoked codes blocked) | Jonathan + Consulting Engineer |
| Caption rendering and toggle checks | Jonathan / Team |
| TestFlight install testing with non-team users before exec rollout | Jonathan / Team |
TestFlight (iOS) is Apple's official system for sharing apps privately before they go live on the App Store. Think of it like a private screening link โ but for an app instead of a video.
Here's how it works for iPhone users:
When we push updates or fixes, TestFlight automatically notifies them and the app updates with one tap. No App Store review process, no public listing, no waiting. We control exactly who has access and can revoke it at any time.
Android distribution will follow a similar private-testing model (e.g., Firebase App Distribution or Google Play internal testing). The specifics depend on which cross-platform framework is selected.
For v1, private distribution is the right method because the app is for a small, known group (~10โ30 people), not the general public.
The build ran approximately five weeks from creative kickoff to network rollout. Key inflection points:
SECURITY.pdf earned the confidence of Brandon and Thalia on Peacock tech.The dual-track delivery workflow that emerged: post team exports โ internal QC by Ronica's team โ executive approval by Aaron โ app permission toggle โ invite emails โ FineCut parallel delivery (with notification to the full distribution list).
Peacock_Exec_Rollout_Summary.md โ kept internal, not deployed with this site (contains personal email addresses for ~40 people).
Reorganized April 29, 2026: Section 1 leads with current state, Section 2 holds active Phase 2 scope, Section 3 archives the original Mar 17 v1 spec, Section 4 summarizes the rollout. Original section numbering preserved within Section 3 (renumbered as 3.1โ3.21). ยท Bananas ๐ v1 shipped 04/21/2026.