Primary User
Peacock executives screening unreleased MicroMaker cuts on iPhone.
A simple, solid iPhone app for Executives to screen vertical episodes the way they are meant to be watched.
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 | 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 | 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 | 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.
Prepared as a simple presentation version of the v1 product spec for non-technical review.