feat: Update Hero for LoRRI hackathon - AI Load Consolidation + Route Optimization focus

#14
Files changed (1) hide show
  1. landing/src/components/Hero.tsx +49 -42
landing/src/components/Hero.tsx CHANGED
@@ -1,33 +1,36 @@
1
  import './Hero.css'
2
 
3
- const codeSnippet = `curl -X POST https://api.fairrelay.io/v1/allocate \\
4
  -H "x-api-key: fr_live_••••••••••••" \\
5
  -H "Content-Type: application/json" \\
6
  -d '{
7
- "drivers": [
8
- { "id": "drv_001", "hours_today": 4.5, "is_ill": false },
9
- { "id": "drv_002", "hours_today": 8.1, "is_ill": false }
 
 
 
 
10
  ],
11
- "routes": [
12
- { "id": "rt_A", "distance_km": 142, "difficulty": "medium" },
13
- { "id": "rt_B", "distance_km": 67, "difficulty": "easy" }
14
  ]
15
  }'`
16
 
17
  const responseSnippet = `{
18
- "success": true,
19
- "data": {
20
- "allocations": [
21
- { "driver": "drv_001", "route": "rt_B" },
22
- { "driver": "drv_002", "route": "rt_A" }
23
- ]
24
- },
25
- "meta": {
26
- "gini_index": 0.12,
27
- "fairness_grade": "A",
28
- "explanation": "drv_002 assigned longer route
29
- despite high hours — override recommended.",
30
- "latency_ms": 284
31
  }
32
  }`
33
 
