Skip to content

feat: persona jet-set insert reels + random 2–6 scroll gaps - #65

Merged
SteveSimonson merged 1 commit into
mainfrom
feature/persona-jetset-reels
Jul 31, 2026
Merged

feat: persona jet-set insert reels + random 2–6 scroll gaps#65
SteveSimonson merged 1 commit into
mainfrom
feature/persona-jetset-reels

Conversation

@SteveSimonson

Copy link
Copy Markdown
Owner

Fixes #64

Summary

  • 6 jet-set insert films from house persona avatars (Vivienne private jet Alps, Camille Dubai helipad, Noor Capri yacht, Margot Milan tarmac, Isla Maldives seaplane, Aurelia Monaco harbor)
  • Registered in REELS_JETSET / full insert pool
  • Links to /quiz (vibe check) with “Find your persona” CTA
  • Insert protocol: unique reel ids per page; random 2–6 product gaps; day-stable seed
  • Surfaces: Shop, Home, PDP similar; /reels + /watch Jet set section

Risk

Low-medium: larger static assets (~21MB video). Placement algorithm change may show more inserts than before on long shop lists.

Test plan

  • Shop grid: inserts at irregular 2–6 gaps; no duplicate video on page
  • Jet-set card → /quiz
  • Category card still → shop room
  • /reels jet set section plays all 6
  • /watch Jet set filter
  • tsc / CI green

Generate six extravagant jet-set films from house persona avatars
(private jet, Dubai helipad, Capri yacht, Milan tarmac, Maldives,
Monaco). Inserts join the product-scroll pool, never repeat on one
page, land every 2–6 products, and link to the vibe check (/quiz).
@SteveSimonson

Copy link
Copy Markdown
Owner Author

Independent code review — PR #65

Reviewed full gh pr diff 65, focused sources (reelInserts.ts, reels.ts, ReelInsertCard.tsx, call sites), and ran npx tsc --noEmit (exit 0).

Checklist

Focus Result
No duplicate reel ids on one page Pass — shuffle pool, seen by id, place uniqueReels[reelIdx] without wrap/modulo
Random gaps 2–6 Pass — randInt(rand, minGap, maxGap) with defaults 2–6; lead-in + successive placement; slot = after N products
Persona reels ignore excludeCategory Pass — !r.category || r.category !== exclude keeps jet-set in pool
REELS_JETSET/quiz via reelHref Pass — each jet-set sets href: '/quiz'; reelHref falls back to /quiz when no category
ReelInsertCard persona vs category CTAs Pass — persona: badge “Persona”, kicker, “Which woman are you today?”, CTA “Find your persona”; category: “Discover” / shop CTAs; analytics persona_jetset vs cross_promo
Optional category on CategoryReel Pass — typed optional; filter/href/CTA/analytics all guard; tsc clean
npx tsc --noEmit Pass (exit 0)

Insert algorithm (src/lib/reelInserts.ts)

  • Pool = full CATEGORY_REELS (gen1 ∪ gen2 ∪ jet-set).
  • Uniqueness enforced after shuffle; no reels[i % n] reuse.
  • Density: maxByDensity = floor(n / avgGap) with avgGap = (minGap+maxGap)/2, then min(unique, density, maxInserts).
  • Day-stable seed retained (listName|exclude|UTC day|product ids).
  • Legacy every still maps to fixed min=max gap.

Standalone simulation (40 products, exclude handbags, maxInserts 10, multiple seeds): always unique ids, all gaps ∈ [2,6], 0 handbags reels, jet-set still eligible.

Data & surfaces

  • Six jet-set entries match vibe ids (luxegilded); assets ~20MB video total under public/brand/videos/reels/.
  • /reels Jet set section + room sections; /watch jetset filter; Shop/Home/PDP pass minGap/maxGap.
  • Docs in docs/amazon-insert-video.md match behavior.

Nits (non-blocking)

  1. REEL_LATEST_GENERATION = 3 — gen 3 is persona-only. reelForCategory() looks for gen 3 category clips, finds none, falls back to last list item (gen 2). Correct today; slightly misleading for future category waves. Prefer keeping latest category gen separate, or document that gen 3 is jet-set only.
  2. Stacking guard (slots[last] === pospos+1) is effectively dead while minGap >= 2. Harmless; could drop or comment.
  3. No unit tests for interleaveReelInserts (uniqueness / gap bounds / exclude + persona). Worth a small pure test given density/cap changes.
  4. Repo weight — ~20MB binary MP4s (called out in PR risk). Fine if intentional; R2/mint later would help clone/CI size.
  5. Home densitymaxInserts up to 4 (was 1–2) with 2–6 gaps is intentional but denser; watch short home rows so they don’t feel video-heavy.

Verdict rationale

All stated product requirements are implemented correctly, type-safe, and tsc-green. No functional blockers found. Nits above are polish / future-proofing only.

VERDICT: APPROVE_WITH_NITS

@SteveSimonson
SteveSimonson merged commit 6de40ab into main Jul 31, 2026
1 check passed
@SteveSimonson
SteveSimonson deleted the feature/persona-jetset-reels branch July 31, 2026 03:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Persona jet-set insert reels + non-repeating 2–6 scroll gaps

1 participant