feat: fix travel placement bug, add theme-based alternate icons, fix animated background crash

- Fix repeat-city travel placement: use stop indices instead of global city name
  matching so Follow Team trips with repeat cities show travel correctly
- Add TravelPlacement helper and regression tests (7 tests)
- Add alternate app icons for each theme, auto-switch on theme change
- Fix index-out-of-range crash in AnimatedSportsBackground (19 configs, was iterating 20)
- Add marketing video configs, engine, and new video components
- Add docs and data exports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-02-06 09:36:34 -06:00
parent fdcecafaa3
commit 8e937a5646
77 changed files with 143400 additions and 83 deletions

66
docs/reelRollOut.md Normal file
View File

@@ -0,0 +1,66 @@
# SportsTime Reels Rollout (14 Days)
Timezone: **US Eastern (ET)**
Start date: **Monday, February 9, 2026**
End date: **Sunday, February 22, 2026**
## Hashtag Sets
Use one set per post (rotate to avoid repetitive footprint).
- **Set A (General Sports Travel)**
- `#SportsTime #SportsRoadTrip #GameDay #RoadTrip #SportsFans #TravelTok #iPhoneApps #WeekendTrip`
- **Set B (Follow Team / Away Games)**
- `#SportsTime #AwayGame #FollowYourTeam #NBATok #NFLTok #MLBTok #NHLTok #SoccerTok`
- **Set C (Group Planning / Polls)**
- `#SportsTime #GroupTrip #TripPlanning #FriendGroup #SportsTrip #RoadTripIdeas #SportsTok #BucketList`
- **Set D (Stadium Tracker / Completionist)**
- `#SportsTime #StadiumTracker #StadiumChallenge #SportsBucketList #FanLife #BucketList #TravelGoals #USRoadTrip`
- **Set E (Lifestyle / Vlog)**
- `#SportsTime #WeekendVibes #RoadTripVlog #SportsTravel #CoupleTravel #FriendTrips #TravelReels #SportsReels`
## 14-Day Posting Calendar (Exact Publish Times)
| Date | Day | Time (ET) | Video ID | Title | Caption | Hashtag Set | Hook A | Hook B |
|---|---|---|---|---|---|---|---|---|
| 2026-02-09 | Mon | 12:20 PM | V01 | 3-in-4 Challenge | `3 games, 4 days, one car. No spreadsheet. Want one for your city?` | Set A | `I planned a 3-stadium weekend in 14 seconds.` | `This sports road trip looked impossible until I did this.` |
| 2026-02-09 | Mon | 8:40 PM | V02 | Fan Test | `Hot take: if youve never done an away-game road trip, youre missing out.` | Set B | `If youve never done an away-game road trip… are you even a fan?` | `Real fans do at least one away-game run a season.` |
| 2026-02-10 | Tue | 12:20 PM | V03 | "We Should Do This" | `Every group chat says "we should do a trip." Nobody plans it.` | Set C | `Group chat said “we should do this.” No one planned it.` | `Your group chat has ideas. This is how it actually happens.` |
| 2026-02-10 | Tue | 8:40 PM | V04 | Stadium Count Flex | `My friend said hes a diehard fan. I asked for his stadium count.` | Set D | `My friend: 4 stadiums. Me: 27.` | `If you dont track your stadiums, does it even count?` |
| 2026-02-11 | Wed | 12:20 PM | V06 | Date Range Tutorial | `How to build a sports trip in 3 taps.` | Set A | `How to plan a sports road trip in 3 taps.` | `Takes me less than 20 seconds to build a route now.` |
| 2026-02-11 | Wed | 8:40 PM | V07 | Follow Team Mode | `If youre obsessed with one team, this mode is unfair.` | Set B | `Want to follow your team on the road? Do this.` | `Pick your team, and it maps a real road stretch.` |
| 2026-02-12 | Thu | 12:20 PM | V08 | Route-First Planning | `Already driving? Add games on the way without blowing up the trip.` | Set A | `Driving Dallas to Atlanta? Add games on the way.` | `You can turn any long drive into a game-day run.` |
| 2026-02-12 | Thu | 8:40 PM | V09 | Must-See Games First | `I pick the matchups first. The route can figure itself out.` | Set B | `Pick the games first. Let the route figure itself out.` | `Stop planning around highways. Plan around games.` |
| 2026-02-13 | Fri | 12:20 PM | V16 | The 4 Trip Friends | `Tag your group roles right now 😂` | Set C | `Every sports trip has these 4 people.` | `One of your friends is 100% this person.` |
| 2026-02-13 | Fri | 8:40 PM | V19 | Casual Fan Take | `Hot take Friday: home-games-only fans are missing half the fun.` | Set B | `Hot take: home-games-only fans are missing half the fun.` | `Away-game runs are peak fan experience. Debate me.` |
| 2026-02-14 | Sat | 10:30 AM | V11 | 48-Hour Sports Trip | `Perfect weekend blueprint: 2 stadiums, one route, zero chaos.` | Set E | `This is what a perfect sports weekend looks like.` | `48 hours. 2 stadiums. Best weekend in months.` |
| 2026-02-14 | Sat | 7:30 PM | V12 | Date Night, But 300 Miles | `Our date nights are weird and elite.` | Set E | `Our date night is 2 games in 2 cities.` | `Couples therapy: road trip + live sports.` |
| 2026-02-15 | Sun | 11:00 AM | V13 | Squad Road Run | `4 friends, 1 car, and finally no planning meltdown.` | Set E | `4 friends, 1 car, 3 games, no planning pain.` | `What happens when your friend group actually commits.` |
| 2026-02-16 | Mon | 8:40 PM | V05 | Local Instant Trip | `Drop your city and Ill reply with a weekend game run.` | Set A | `From Chicago this weekend? You can hit these 2 games.` | `Your city has a hidden 2-game weekend route.` |
| 2026-02-17 | Tue | 8:40 PM | V10 | Polls / Group Voting | `This feature ended our 200-message argument instantly.` | Set C | `Your group can vote instead of arguing for days.` | `Group trip deadlocks are solved with one poll.` |
| 2026-02-18 | Wed | 8:40 PM | V14 | Road to All Stadiums | `Completionist fans: whats your count right now?` | Set D | `Trying to hit every stadium before 35.` | `This app turned my fandom into a mission.` |
| 2026-02-19 | Thu | 8:40 PM | V17 | Spreadsheet vs SportsTime | `My old planning method was literally 9 tabs and pain.` | Set A | `How we used to plan trips 🤡` | `Before: spreadsheets. After: one app.` |
| 2026-02-20 | Fri | 8:40 PM | V15 | Sunday Ritual (posted Friday teaser) | `Steal this weekend planning ritual before Sunday.` | Set E | `Bored Sunday? Plan your next sports weekend in 2 minutes.` | `My Sunday reset now includes locking one sports trip.` |
| 2026-02-21 | Sat | 11:00 AM | V18 | "Im Down" Friend Test | `Send this to the flaky "Im down" friend.` | Set C | `“Im down” friend when its time to pick dates…` | `If theyre really down, make them vote.` |
| 2026-02-22 | Sun | 7:30 PM | V20 | Completionist Debate | `Controversial take: no tracker = no bucket list proof.` | Set D | `You cant call it a stadium bucket list if you dont track it.` | `No scoreboard, no flex. Whats your count?` |
## Posting Ops Checklist (Per Post)
- [ ] Publish at listed ET time.
- [ ] Pin a first comment with CTA: `Search SportsTime on App Store`.
- [ ] Reply to first 10 comments within 20 minutes.
- [ ] If city is mentioned in comments, reply with `Ill build your route next.`
- [ ] Save best viewer phrases for next hook variants.
## Hook A/B Testing Rule
- First 30 minutes weak retention (<35% at 3s): re-upload next day with Hook B.
- If Hook A drives comments but weak CTR, keep hook and change caption + first comment CTA.
- Dont change both hook and caption on same retry.
## Caption Formula (Reusable)
- `Pain/identity line` + `proof line` + `comment bait`.
- Example: `Every group chat says “we should do this.” I built 3 real options in one app. Drop your city and Ill do one.`