Skip to content

feat: ski-holiday persona insert reels - #67

Merged
SteveSimonson merged 3 commits into
mainfrom
feature/persona-ski-reels
Jul 31, 2026
Merged

feat: ski-holiday persona insert reels#67
SteveSimonson merged 3 commits into
mainfrom
feature/persona-ski-reels

Conversation

@SteveSimonson

Copy link
Copy Markdown
Owner

Fixes #66

Summary

  • 6 ski-holiday insert films from persona start photos:
    • Vivienne · Courchevel chalet
    • Camille · St. Moritz night
    • Noor · Aspen lodge fireplace
    • Margot · Gstaad gondola
    • Isla · Zermatt powder
    • Aurelia · Verbier night arrival
  • In product-scroll pool with jet-set + rooms; unique per page; 2–6 gaps
  • Link to /quiz; Ski badge on inserts
  • Rate-limit safe: sequential imagine-video.py (2 RPS on grok-imagine-video) — 6/6 OK, zero 429s
  • Documented rate limit in docs/amazon-insert-video.md

Test plan

  • /reels Ski holiday section plays all 6
  • Shop scroll shows Ski cards → /quiz
  • /watch Ski holiday filter
  • CI green

Six alpine films from house avatars — Courchevel, St. Moritz, Aspen,
Gstaad, Zermatt, Verbier. Sequential Imagine video gen (2 RPS limit).
In insert pool, link to /quiz; Ski filter on /reels and /watch.
@SteveSimonson

Copy link
Copy Markdown
Owner Author

Independent code review — PR #67 (ski-holiday persona insert reels)

Checks

  • npx tsc -b --pretty falseclean (exit 0)
  • CI Lint & buildpass
  • Assets on disk: 6× ski-{vibeId}.mp4 + 6× posters for luxe|muse|sillage|atelier|dew|gilded (all present, ~2.5–3.6 MB each)

Focus areas

1. REELS_SKI in insert pool — OK

CATEGORY_REELS correctly spreads gen1 ∪ gen2 ∪ REELS_JETSETREELS_SKI. Product grids use that pool via interleaveReelInserts (src/lib/reelInserts.ts):

const pool = CATEGORY_REELS.filter(
  (r) => !r.category || r.category !== exclude,
)

Ski reels omit category, so they remain eligible under room excludeCategory (same as jet-set). Unique ids (ski-* vs jetset-*) keep per-page de-dupe correct. href: '/quiz' + hrefLabel: 'Find your persona' match the PR contract.

2. Series: ski vs jetset — OK

  • Explicit series: 'ski' | 'jetset' on each persona reel
  • reelSeries() prefers reel.series, falls back to vibeId → jetset (legacy-safe), else room
  • ReelInsertCard / /reels badges & kickers distinguish Ski / Persona / room without collapsing ski into jetset
  • Analytics: engagement_type: persona_${series} (and _cta) is a clean extension of the prior persona-only path

3. Watch filters — OK

End-to-end wiring is consistent:

  • WatchClip.group adds 'ski'
  • fromReel maps via reelSeries → separate WATCH_SKI_CLIPS
  • Watch.tsx Filter, chip list, useMemo branch, and tile groupLabel all handle ski
  • watchClipCount().ski / skiPool exposed for chips

4. Sequential rate-limit docs — OK (with table nit below)

docs/amazon-insert-video.md adds a clear Rate limits (Imagine video) note: 2 RPS, sequential starts, ≥2–3s between starts. Path table rows for ski video/poster are correct. Matches the PR claim of rate-limit-safe gen.

5. ReelGeneration includes 4 — OK

export type ReelGeneration = 1 | 2 | 3 | 4
export const REEL_LATEST_GENERATION: ReelGeneration = 4
// REELS_SKI → generation: 4

reelsForGeneration(4) isolates ski. reelForCategory still falls back to the last room gen when no room clip has generation 4 (rooms only ship g1/g2) — same pattern as when jet-set was gen 3. No type holes.


Nits (non-blocking)

  1. Docs Technical table still incomplete (docs/amazon-insert-video.md ~L77–84)
    Plain English pool was updated to include REELS_SKI, but Technical still says:

    • Pool = gen1 ∪ gen2 ∪ REELS_JETSET (missing ski)
    • Persona link / Full catalog copy still jet-set-only
      Also L59/L61 still say “persona jet-set” for allow-list and quiz deep-link; ski shares both behaviors.
  2. Comment drift outside this PR’s files
    src/lib/reelInserts.ts header still says “category waves + persona jet-set”. Behavior is already correct via CATEGORY_REELS; comment-only follow-up is fine.

  3. Micro style
    Reels.tsx badge calls reelSeries(reel) twice; local const series = reelSeries(reel) would match ReelInsertCard. Optional.

None of the above affect runtime, types, or insert/filter behavior.


What looks solid

  • Six personas mirrored jet-set structure (destinations/blurbs/paths)
  • Featured Ski section on /reels with jet-set demoted but still present
  • No accidental merge of ski into jetset filter/group
  • CI green + local tsc -b green

VERDICT: APPROVE_WITH_NITS

@SteveSimonson
SteveSimonson merged commit 58bc9d1 into main Jul 31, 2026
1 check passed
@SteveSimonson
SteveSimonson deleted the feature/persona-ski-reels branch July 31, 2026 03:21
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.

Ski-holiday persona insert reels

1 participant