edgellm / frontend /src /pages /Technology.tsx
wu981526092's picture
� NEW FEATURE: Add Use Cases page with complete navigation
0a6a843
raw
history blame
16.1 kB
import { useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { Button } from '@/components/ui/button'
import { Badge } from '@/components/ui/badge'
import { Card, CardContent } from '@/components/ui/card'
import { Menu } from 'lucide-react'
export function Technology() {
const [activeTab, setActiveTab] = useState('Hardware')
const navigate = useNavigate()
return (
<div className="min-h-screen bg-gray-50">
{/* Navigation */}
<nav className="bg-white border-b border-gray-200">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center h-20">
{/* Logo */}
<div className="flex items-center">
<img
src="/assets/logo.png"
alt="EdgeLLM Logo"
className="h-16 w-16"
onError={(e) => {
console.error('Logo failed to load')
e.currentTarget.style.display = 'none'
}}
/>
</div>
{/* Navigation Links */}
<div className="hidden md:flex items-center space-x-8">
<button onClick={() => navigate('/')} className="text-gray-700 hover:text-purple-600 font-medium">
Home
</button>
<span className="text-white bg-purple-600 px-4 py-2 rounded-md font-medium">
Technology
</span>
<button
onClick={() => navigate('/usecases')}
className="text-gray-700 hover:text-purple-600 font-medium transition-colors"
>
Use Cases
</button>
<Button
variant="outline"
onClick={() => navigate('/playground')}
className="border-purple-600 text-purple-600 hover:bg-purple-50"
>
My device
</Button>
</div>
{/* Mobile menu button */}
<div className="md:hidden">
<Button variant="ghost" size="sm">
<Menu className="h-5 w-5" />
</Button>
</div>
</div>
</div>
</nav>
{/* Header Section */}
<div className="py-24 px-4 sm:px-6 lg:px-8">
<div className="max-w-4xl mx-auto text-center">
{/* Title */}
<h1 className="text-4xl md:text-5xl font-bold text-black mb-6">
Our Technology
</h1>
<p className="text-xl text-purple-700 font-semibold max-w-2xl mx-auto mb-8">
Low-cost FPGA-based design, optimized for Large Language Models on-device.
</p>
{/* Tabs */}
<div className="flex justify-center mb-12">
<div className="bg-white rounded-lg p-1 shadow-sm">
{['Hardware', 'Software'].map((tab) => (
<button
key={tab}
onClick={() => setActiveTab(tab)}
className={`px-6 py-2 rounded-md text-sm font-medium transition-all ${
activeTab === tab
? 'bg-purple-600 text-white'
: 'text-gray-700 hover:text-purple-600'
}`}
>
{tab}
</button>
))}
</div>
</div>
</div>
</div>
{/* Tab Content */}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mb-16">
{activeTab === 'Hardware' && (
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-start">
{/* Hardware Text Content */}
<div>
<h2 className="text-3xl font-semibold text-purple-600 mb-6">
Hardware Description
</h2>
<p className="text-lg text-gray-800 leading-relaxed">
Huoxu is an ultra–low-budget single-board computer designed specifically for large language model (LLM) deployment.
Despite its compact form factor and low power consumption, we provide:
</p>
<ul className="mt-6 space-y-3 text-lg text-gray-800">
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
Accelerated inference performance — delivering up to 15 tokens per second on a 30B model, thanks to its optimized FPGA-based AI engine.
</li>
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
High memory capacity — up to 40GB RAM, enabling hosting of LLMs up to ≥30B parameters.
</li>
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
Cost efficiency — making advanced AI workloads accessible at low cost.
</li>
</ul>
</div>
{/* Hardware Specifications Card */}
<Card className="bg-gradient-to-br from-purple-50 to-blue-50 border-0 shadow-lg">
<CardContent className="p-8 space-y-6">
<div className="flex flex-col space-y-4">
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Chip</span>
<span className="text-base text-gray-700">AMD Zynq UltraScale+ XCZU3EG</span>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Processor</span>
<div className="text-base text-gray-700 text-right">
<div>Quad-core 64-bit Arm Cortex-A53 CPU</div>
<div>Dual-core 64-bit Arm Cortex-R5 CPU</div>
<div>ARM Mali-400 GPU</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">FPGA Fabric</span>
<span className="text-base text-gray-700">70K LUT, 360 DSP slices</span>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Memory</span>
<div className="text-base text-gray-700 text-right">
<div>8 GB 64-bit DDR4 (2400 Mbps) on CPU side</div>
<div>8 GB / 16 GB / 32 GB DDR4 (2133 Mbps) on FPGA side (SODIMM)</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Storage</span>
<div className="text-base text-gray-700 text-right">
<div>256 GB PCIe 2.0 x1 NVMe SSD</div>
<div>MicroSD card slot</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">I/O</span>
<div className="text-base text-gray-700 text-right">
<div>USB 2.0 / 3.0 via Type-C</div>
<div>Mini DisplayPort</div>
</div>
</div>
</div>
</CardContent>
</Card>
</div>
)}
{activeTab === 'Software' && (
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-start">
{/* Software Text Content */}
<div>
<h2 className="text-3xl font-semibold text-purple-600 mb-6">
Software Stack
</h2>
<p className="text-lg text-gray-800 leading-relaxed">
Our comprehensive software ecosystem is designed to maximize the potential of Huoxu hardware,
providing seamless LLM deployment and management capabilities:
</p>
<ul className="mt-6 space-y-3 text-lg text-gray-800">
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
Custom FPGA-optimized inference engine with quantization support for efficient model deployment.
</li>
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
Edge LLM Platform — intuitive web interface for model management, chat, and system monitoring.
</li>
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
Support for popular model formats (GGUF, ONNX) and frameworks (Transformers, LLaMA.cpp).
</li>
<li className="flex items-start">
<span className="text-purple-600 mr-2">•</span>
REST API for seamless integration with existing applications and services.
</li>
</ul>
</div>
{/* Software Features Card */}
<Card className="bg-gradient-to-br from-green-50 to-blue-50 border-0 shadow-lg">
<CardContent className="p-8 space-y-6">
<div className="flex flex-col space-y-4">
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">OS Support</span>
<div className="text-base text-gray-700 text-right">
<div>Ubuntu 22.04 LTS</div>
<div>Custom Linux Distribution</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Model Formats</span>
<div className="text-base text-gray-700 text-right">
<div>GGUF (LLaMA.cpp)</div>
<div>ONNX</div>
<div>PyTorch</div>
<div>Transformers</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Inference Engine</span>
<div className="text-base text-gray-700 text-right">
<div>Custom FPGA Accelerator</div>
<div>LLaMA.cpp Integration</div>
<div>Quantization Support</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Management Interface</span>
<div className="text-base text-gray-700 text-right">
<div>Web-based Dashboard</div>
<div>REST API</div>
<div>CLI Tools</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Development Tools</span>
<div className="text-base text-gray-700 text-right">
<div>Python SDK</div>
<div>Model Optimization Tools</div>
<div>Performance Profiler</div>
</div>
</div>
<div className="flex justify-between items-start">
<span className="text-lg font-bold text-gray-900">Security</span>
<div className="text-base text-gray-700 text-right">
<div>Secure Boot</div>
<div>Model Encryption</div>
<div>Access Control</div>
</div>
</div>
</div>
</CardContent>
</Card>
</div>
)}
</div>
{/* Why us? Comparison Section */}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mb-16">
<h2 className="text-3xl font-semibold text-purple-600 mb-8">Why us?</h2>
{/* Comparison Table */}
<div className="bg-white rounded-3xl shadow-xl overflow-hidden">
{/* Table Header */}
<div className="grid grid-cols-4 bg-gradient-to-r from-gray-50 to-gray-100">
<div className="p-6"></div>
<div className="p-6 text-center">
<Badge className="bg-purple-600 text-white font-bold px-4 py-2">Ours</Badge>
</div>
<div className="p-6 text-center">
<span className="font-bold text-gray-800">Raspberry Pi 5</span>
</div>
<div className="p-6 text-center">
<span className="font-bold text-gray-800">Jetson Orin Nano</span>
</div>
</div>
{/* Table Rows */}
{[
{ label: 'Price', ours: '$199', pi: '$120', jetson: '$249' },
{ label: 'RAM', ours: '24GB/40GB', pi: '16GB', jetson: '8GB' },
{ label: 'CPU', ours: 'Cortex-A53', pi: 'Cortex-A72', jetson: 'Cortex-A78' },
{ label: 'AI Engine', ours: 'Optimized Accelerator on FPGA', pi: 'Neon SIMD Instructions', jetson: 'Cuda/Tensor Core' },
{ label: 'Power', ours: '<10W', pi: '5-12 W', jetson: '7-25' },
{ label: 'LLM decode Performance', ours: '15 tokens/s', pi: '<5 tokens/s', jetson: '15 tokens/s' },
].map((row, index) => (
<div key={row.label} className={`grid grid-cols-4 ${index % 2 === 0 ? 'bg-gray-50' : 'bg-white'}`}>
<div className="p-4 font-medium text-gray-900 border-r border-gray-200">
{row.label}
</div>
<div className="p-4 text-center text-white bg-purple-600 font-medium">
{row.ours}
</div>
<div className="p-4 text-center text-purple-600 font-medium border-r border-gray-200">
{row.pi}
</div>
<div className="p-4 text-center text-purple-600 font-medium">
{row.jetson}
</div>
</div>
))}
</div>
<div className="text-center mt-8">
<Button className="bg-purple-600 hover:bg-purple-700 text-white px-8 py-3">
View our vision
</Button>
</div>
</div>
{/* Device Layout Section */}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 mb-16">
<h2 className="text-3xl font-semibold text-purple-600 mb-8">The device layout plan</h2>
<div className="bg-white rounded-2xl shadow-xl p-8 text-center">
<div className="relative max-w-4xl mx-auto">
<img
src="/assets/chips.png"
alt="Device Layout Plan"
className="w-full h-auto rounded-lg shadow-lg"
onError={(e) => {
console.error('Chips image failed to load')
e.currentTarget.style.display = 'none'
}}
/>
</div>
<div className="flex justify-center space-x-4 mt-8">
<Button className="bg-purple-600 hover:bg-purple-700 text-white px-6 py-2">
Get your device
</Button>
<Button variant="outline" className="border-purple-600 text-purple-600 hover:bg-purple-50 px-6 py-2">
View use cases
</Button>
</div>
</div>
<p className="text-center text-gray-600 mt-6">
Need help? Contact us to get customized device and services
</p>
</div>
</div>
)
}