feat: add marketing video mode and Remotion marketing video project
Add debug-only Marketing Video Mode toggle that enables hands-free screen recording across the app: auto-scrolling Featured Trips carousel, auto-filling trip wizard, smooth trip detail scrolling via CADisplayLink, and trip options auto-sort with scroll. Add Remotion marketing video project with 6 scene compositions using image sequences extracted from screen recordings, varied phone entrance animations, and deduped frames for smooth playback. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,9 @@ struct HomeView: View {
|
||||
@State private var selectedSuggestedTrip: SuggestedTrip?
|
||||
@State private var displayedTips: [PlanningTip] = []
|
||||
@State private var showProPaywall = false
|
||||
#if DEBUG
|
||||
@State private var marketingAutoScroll = false
|
||||
#endif
|
||||
|
||||
var body: some View {
|
||||
TabView(selection: $selectedTab) {
|
||||
@@ -27,6 +30,7 @@ struct HomeView: View {
|
||||
showNewTrip: $showNewTrip,
|
||||
selectedTab: $selectedTab,
|
||||
selectedSuggestedTrip: $selectedSuggestedTrip,
|
||||
marketingAutoScroll: marketingAutoScrollBinding,
|
||||
savedTrips: savedTrips,
|
||||
suggestedTripsGenerator: suggestedTripsGenerator,
|
||||
displayedTips: displayedTips
|
||||
@@ -98,6 +102,13 @@ struct HomeView: View {
|
||||
let oldName = oldTab < tabNames.count ? tabNames[oldTab] : nil
|
||||
AnalyticsManager.shared.track(.tabSwitched(tab: newName, previousTab: oldName))
|
||||
AnalyticsManager.shared.trackScreen(newName)
|
||||
#if DEBUG
|
||||
if newTab == 0 && UserDefaults.standard.bool(forKey: "marketingVideoMode") {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
|
||||
marketingAutoScroll = true
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
.sheet(isPresented: $showNewTrip) {
|
||||
TripWizardView()
|
||||
@@ -131,6 +142,14 @@ struct HomeView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private var marketingAutoScrollBinding: Binding<Bool> {
|
||||
#if DEBUG
|
||||
return $marketingAutoScroll
|
||||
#else
|
||||
return .constant(false)
|
||||
#endif
|
||||
}
|
||||
|
||||
// MARK: - Hero Card
|
||||
|
||||
private var heroCard: some View {
|
||||
|
||||
Reference in New Issue
Block a user