Fix coast-to-coast trips and improve itinerary display

- Fix same-day different-city validation in C2C routes (no more impossible
  games like Detroit 7:30pm AND Milwaukee 8pm on the same day)
- Cap C2C trips at 14 days max with 3 middle stops, prefer shortest routes
- Add sport icon and name to game rows in trip itinerary
- Add horizontal scroll to route dots in suggested trip cards
- Allow swipe-to-dismiss on home sheet (trip planner still blocks)
- Generate travel segments for suggested trips
- Increase DAG route lookahead to 5 days for multi-day drives

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-09 11:42:27 -06:00
parent 7efcea7bd4
commit 3e778473e6
7 changed files with 531 additions and 120 deletions

View File

@@ -206,27 +206,30 @@ struct RoutePreviewStrip: View {
}
var body: some View {
HStack(spacing: 4) {
ForEach(Array(cities.enumerated()), id: \.offset) { index, city in
if index > 0 {
// Connector line
Rectangle()
.fill(Theme.routeGold.opacity(0.5))
.frame(width: 12, height: 2)
}
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 4) {
ForEach(Array(cities.enumerated()), id: \.offset) { index, city in
if index > 0 {
// Connector line
Rectangle()
.fill(Theme.routeGold.opacity(0.5))
.frame(width: 12, height: 2)
}
// City dot with label
VStack(spacing: 4) {
Circle()
.fill(index == 0 || index == cities.count - 1 ? Theme.warmOrange : Theme.routeGold)
.frame(width: 8, height: 8)
// City dot with label
VStack(spacing: 4) {
Circle()
.fill(index == 0 || index == cities.count - 1 ? Theme.warmOrange : Theme.routeGold)
.frame(width: 8, height: 8)
Text(abbreviateCity(city))
.font(.system(size: 10, weight: .medium))
.foregroundStyle(Theme.textSecondary(colorScheme))
.lineLimit(1)
Text(abbreviateCity(city))
.font(.system(size: 10, weight: .medium))
.foregroundStyle(Theme.textSecondary(colorScheme))
.lineLimit(1)
}
}
}
.padding(.horizontal, Theme.Spacing.md)
}
}