@@ -43,57 +46,61 @@ export default function Hero() {
43
  <div className="hero__left">
44
  <div className="tag" style={{ animationDelay: '0s' }}>
45
  <span className="tag__dot" />
46
- Now in beta · Join 40+ logistics teams
47
  </div>
48
 
49
  <h1 className="hero__headline">
50
- Route allocation
51
  <br />
52
- that's{' '}
53
- <span className="gradient-text">fair by design</span>
54
  </h1>
55
 
56
  <p className="hero__sub">
57
- India has <strong>15M+ gig delivery workers</strong> — 73% earn below minimum wage because dispatch systems are biased. FairRelay's AI uses the <strong>Gini coefficient</strong> to distribute routes fairly, protect driver wellness, and cut carbon — via a single API call.
 
 
58
  </p>
59
 
60
  <div className="hero__actions">
61
- <a href="#pricing" className="btn btn--primary btn--lg">
62
- Get API Key — it's free
63
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
64
  <path d="M3 8H13M9 4l4 4-4 4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
65
  </svg>
66
  </a>
67
- <a href="#api" className="btn btn--outline btn--lg">
68
- View API docs
69
  </a>
70
  </div>
71
 
72
  <div className="hero__stats">
73
  <div className="hero__stat">
74
- <strong>0.820.12</strong>
75
- <span>Gini reduction</span>
76
  </div>
77
  <div className="hero__stat-divider" />
78
  <div className="hero__stat">
79
- <strong>14.2 kg</strong>
80
- <span>CO₂ saved/run</span>
81
  </div>
82
  <div className="hero__stat-divider" />
83
  <div className="hero__stat">
84
- <strong>100%</strong>
85
- <span>decisions explained</span>
86
  </div>
87
  </div>
88
 
89
- {/* Real Problem Stats */}
90
- <div style={{ marginTop: '2rem', padding: '1rem 1.25rem', background: 'rgba(239,68,68,0.06)', border: '1px solid rgba(239,68,68,0.15)', borderRadius: '12px' }}>
91
- <p style={{ fontSize: '0.75rem', color: '#9CA3AF', marginBottom: '0.5rem', textTransform: 'uppercase', letterSpacing: '0.05em' }}>The problem we solve</p>
92
  <p style={{ fontSize: '0.875rem', color: '#E5E7EB', lineHeight: 1.6 }}>
93
- Traditional dispatch assigns <strong style={{ color: '#f97316' }}>3× more deliveries</strong> to some drivers (Gini = 0.85) while others earn near nothing. FairRelay's 8-agent AI pipeline brings this to <strong style={{ color: '#34d399' }}>Gini = 0.12</strong> with wellness checks, night-safety routing for women, and EV-first allocation.
 
 
94
  </p>
95
  <div style={{ display: 'flex', gap: '1.5rem', marginTop: '0.75rem', flexWrap: 'wrap' }}>
96
- {[['🌍 SDG 8', 'Decent Work'], ['SDG 10', 'Reduced Inequalities'], ['🌿 SDG 13', 'Climate Action']].map(([num, label]) => (
97
  <span key={num} style={{ fontSize: '0.75rem', color: '#9CA3AF' }}><strong style={{ color: '#f97316' }}>{num}</strong> {label}</span>
98
  ))}
99
  </div>
@@ -108,7 +115,7 @@ export default function Hero() {
108
  <span style={{background:'#f59e0b'}} />
109
  <span style={{background:'#10b981'}} />
110
  </div>
111
- <span className="code-window__title">POST /v1/allocate</span>
112
  </div>
113
  <div className="code-window__body">
114
  <pre className="code-block code-block--request">
@@ -121,7 +128,7 @@ export default function Hero() {
121
  <div className="code-window__header">
122
  <div className="hero__status-chip">
123
  <span className="hero__status-dot" />
124
- 200 OK · 284ms
125
  </div>
126
  </div>
127
  <div className="code-window__body">
 
1
  import './Hero.css'
2
 
3
+ const codeSnippet = `curl -X POST https://api.fairrelay.io/v1/consolidate \\
4
  -H "x-api-key: fr_live_••••••••••••" \\
5
  -H "Content-Type: application/json" \\
6
  -d '{
7
+ "shipments": [
8
+ { "id": "sh_001", "pickupLat": 19.07, "pickupLng": 72.87,
9
+ "dropLat": 18.52, "dropLng": 73.85, "weight": 500,
10
+ "volume": 2.0, "timeWindowEnd": "2026-05-14T18:00" },
11
+ { "id": "sh_002", "pickupLat": 19.08, "pickupLng": 72.88,
12
+ "dropLat": 18.53, "dropLng": 73.86, "weight": 300,
13
+ "volume": 1.5, "timeWindowEnd": "2026-05-14T18:00" }
14
  ],
15
+ "trucks": [
16
+ { "id": "trk_1", "maxWeight": 2000, "maxVolume": 8.0 }
 
17
  ]
18
  }'`
19
 
20
  const responseSnippet = `{
21
+ "groups": [
22
+ { "groupId": 1, "truckId": "trk_1",
23
+ "shipments": ["sh_001", "sh_002"],
24
+ "utilizationWeight": 82.5,
25
+ "confidence": 91 }
26
+ ],
27
+ "metrics": {
28
+ "utilizationBefore": 27.1,
29
+ "utilizationAfter": 82.5,
30
+ "tripsReduced": 3,
31
+ "tripReductionPercent": 50,
32
+ "carbonSavedKg": 14.2,
33
+ "optimizationScore": 87
34
  }
35
  }`
36
 
 
46
  <div className="hero__left">
47
  <div className="tag" style={{ animationDelay: '0s' }}>
48
  <span className="tag__dot" />
49
+ LoRRI AI Hackathon 2026 · PS#4 + PS#5
50
  </div>
51
 
52
  <h1 className="hero__headline">
53
+ AI Load Consolidation
54
  <br />
55
+ &{' '}
56
+ <span className="gradient-text">Route Optimization</span>
57
  </h1>
58
 
59
  <p className="hero__sub">
60
+ India's logistics networks transport <strong>60% of shipments with partially filled vehicles</strong>.
61
+ FairRelay's 5-agent AI pipeline intelligently groups shipments, maximizes vehicle utilization,
62
+ and optimizes multi-stop routes — reducing trips, cost, and carbon emissions.
63
  </p>
64
 
65
  <div className="hero__actions">
66
+ <a href="#demo" className="btn btn--primary btn--lg">
67
+ Run Live Demo
68
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
69
  <path d="M3 8H13M9 4l4 4-4 4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/>
70
  </svg>
71
  </a>
72
+ <a href="#how-it-works" className="btn btn--outline btn--lg">
73
+ See 5-Agent Pipeline
74
  </a>
75
  </div>
76
 
77
  <div className="hero__stats">
78
  <div className="hero__stat">
79
+ <strong>27%82%</strong>
80
+ <span>Vehicle utilization</span>
81
  </div>
82
  <div className="hero__stat-divider" />
83
  <div className="hero__stat">
84
+ <strong>50%</strong>
85
+ <span>Trips reduced</span>
86
  </div>
87
  <div className="hero__stat-divider" />
88
  <div className="hero__stat">
89
+ <strong>14.2 kg</strong>
90
+ <span>CO₂ saved/run</span>
91
  </div>
92
  </div>
93
 
94
+ {/* Problem Statement Context */}
95
+ <div style={{ marginTop: '2rem', padding: '1rem 1.25rem', background: 'rgba(59,130,246,0.06)', border: '1px solid rgba(59,130,246,0.15)', borderRadius: '12px' }}>
96
+ <p style={{ fontSize: '0.75rem', color: '#9CA3AF', marginBottom: '0.5rem', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Novelty: Two Problem Statements Combined</p>
97
  <p style={{ fontSize: '0.875rem', color: '#E5E7EB', lineHeight: 1.6 }}>
98
+ <strong style={{ color: '#f97316' }}>PS#5</strong> AI Load Consolidation (primary) + <strong style={{ color: '#3b82f6' }}>PS#4</strong> AI Route Optimization (novelty).
99
+ 5 AI agents orchestrated by <strong style={{ color: '#10b981' }}>LangGraph</strong> with OR-Tools CP-SAT solver,
100
+ K-Means clustering, and Q-learning RL — all integrated into <strong style={{ color: '#06b6d4' }}>LoRRI</strong> production via API.
101
  </p>
102
  <div style={{ display: 'flex', gap: '1.5rem', marginTop: '0.75rem', flexWrap: 'wrap' }}>
103
+ {[['🧠 5 AI Agents', 'LangGraph'], ['OR-Tools', 'CP-SAT Solver'], ['📊 scikit-learn', 'KMeans'], ['🔄 RL Agent', 'Q-Learning']].map(([num, label]) => (
104
  <span key={num} style={{ fontSize: '0.75rem', color: '#9CA3AF' }}><strong style={{ color: '#f97316' }}>{num}</strong> {label}</span>
105
  ))}
106
  </div>
 
115
  <span style={{background:'#f59e0b'}} />
116
  <span style={{background:'#10b981'}} />
117
  </div>
118
+ <span className="code-window__title">POST /v1/consolidate</span>
119
  </div>
120
  <div className="code-window__body">
121
  <pre className="code-block code-block--request">
 
128
  <div className="code-window__header">
129
  <div className="hero__status-chip">
130
  <span className="hero__status-dot" />
131
+ 200 OK · 312ms
132
  </div>
133
  </div>
134
  <div className="code-window__body">