wu981526092 commited on
Commit
504fa06
·
1 Parent(s): 8584287

✨ UPDATE LANDING PAGE: Refactor layout and improve content clarity

Browse files

✅ Changes made to the Landing page:
- Refactored button navigation for consistency and clarity.
- Updated alt text and error handling for images to enhance accessibility.
- Revised section titles and descriptions for better understanding of features.
- Improved overall layout and spacing for a more cohesive user experience.

🛠️ Enhancements contribute to a more polished and user-friendly interface!

frontend/src/pages/Landing.tsx CHANGED
@@ -1,11 +1,9 @@
1
- import { useNavigate } from 'react-router-dom'
2
- import { Button } from '@/components/ui/button'
3
- import {
4
- Menu
5
- } from 'lucide-react'
6
 
7
  export function Landing() {
8
- const navigate = useNavigate()
9
 
10
  return (
11
  <div className="min-h-screen bg-white">
@@ -15,13 +13,13 @@ export function Landing() {
15
  <div className="flex justify-between items-center h-20">
16
  {/* Logo */}
17
  <div className="flex items-center">
18
- <img
19
- src="/assets/logo.png"
20
- alt="EdgeLLM Logo"
21
  className="h-20 w-20"
22
  onError={(e) => {
23
- console.error('Logo failed to load')
24
- e.currentTarget.style.display = 'none'
25
  }}
26
  />
27
  </div>
@@ -31,21 +29,21 @@ export function Landing() {
31
  <span className="text-white bg-purple-600 px-4 py-2 rounded-md font-medium">
32
  Home
33
  </span>
34
- <button
35
- onClick={() => navigate('/technology')}
36
  className="text-gray-700 hover:text-purple-600 font-medium transition-colors"
37
  >
38
  Technology
39
  </button>
40
- <button
41
- onClick={() => navigate('/usecases')}
42
  className="text-gray-700 hover:text-purple-600 font-medium transition-colors"
43
  >
44
  Use Cases
45
  </button>
46
- <Button
47
- variant="outline"
48
- onClick={() => navigate('/mydevice')}
49
  className="border-purple-600 text-purple-600 hover:bg-purple-50"
50
  >
51
  My Device
@@ -83,18 +81,18 @@ export function Landing() {
83
 
84
  {/* CTA Buttons */}
85
  <div className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-12">
86
- <Button
87
  size="lg"
88
  className="bg-purple-600 hover:bg-purple-700 text-white px-8 py-3 text-lg font-medium"
89
- onClick={() => navigate('/usecases')}
90
  >
91
  Learn More
92
  </Button>
93
- <Button
94
  size="lg"
95
  variant="outline"
96
  className="border-purple-600 text-purple-600 hover:bg-purple-50 px-8 py-3 text-lg font-medium"
97
- onClick={() => navigate('/mydevice')}
98
  >
99
  I already have a device
100
  </Button>
@@ -106,25 +104,28 @@ export function Landing() {
106
  <div className="py-12 px-4 sm:px-6 lg:px-8 bg-gray-50">
107
  <div className="max-w-6xl mx-auto">
108
  <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
109
- {/* Always Available */}
110
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
111
  <div className="mb-6">
112
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
113
- <img
114
- src="/assets/24h.png"
115
- alt="24/7 Available"
116
  className="h-10 w-10"
117
  onError={(e) => {
118
- console.error('24h icon failed to load')
119
- e.currentTarget.style.display = 'none'
120
  }}
121
  />
122
  </div>
123
- <h3 className="text-lg font-bold text-black mb-3">Always Available</h3>
 
 
124
  </div>
125
  <p className="text-gray-600 text-sm leading-relaxed">
126
- Cloud AI fails without internet. Our offline AI runs fully on-device,
127
- ready to assist anywhere from airplanes to remote mountains.
 
128
  </p>
129
  </div>
130
 
@@ -132,61 +133,67 @@ export function Landing() {
132
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
133
  <div className="mb-6">
134
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
135
- <img
136
- src="/assets/privacy.png"
137
- alt="Privacy & Security"
138
  className="h-10 w-10"
139
  onError={(e) => {
140
- console.error('Privacy icon failed to load')
141
- e.currentTarget.style.display = 'none'
142
  }}
143
  />
144
  </div>
145
- <h3 className="text-lg font-bold text-black mb-3">Privacy & Security</h3>
 
 
146
  </div>
147
  <p className="text-gray-600 text-sm leading-relaxed">
148
- Cloud AI requires uploading sensitive data. Offline AI keeps all processing local,
149
- protecting personal privacy and enterprise security.
 
150
  </p>
151
  </div>
152
 
153
- {/* Reliability */}
154
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
155
  <div className="mb-6">
156
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
157
- <img
158
- src="/assets/reliablity.png"
159
- alt="Reliability"
160
  className="h-10 w-10"
161
  onError={(e) => {
162
- console.error('Reliability icon failed to load')
163
- e.currentTarget.style.display = 'none'
164
  }}
165
  />
166
  </div>
167
- <h3 className="text-lg font-bold text-black mb-3">Reliability</h3>
 
 
168
  </div>
169
  <p className="text-gray-600 text-sm leading-relaxed">
170
- Cloud latency can cost lives in emergencies. Offline AI responds instantly,
171
- built for survival, healthcare, and safety-critical moments.
 
 
172
  </p>
173
  </div>
174
  </div>
175
  </div>
176
  </div>
177
 
178
-
179
  {/* Footer */}
180
  <footer className="bg-white text-gray-600 py-8 px-4 sm:px-6 lg:px-8 border-t border-gray-200">
181
  <div className="max-w-6xl mx-auto text-center">
182
  <div className="flex items-center justify-center mb-4">
183
- <img
184
- src="/assets/logo.png"
185
- alt="EdgeLLM Logo"
186
  className="h-12 w-12"
187
  onError={(e) => {
188
- console.error('Footer logo failed to load')
189
- e.currentTarget.style.display = 'none'
190
  }}
191
  />
192
  </div>
@@ -194,12 +201,18 @@ export function Landing() {
194
  Need help? Contact us to get customized device and services
195
  </p>
196
  <div className="flex justify-center space-x-6">
197
- <a href="#" className="text-gray-500 hover:text-gray-700">Privacy Policy</a>
198
- <a href="#" className="text-gray-500 hover:text-gray-700">Terms of Service</a>
199
- <a href="#" className="text-gray-500 hover:text-gray-700">Support</a>
 
 
 
 
 
 
200
  </div>
201
  </div>
202
  </footer>
203
  </div>
204
- )
205
  }
 
1
+ import { useNavigate } from "react-router-dom";
2
+ import { Button } from "@/components/ui/button";
3
+ import { Menu } from "lucide-react";
 
 
4
 
5
  export function Landing() {
6
+ const navigate = useNavigate();
7
 
8
  return (
9
  <div className="min-h-screen bg-white">
 
13
  <div className="flex justify-between items-center h-20">
14
  {/* Logo */}
15
  <div className="flex items-center">
16
+ <img
17
+ src="/assets/logo.png"
18
+ alt="EdgeLLM Logo"
19
  className="h-20 w-20"
20
  onError={(e) => {
21
+ console.error("Logo failed to load");
22
+ e.currentTarget.style.display = "none";
23
  }}
24
  />
25
  </div>
 
29
  <span className="text-white bg-purple-600 px-4 py-2 rounded-md font-medium">
30
  Home
31
  </span>
32
+ <button
33
+ onClick={() => navigate("/technology")}
34
  className="text-gray-700 hover:text-purple-600 font-medium transition-colors"
35
  >
36
  Technology
37
  </button>
38
+ <button
39
+ onClick={() => navigate("/usecases")}
40
  className="text-gray-700 hover:text-purple-600 font-medium transition-colors"
41
  >
42
  Use Cases
43
  </button>
44
+ <Button
45
+ variant="outline"
46
+ onClick={() => navigate("/mydevice")}
47
  className="border-purple-600 text-purple-600 hover:bg-purple-50"
48
  >
49
  My Device
 
81
 
82
  {/* CTA Buttons */}
83
  <div className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-12">
84
+ <Button
85
  size="lg"
86
  className="bg-purple-600 hover:bg-purple-700 text-white px-8 py-3 text-lg font-medium"
87
+ onClick={() => navigate("/usecases")}
88
  >
89
  Learn More
90
  </Button>
91
+ <Button
92
  size="lg"
93
  variant="outline"
94
  className="border-purple-600 text-purple-600 hover:bg-purple-50 px-8 py-3 text-lg font-medium"
95
+ onClick={() => navigate("/mydevice")}
96
  >
97
  I already have a device
98
  </Button>
 
104
  <div className="py-12 px-4 sm:px-6 lg:px-8 bg-gray-50">
105
  <div className="max-w-6xl mx-auto">
106
  <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
107
+ {/* Always Available & Reliable */}
108
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
109
  <div className="mb-6">
110
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
111
+ <img
112
+ src="/assets/24h.png"
113
+ alt="Always Available & Reliable"
114
  className="h-10 w-10"
115
  onError={(e) => {
116
+ console.error("24h icon failed to load");
117
+ e.currentTarget.style.display = "none";
118
  }}
119
  />
120
  </div>
121
+ <h3 className="text-lg font-bold text-black mb-3">
122
+ Always Available & Reliable
123
+ </h3>
124
  </div>
125
  <p className="text-gray-600 text-sm leading-relaxed">
126
+ Cloud AI fails without internet and latency can cost lives in
127
+ emergencies. Our offline AI runs instantly on-device, ready
128
+ anywhere — from remote locations to safety-critical moments.
129
  </p>
130
  </div>
131
 
 
133
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
134
  <div className="mb-6">
135
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
136
+ <img
137
+ src="/assets/privacy.png"
138
+ alt="Privacy & Security"
139
  className="h-10 w-10"
140
  onError={(e) => {
141
+ console.error("Privacy icon failed to load");
142
+ e.currentTarget.style.display = "none";
143
  }}
144
  />
145
  </div>
146
+ <h3 className="text-lg font-bold text-black mb-3">
147
+ Privacy & Security
148
+ </h3>
149
  </div>
150
  <p className="text-gray-600 text-sm leading-relaxed">
151
+ Cloud AI requires uploading sensitive data. Offline AI keeps all
152
+ processing local, protecting personal privacy and enterprise
153
+ security.
154
  </p>
155
  </div>
156
 
157
+ {/* Affordable & Powerful */}
158
  <div className="bg-white rounded-2xl p-6 shadow-lg border border-gray-200 text-center">
159
  <div className="mb-6">
160
  <div className="w-16 h-16 bg-purple-600 rounded-full flex items-center justify-center mx-auto mb-4">
161
+ <img
162
+ src="/assets/reliablity.png"
163
+ alt="Affordable & Powerful"
164
  className="h-10 w-10"
165
  onError={(e) => {
166
+ console.error("Affordable icon failed to load");
167
+ e.currentTarget.style.display = "none";
168
  }}
169
  />
170
  </div>
171
+ <h3 className="text-lg font-bold text-black mb-3">
172
+ Affordable & Powerful
173
+ </h3>
174
  </div>
175
  <p className="text-gray-600 text-sm leading-relaxed">
176
+ Cloud AI charges expensive per-token fees that scale with usage.
177
+ Offline AI delivers enterprise-grade intelligence with unlimited
178
+ conversations, providing premium performance without recurring
179
+ costs.
180
  </p>
181
  </div>
182
  </div>
183
  </div>
184
  </div>
185
 
 
186
  {/* Footer */}
187
  <footer className="bg-white text-gray-600 py-8 px-4 sm:px-6 lg:px-8 border-t border-gray-200">
188
  <div className="max-w-6xl mx-auto text-center">
189
  <div className="flex items-center justify-center mb-4">
190
+ <img
191
+ src="/assets/logo.png"
192
+ alt="EdgeLLM Logo"
193
  className="h-12 w-12"
194
  onError={(e) => {
195
+ console.error("Footer logo failed to load");
196
+ e.currentTarget.style.display = "none";
197
  }}
198
  />
199
  </div>
 
201
  Need help? Contact us to get customized device and services
202
  </p>
203
  <div className="flex justify-center space-x-6">
204
+ <a href="#" className="text-gray-500 hover:text-gray-700">
205
+ Privacy Policy
206
+ </a>
207
+ <a href="#" className="text-gray-500 hover:text-gray-700">
208
+ Terms of Service
209
+ </a>
210
+ <a href="#" className="text-gray-500 hover:text-gray-700">
211
+ Support
212
+ </a>
213
  </div>
214
  </div>
215
  </footer>
216
  </div>
217
+ );
218
  }
static/assets/index-95452486.js ADDED
The diff for this file is too large to render. See raw diff
 
static/assets/index-95452486.js.map ADDED
The diff for this file is too large to render. See raw diff
 
static/index.html CHANGED
@@ -5,7 +5,7 @@
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Edge LLM</title>
8
- <script type="module" crossorigin src="/assets/index-b546fb4a.js"></script>
9
  <link rel="stylesheet" href="/assets/index-be9ccaff.css">
10
  </head>
11
  <body>
 
5
  <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Edge LLM</title>
8
+ <script type="module" crossorigin src="/assets/index-95452486.js"></script>
9
  <link rel="stylesheet" href="/assets/index-be9ccaff.css">
10
  </head>
11
  <body>