feat: add AccessoriesShowcase component and accessories data
- Implemented the AccessoriesShowcase component for displaying various robotic accessories with filtering options. - Created a new data file for accessories, including types, groups, and detailed information for each accessory. - Introduced FilterChip and AccessoryCard components for better UI representation of accessories.
96
public/industries/ASSET-SOURCES.md
Normal file
@ -0,0 +1,96 @@
|
||||
# Industries — Asset Sources & Usage
|
||||
|
||||
This file tracks the provenance and usage status of every image used in the `/industries/` directory.
|
||||
|
||||
## Usage status legend
|
||||
|
||||
| Status | Meaning |
|
||||
| --- | --- |
|
||||
| `approved` | Asset has explicit approval for distributor/partner marketing use |
|
||||
| `public-promotional` | Public promotional asset from brand site, referenced as distributor/partner |
|
||||
| `needs-approval` | Used pending formal confirmation from the brand |
|
||||
| `placeholder` | Temporary visual; replace before public launch |
|
||||
| `internal` | YS Lootah-owned visual (shoot, render, or licensed asset) |
|
||||
|
||||
> **Rule:** Always store assets locally inside this repository. Do **not** hotlink to a brand's CDN in production.
|
||||
|
||||
---
|
||||
|
||||
## Unitree (`/industries/unitree/`)
|
||||
|
||||
Reference page: https://www.unitree.com/industry/electricity
|
||||
|
||||
| Local file | Source URL | Purpose | Status |
|
||||
| --- | --- | --- | --- |
|
||||
| `unitree/terrain.jpg` | unitree.com/images/1155fcb4d7204146af8de1154c8160d4_2880x1470.jpg | Quadruped on complex terrain (security gallery + hero) | needs-approval |
|
||||
| `unitree/thermal.jpg` | unitree.com/images/f1759ae434c54f40965188fe44b919e1_2884x1469.jpg | Thermography + LiDAR detection (security/malls gallery) | needs-approval |
|
||||
| `unitree/endurance.jpg` | unitree.com/images/63d3e469087142c3b890b7e3397fc907_2886x1470.jpg | Extended patrol endurance (security gallery) | needs-approval |
|
||||
| `unitree/substation.jpg` | unitree.com/images/6377486efe1c4b0885825f97abe3524e_702x1060.jpg | Substation inspection (security gallery) | needs-approval |
|
||||
| `unitree/pipeline.jpg` | unitree.com/images/007d98363d09414082b73b52cc24f12d_702x1060.jpg | Pipeline patrol (security gallery) | needs-approval |
|
||||
| `unitree/mine.jpg` | unitree.com/images/c749cad89f7a4a449ea4118c0a1d609c_702x1060.jpg | Mine/tunnel inspection (security gallery) | needs-approval |
|
||||
| `unitree/patrol-system.png` | unitree.com/images/06a6612a9c2047b4a908a40782485e6a_2764x1410.png | Intelligent patrol system overview (warehouses gallery + hero) | needs-approval |
|
||||
| `unitree/digital-twin.jpg` | unitree.com/images/e1e9affa29c04dda932228098397d32f_2716x1226.jpg | Digital twin platform (warehouses gallery) | needs-approval |
|
||||
| `unitree/ai-patrol.jpg` | unitree.com/images/9ae8ba1d8cb74a00af01dba0e8b3b124_2716x1226.jpg | Self-planned AI patrols (warehouses gallery) | needs-approval |
|
||||
| `unitree/analytics.jpg` | unitree.com/images/a9f775f5468b4b85ba37f1e1ec4ed1ae_2716x1226.jpg | Large-scale inference analytics (warehouses gallery) | needs-approval |
|
||||
| `unitree/modular.jpg` | unitree.com/images/a107e9efc41c4c9fafec76b507e995a4_940x570.jpg | Modular sensor and payload (warehouses + education gallery) | needs-approval |
|
||||
| `unitree/cloud.jpg` | unitree.com/images/87850395f5274ce4ae47f236e896a994_940x570.jpg | Cloud fleet management (warehouses gallery) | needs-approval |
|
||||
|
||||
## Pudu (`/industries/pudu/`)
|
||||
|
||||
Reference page: https://www.pudurobotics.com/en/case-studies
|
||||
|
||||
Source images: product/press renders distributed via Pudu official channels and used here in the YS Lootah Robotics distributor/partner context.
|
||||
|
||||
| Local file | Source | Purpose | Status |
|
||||
| --- | --- | --- | --- |
|
||||
| `pudu/bellabot.png` | Pudu product render (BellaBot) | restaurants gallery, hospitality gallery | public-promotional |
|
||||
| `pudu/bellabot-pro.png` | Pudu product render (BellaBot Pro) | restaurants gallery | public-promotional |
|
||||
| `pudu/kettybot.png` | Pudu product render (KettyBot Pro) | restaurants, malls, healthcare, hospitality, hotels gallery | public-promotional |
|
||||
| `pudu/kettybot-black.webp` | Pudu product render (KettyBot, black finish) | restaurants gallery | public-promotional |
|
||||
| `pudu/holabot.png` | Pudu product render (HolaBot / FlashBot delivery family) | hotels, healthcare gallery | public-promotional |
|
||||
| `pudu/cc1.png` | Pudu product render (PUDU CC1) | hotels, malls, healthcare, hospitality gallery | public-promotional |
|
||||
| `pudu/d9-disinfect.png` | Pudu product render (PUDU D9) | healthcare gallery | public-promotional |
|
||||
| `pudu/pudubot2.png` | Pudu product render (PuduBot 2) | hotels gallery | public-promotional |
|
||||
|
||||
> Pudu case-study landing page is client-rendered; individual case URLs are not exposed in the public sitemap. Customer references in copy are written generically (no named hotels, restaurants, or hospitals) until partnership-specific case studies are formally provided.
|
||||
|
||||
## Industry cards (`/industries/cards/`)
|
||||
|
||||
Used by the Industries grid (`IndustryUseCases` component) and the home-page Industries section.
|
||||
|
||||
| Local file | Source | Status |
|
||||
| --- | --- | --- |
|
||||
| `cards/hospitality.webp` | YS Lootah library | internal |
|
||||
| `cards/restaurants-cafes.webp` | YS Lootah library | internal |
|
||||
| `cards/hotels-resorts.webp` | YS Lootah library | internal |
|
||||
| `cards/shopping-malls.webp` | YS Lootah library | internal |
|
||||
| `cards/healthcare.webp` | YS Lootah library | internal |
|
||||
| `cards/education.jpg` | YS Lootah library | internal |
|
||||
| `cards/security-surveillance.jpg` | YS Lootah library | internal |
|
||||
| `cards/warehouses-logistics.webp` | YS Lootah library | internal |
|
||||
|
||||
## Industry page heroes (`/industries/pages/`)
|
||||
|
||||
Used by the `[slug]` detail page hero. May reuse internal library or brand reference visuals.
|
||||
|
||||
| Local file | Source | Status |
|
||||
| --- | --- | --- |
|
||||
| `pages/hospitality-hero.webp` | YS Lootah library | internal |
|
||||
| `pages/restaurants-cafes-hero.webp` | YS Lootah library | internal |
|
||||
| `pages/hotels-resorts-hero.webp` | YS Lootah library | internal |
|
||||
| `pages/shopping-malls-hero.webp` | YS Lootah library | internal |
|
||||
| `pages/healthcare-hero.webp` | YS Lootah library | internal |
|
||||
| `pages/education-hero.jpg` | YS Lootah library | internal |
|
||||
| `pages/security-surveillance-hero.jpg` | Unitree (terrain reference, copy of `unitree/terrain.jpg`) | needs-approval |
|
||||
| `pages/warehouses-logistics-hero.png` | Unitree (patrol-system reference, copy of `unitree/patrol-system.png`) | needs-approval |
|
||||
|
||||
---
|
||||
|
||||
## TODO before public launch
|
||||
|
||||
1. Replace every `needs-approval` asset with either:
|
||||
- Written approval from Unitree's partner/distributor team, or
|
||||
- Original YS Lootah photography / commissioned renders.
|
||||
2. Convert remaining `.jpg` / `.png` heroes to `.webp` once final assets are locked.
|
||||
3. Audit alt text for accuracy after any image swap.
|
||||
4. Keep this file in sync with `src/data/industries.ts` and `src/data/industry-pages.ts`.
|
||||
BIN
public/industries/cards/education.jpg
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
public/industries/cards/healthcare.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/industries/cards/hospitality.webp
Normal file
|
After Width: | Height: | Size: 403 KiB |
BIN
public/industries/cards/hotels-resorts.webp
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
public/industries/cards/restaurants-cafes.webp
Normal file
|
After Width: | Height: | Size: 264 KiB |
BIN
public/industries/cards/security-surveillance.jpg
Normal file
|
After Width: | Height: | Size: 157 KiB |
BIN
public/industries/cards/shopping-malls.webp
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/industries/cards/warehouses-logistics.webp
Normal file
|
After Width: | Height: | Size: 384 KiB |
BIN
public/industries/pages/education-hero.jpg
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
public/industries/pages/healthcare-hero.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/industries/pages/hospitality-hero.webp
Normal file
|
After Width: | Height: | Size: 403 KiB |
BIN
public/industries/pages/hotels-resorts-hero.webp
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
public/industries/pages/restaurants-cafes-hero.webp
Normal file
|
After Width: | Height: | Size: 264 KiB |
BIN
public/industries/pages/security-surveillance-hero.jpg
Normal file
|
After Width: | Height: | Size: 611 KiB |
BIN
public/industries/pages/shopping-malls-hero.webp
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/industries/pages/warehouses-logistics-hero.png
Normal file
|
After Width: | Height: | Size: 532 KiB |
BIN
public/industries/pudu/bellabot-pro.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/industries/pudu/bellabot.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
public/industries/pudu/cc1.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
public/industries/pudu/d9-disinfect.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/industries/pudu/holabot.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/industries/pudu/kettybot-black.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/industries/pudu/kettybot.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/industries/pudu/pudubot2.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
@ -140,8 +140,8 @@ export default async function IndustryDetailPage({ params }: { params: Promise<P
|
||||
{/* Right visual: industry hero image */}
|
||||
<aside className="ip-hero-visual">
|
||||
<Image
|
||||
src={industry.image}
|
||||
alt={industry.imageAlt}
|
||||
src={content.heroImage?.src ?? industry.image}
|
||||
alt={content.heroImage?.alt ?? industry.imageAlt}
|
||||
fill
|
||||
sizes="(max-width: 920px) 100vw, 520px"
|
||||
className="ip-hero-visual-img"
|
||||
|
||||
@ -2,13 +2,15 @@ import type { Metadata } from 'next';
|
||||
import { Navbar } from '@/components/Navbar';
|
||||
import { FooterAndContact } from '@/components/FooterAndContact';
|
||||
import { CatalogClient } from './CatalogClient';
|
||||
import { AccessoriesShowcase } from '@/components/robotics/AccessoriesShowcase';
|
||||
import { RoboticsSplineShowcase } from '@/components/sections/robotics-spline-showcase';
|
||||
import { ROBOTS } from '@/data/robots';
|
||||
import { ACCESSORIES } from '@/data/accessories';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Robots Catalog YS Lootah Robotics Dubai',
|
||||
description:
|
||||
'Explore selected humanoid, quadruped, service, delivery, hospitality, and cleaning robots from Unitree and Pudu available in the UAE through YS Lootah Robotics.',
|
||||
'Explore selected humanoid, quadruped, industrial, service, delivery, hospitality, and cleaning robots — plus dexterous hands, arms, sensors, and accessories — from Unitree and Pudu available in the UAE through YS Lootah Robotics.',
|
||||
};
|
||||
|
||||
export default function RobotsPage() {
|
||||
@ -25,7 +27,7 @@ export default function RobotsPage() {
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: '2.5rem',
|
||||
gap: 'clamp(2.5rem, 5vw, 4rem)',
|
||||
paddingTop: 'clamp(3rem, 6vw, 5rem)',
|
||||
paddingBottom: 'clamp(4rem, 8vw, 6rem)',
|
||||
}}
|
||||
@ -34,7 +36,7 @@ export default function RobotsPage() {
|
||||
<span className="eyebrow">Catalog · Filter & Browse</span>
|
||||
<h2 style={{ margin: 0, fontSize: 'clamp(1.6rem, 3.6vw, 2.4rem)', fontWeight: 400, lineHeight: 1.1, letterSpacing: '-0.02em' }}>
|
||||
<span className="text-gradient" style={{ fontWeight: 500 }}>
|
||||
{ROBOTS.length}+ models across the UAE portfolio.
|
||||
{ROBOTS.length} robots across the UAE portfolio.
|
||||
</span>
|
||||
</h2>
|
||||
<p style={{ margin: 0, color: '#DEE0F0', fontSize: 'clamp(0.95rem, 2vw, 1.05rem)', lineHeight: 1.7 }}>
|
||||
@ -43,6 +45,21 @@ export default function RobotsPage() {
|
||||
</div>
|
||||
|
||||
<CatalogClient />
|
||||
|
||||
<section id="accessories" style={{ display: 'flex', flexDirection: 'column', gap: '1.5rem', scrollMarginTop: 'clamp(80px, 12vh, 120px)' }}>
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '0.85rem', maxWidth: 760 }}>
|
||||
<span className="eyebrow">Add-ons · Accessories</span>
|
||||
<h2 style={{ margin: 0, fontSize: 'clamp(1.5rem, 3.4vw, 2.2rem)', fontWeight: 400, lineHeight: 1.1, letterSpacing: '-0.02em' }}>
|
||||
<span className="text-gradient" style={{ fontWeight: 500 }}>
|
||||
{ACCESSORIES.length} accessories — dexterous hands, arms, sensors, IoT modules.
|
||||
</span>
|
||||
</h2>
|
||||
<p style={{ margin: 0, color: '#DEE0F0', fontSize: 'clamp(0.92rem, 2vw, 1.02rem)', lineHeight: 1.65 }}>
|
||||
Robot platforms get their full capability from accessories. Browse Unitree dexterous hands and arms, perception sensors, and Pudu dispatch, docking, modular attachments, and building IoT modules.
|
||||
</p>
|
||||
</div>
|
||||
<AccessoriesShowcase />
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
<FooterAndContact />
|
||||
|
||||
223
src/components/robotics/AccessoriesShowcase.tsx
Normal file
@ -0,0 +1,223 @@
|
||||
'use client';
|
||||
|
||||
import { useMemo, useState } from 'react';
|
||||
import Image from 'next/image';
|
||||
import { ACCESSORIES, GROUP_LABELS, type AccessoryGroup, type Accessory } from '@/data/accessories';
|
||||
|
||||
type Filter = AccessoryGroup | 'all';
|
||||
|
||||
export function AccessoriesShowcase() {
|
||||
const groups = useMemo(() => {
|
||||
const set = new Set<AccessoryGroup>();
|
||||
ACCESSORIES.forEach((a) => set.add(a.group));
|
||||
return Array.from(set);
|
||||
}, []);
|
||||
|
||||
const [filter, setFilter] = useState<Filter>('all');
|
||||
|
||||
const list = useMemo(() => {
|
||||
if (filter === 'all') return ACCESSORIES;
|
||||
return ACCESSORIES.filter((a) => a.group === filter);
|
||||
}, [filter]);
|
||||
|
||||
return (
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '1.25rem' }}>
|
||||
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.4rem' }}>
|
||||
<FilterChip active={filter === 'all'} onClick={() => setFilter('all')}>
|
||||
All ({ACCESSORIES.length})
|
||||
</FilterChip>
|
||||
{groups.map((g) => (
|
||||
<FilterChip key={g} active={filter === g} onClick={() => setFilter(g)}>
|
||||
{GROUP_LABELS[g]} ({ACCESSORIES.filter((a) => a.group === g).length})
|
||||
</FilterChip>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
display: 'grid',
|
||||
gap: '1rem',
|
||||
gridTemplateColumns: 'repeat(auto-fit, minmax(min(260px, 100%), 1fr))',
|
||||
}}
|
||||
>
|
||||
{list.map((accessory) => (
|
||||
<AccessoryCard key={accessory.id} accessory={accessory} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function FilterChip({
|
||||
active,
|
||||
onClick,
|
||||
children,
|
||||
}: {
|
||||
active: boolean;
|
||||
onClick: () => void;
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClick}
|
||||
style={{
|
||||
padding: '0.5rem 0.85rem',
|
||||
borderRadius: 999,
|
||||
border: active ? '1px solid rgba(74,102,216,0.55)' : '1px solid rgba(222,224,240,0.12)',
|
||||
background: active ? 'rgba(58,85,196,0.18)' : 'rgba(20,19,26,0.7)',
|
||||
color: active ? '#FFFFFF' : '#DEE0F0',
|
||||
fontSize: '0.72rem',
|
||||
fontWeight: 600,
|
||||
letterSpacing: '0.12em',
|
||||
textTransform: 'uppercase',
|
||||
cursor: 'pointer',
|
||||
transition: 'all 0.25s ease',
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
function AccessoryCard({ accessory }: { accessory: Accessory }) {
|
||||
const accent = accessory.accent;
|
||||
return (
|
||||
<a
|
||||
href={accessory.officialUrl}
|
||||
target={accessory.officialUrl?.startsWith('http') ? '_blank' : undefined}
|
||||
rel="noopener noreferrer"
|
||||
style={{ textDecoration: 'none', color: 'inherit' }}
|
||||
>
|
||||
<article
|
||||
className="acc-card"
|
||||
style={{
|
||||
position: 'relative',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
height: '100%',
|
||||
borderRadius: 18,
|
||||
overflow: 'hidden',
|
||||
border: '1px solid rgba(222,224,240,0.10)',
|
||||
background:
|
||||
`radial-gradient(ellipse 80% 60% at 100% 0%, ${accent}1A, transparent 60%), linear-gradient(180deg, rgba(22,21,30,0.92), rgba(10,10,14,0.96))`,
|
||||
boxShadow: '0 1px 0 rgba(222,224,240,0.04) inset, 0 14px 28px rgba(0,0,0,0.36)',
|
||||
transition: 'transform 0.4s cubic-bezier(0.16,1,0.3,1), border-color 0.4s, box-shadow 0.4s',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
position: 'relative',
|
||||
aspectRatio: '16 / 11',
|
||||
background: '#0a0a0e',
|
||||
borderBottom: '1px solid rgba(222,224,240,0.06)',
|
||||
overflow: 'hidden',
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
src={accessory.image}
|
||||
alt={`${accessory.name} product image`}
|
||||
fill
|
||||
sizes="(max-width: 600px) 100vw, (max-width: 1100px) 50vw, 25vw"
|
||||
style={{ objectFit: 'contain', objectPosition: 'center', padding: '0.6rem' }}
|
||||
/>
|
||||
<span
|
||||
aria-hidden
|
||||
style={{
|
||||
position: 'absolute',
|
||||
inset: 0,
|
||||
background: `radial-gradient(ellipse 60% 70% at 50% 40%, ${accent}26, transparent 65%)`,
|
||||
pointerEvents: 'none',
|
||||
}}
|
||||
/>
|
||||
<span
|
||||
style={{
|
||||
position: 'absolute',
|
||||
top: '0.55rem',
|
||||
left: '0.55rem',
|
||||
padding: '0.22rem 0.55rem',
|
||||
borderRadius: 999,
|
||||
fontSize: '0.55rem',
|
||||
fontWeight: 800,
|
||||
letterSpacing: '0.22em',
|
||||
textTransform: 'uppercase',
|
||||
color: accent,
|
||||
background: 'rgba(10,10,14,0.7)',
|
||||
border: `1px solid ${accent}55`,
|
||||
backdropFilter: 'blur(8px)',
|
||||
WebkitBackdropFilter: 'blur(8px)',
|
||||
}}
|
||||
>
|
||||
{accessory.brandLabel}
|
||||
</span>
|
||||
<span
|
||||
style={{
|
||||
position: 'absolute',
|
||||
top: '0.55rem',
|
||||
right: '0.55rem',
|
||||
padding: '0.22rem 0.55rem',
|
||||
borderRadius: 999,
|
||||
fontSize: '0.55rem',
|
||||
fontWeight: 800,
|
||||
letterSpacing: '0.18em',
|
||||
textTransform: 'uppercase',
|
||||
color: '#DEE0F0',
|
||||
background: 'rgba(10,10,14,0.7)',
|
||||
border: '1px solid rgba(222,224,240,0.14)',
|
||||
backdropFilter: 'blur(8px)',
|
||||
WebkitBackdropFilter: 'blur(8px)',
|
||||
}}
|
||||
>
|
||||
{GROUP_LABELS[accessory.group]}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '0.55rem', padding: '1rem 1.1rem 1.1rem', flex: 1 }}>
|
||||
<h3 style={{ margin: 0, fontSize: '1.02rem', fontWeight: 600, letterSpacing: '-0.005em', color: '#FFFFFF' }}>
|
||||
{accessory.name}
|
||||
</h3>
|
||||
<p style={{ margin: 0, fontSize: '0.84rem', color: '#C9CCDE', lineHeight: 1.55, flex: 1 }}>
|
||||
{accessory.tagline}
|
||||
</p>
|
||||
{accessory.compatibility && accessory.compatibility.length > 0 && (
|
||||
<div style={{ paddingTop: '0.55rem', borderTop: '1px solid rgba(222,224,240,0.06)' }}>
|
||||
<span style={{ display: 'block', fontSize: '0.55rem', fontWeight: 800, letterSpacing: '0.24em', textTransform: 'uppercase', color: '#8891C7', marginBottom: '0.35rem' }}>
|
||||
Compatible with
|
||||
</span>
|
||||
<ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexWrap: 'wrap', gap: '0.25rem' }}>
|
||||
{accessory.compatibility.slice(0, 4).map((c) => (
|
||||
<li
|
||||
key={c}
|
||||
style={{
|
||||
fontSize: '0.66rem',
|
||||
fontWeight: 600,
|
||||
padding: '0.18rem 0.5rem',
|
||||
borderRadius: 999,
|
||||
border: '1px solid rgba(222,224,240,0.10)',
|
||||
background: 'rgba(20,19,26,0.7)',
|
||||
color: '#DEE0F0',
|
||||
}}
|
||||
>
|
||||
{c}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<style jsx>{`
|
||||
:global(.acc-card:hover),
|
||||
:global(.acc-card:focus-visible) {
|
||||
transform: translateY(-3px);
|
||||
border-color: ${accent}66 !important;
|
||||
box-shadow:
|
||||
0 1px 0 rgba(222,224,240,0.08) inset,
|
||||
0 24px 52px rgba(0,0,0,0.55),
|
||||
0 0 28px ${accent}33 !important;
|
||||
}
|
||||
`}</style>
|
||||
</a>
|
||||
);
|
||||
}
|
||||
619
src/data/accessories.ts
Normal file
@ -0,0 +1,619 @@
|
||||
export type AccessoryBrand = 'unitree' | 'pudu';
|
||||
export type AccessoryGroup =
|
||||
| 'dexterous-hand'
|
||||
| 'robotic-arm'
|
||||
| 'sensor'
|
||||
| 'dispatch'
|
||||
| 'docking'
|
||||
| 'attachment'
|
||||
| 'iot-integration';
|
||||
|
||||
export interface Accessory {
|
||||
id: string;
|
||||
slug: string;
|
||||
brand: AccessoryBrand;
|
||||
brandLabel: string;
|
||||
name: string;
|
||||
tagline: string;
|
||||
group: AccessoryGroup;
|
||||
description: string;
|
||||
features: string[];
|
||||
image: string;
|
||||
accent: string;
|
||||
officialUrl?: string;
|
||||
compatibility?: string[];
|
||||
}
|
||||
|
||||
export const GROUP_LABELS: Record<AccessoryGroup, string> = {
|
||||
'dexterous-hand': 'Dexterous Hands',
|
||||
'robotic-arm': 'Robotic Arms',
|
||||
sensor: 'Perception & Sensors',
|
||||
dispatch: 'Dispatch & Calling',
|
||||
docking: 'Docking & Charging',
|
||||
attachment: 'Modular Attachments',
|
||||
'iot-integration': 'IoT & Building Integration',
|
||||
};
|
||||
|
||||
const GOLD_CHAMPAGNE = '#DEE0F0';
|
||||
const GOLD_BRAND = '#273F94';
|
||||
const GOLD_BRONZE = '#8891C7';
|
||||
|
||||
export const ACCESSORIES: Accessory[] = [
|
||||
// ============ UNITREE DEXTEROUS HANDS ============
|
||||
{
|
||||
id: 'unitree-dex2-5',
|
||||
slug: 'unitree-dex2-5',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'Dex2-5 Dexterous Hand',
|
||||
tagline: 'Tendon-driven 5-finger hand with 100,000+ fatigue cycles tested.',
|
||||
group: 'dexterous-hand',
|
||||
description:
|
||||
'A 5-finger, 10-DOF tendon-driven dexterous hand for G1 and R1 humanoids. Gear-tendon drive with hidden internal wiring, 365 g lightweight design, and full perceptual feedback at 1 kHz.',
|
||||
features: [
|
||||
'10 DOF total (2 actuated), 5 fingers',
|
||||
'365 g, 151×70×63 mm',
|
||||
'0.5 s full fist clench',
|
||||
'100,000+ fatigue cycles tested',
|
||||
'Survived 100+ drop tests',
|
||||
'1000 Hz sensor / comm rate',
|
||||
],
|
||||
image: 'https://www.unitree.com/images/dex2-5.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.unitree.com/Dex2-5',
|
||||
compatibility: ['Unitree G1', 'Unitree R1'],
|
||||
},
|
||||
{
|
||||
id: 'unitree-dex5-1',
|
||||
slug: 'unitree-dex5-1',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'Dex5-1 Dexterous Hand',
|
||||
tagline: 'High-DOF dexterous hand with 94 tactile sensors for RL workflows.',
|
||||
group: 'dexterous-hand',
|
||||
description:
|
||||
'A 20-DOF (16 actuated) dexterous hand with 94 tactile sensors and backdrivable joints designed for reinforcement-learning workflows. ±22° four-finger lateral swing and operation from –20 °C to 60 °C.',
|
||||
features: [
|
||||
'20 DOF (16 active + 4)',
|
||||
'94 tactile sensors',
|
||||
'1100 g, –20 °C to 60 °C',
|
||||
'3.5 kg palm-down / 4.5 kg palm-side load',
|
||||
'±22° four-finger lateral swing',
|
||||
'Backdrivable, low-damping reducers',
|
||||
],
|
||||
image: 'https://www.unitree.com/images/bb5449be5095404897027b344537f602_2560x1920.gif',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.unitree.com/Dex5-1',
|
||||
compatibility: ['Unitree G1', 'Unitree H1', 'Unitree H2', 'Research arms'],
|
||||
},
|
||||
{
|
||||
id: 'unitree-dex3-1',
|
||||
slug: 'unitree-dex3-1',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'Dex3-1 Dexterous Hand',
|
||||
tagline: 'Power-control 3-finger hand with hybrid force/position control.',
|
||||
group: 'dexterous-hand',
|
||||
description:
|
||||
'A 3-finger, 7-DOF dexterous hand with 33 tactile pressure sensors and hybrid force/position control. Designed to pair with the G1 humanoid for general-purpose manipulation.',
|
||||
features: [
|
||||
'7 DOF, 3 fingers',
|
||||
'33 tactile pressure sensors',
|
||||
'±2 mm fingertip repeatability',
|
||||
'500 g payload',
|
||||
'12–58 V operating voltage',
|
||||
'1 kHz communication rate',
|
||||
],
|
||||
image: 'https://www.unitree.com/images/4eff56e5733d4fdbb8276bf6c65daa74_1920x1080.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.unitree.com/Dex3-1',
|
||||
compatibility: ['Unitree G1'],
|
||||
},
|
||||
{
|
||||
id: 'unitree-dex1-1',
|
||||
slug: 'unitree-dex1-1',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'Dex1-1 Embodied AI Gripper',
|
||||
tagline: 'Two-finger embodied-AI gripper with optional 1080p camera.',
|
||||
group: 'dexterous-hand',
|
||||
description:
|
||||
'A two-finger gripper with 90 mm stroke, 0.1 mm resolution, and 5–120 N adjustable force. Available in Standard and Advanced (with 1080p camera) variants, compatible with G1, H2, R1, or standalone use.',
|
||||
features: [
|
||||
'90 mm stroke, 5–120 N adjustable force',
|
||||
'0.1 mm fingertip resolution',
|
||||
'0.24 s full-stroke close',
|
||||
'20 kg form-fit grasp payload',
|
||||
'6 Mbps RS485 communication',
|
||||
'Advanced version includes 1080p camera',
|
||||
],
|
||||
image: 'https://www.unitree.com/images/b98699988c4249a89dd246f406ffaa2d_694x750.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.unitree.com/Dex1-1',
|
||||
compatibility: ['Unitree G1', 'Unitree H2', 'Unitree R1', 'Standalone'],
|
||||
},
|
||||
|
||||
// ============ UNITREE ROBOTIC ARMS ============
|
||||
{
|
||||
id: 'unitree-z1',
|
||||
slug: 'unitree-z1',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'Z1 6-Axis Manipulator',
|
||||
tagline: 'Onboard 6-axis manipulator for mobile robotics platforms.',
|
||||
group: 'robotic-arm',
|
||||
description:
|
||||
'Z1 Air (4.3 kg) and Z1 Pro (4.5 kg) 6-axis robotic arms for mobile robots in logistics, retail, and research. 740 mm reach, 2–3 kg payload, ~0.1 mm repeatability. Designed for AlienGo and B1 mounting.',
|
||||
features: [
|
||||
'6-axis, 740 mm reach',
|
||||
'4.3 kg (Air) / 4.5 kg (Pro)',
|
||||
'2–3 kg payload',
|
||||
'~0.1 mm repeatability',
|
||||
'Joint force control + collision detection',
|
||||
'Position + force control modes',
|
||||
],
|
||||
image: 'https://oss-global-cdn.unitree.com/static/z1.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.unitree.com/z1',
|
||||
compatibility: ['Unitree AlienGo', 'Unitree B1', 'Mobile platforms'],
|
||||
},
|
||||
{
|
||||
id: 'unitree-d1-t',
|
||||
slug: 'unitree-d1-t',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: 'D1-T Teleoperation Arm',
|
||||
tagline: 'Teleoperation robot arm for embodied-AI data collection.',
|
||||
group: 'robotic-arm',
|
||||
description:
|
||||
'Dual-arm or quad-arm teleoperation kit with 2.37 kg ultra-light aluminum design. Bus servos featuring position/velocity/force control for embodied-AI data collection. 7-DOF (6-axis + gripper), 670 mm reach, 500 g payload.',
|
||||
features: [
|
||||
'7-DOF arm (6-axis + gripper)',
|
||||
'2.37 kg, 670 mm reach, 500 g payload',
|
||||
'Ultra-precision force-controlled servos',
|
||||
'Dual-arm / Quad-arm configurations',
|
||||
'Camera & mobile-chassis ready',
|
||||
'24 V (2.5 A standard / 5 A max)',
|
||||
],
|
||||
image: 'https://oss-global-cdn.unitree.com/static/d1t.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.unitree.com/D1-T',
|
||||
compatibility: ['Embodied AI research', 'Data collection'],
|
||||
},
|
||||
|
||||
// ============ UNITREE PERCEPTION & SENSORS ============
|
||||
{
|
||||
id: 'unitree-l2',
|
||||
slug: 'unitree-l2',
|
||||
brand: 'unitree',
|
||||
brandLabel: 'Unitree',
|
||||
name: '4D LiDAR L2',
|
||||
tagline: '4D LiDAR with built-in IMU and open-source SLAM (POINT-LIO).',
|
||||
group: 'sensor',
|
||||
description:
|
||||
'A 4D LiDAR sensor with built-in 6-axis IMU and open POINT-LIO SLAM stack. 360°×96° ultra-wide field of view at 64,000 pts/s with 2 cm accuracy. 230 g compact form, 30 m range at 90% reflectivity.',
|
||||
features: [
|
||||
'360°×96° ultra-wide FOV',
|
||||
'64,000 pts/s, 2 cm accuracy',
|
||||
'30 m @ 90% reflectivity',
|
||||
'Built-in 6-axis IMU',
|
||||
'230 g compact form',
|
||||
'Open POINT-LIO SLAM stack',
|
||||
],
|
||||
image: 'https://oss-global-cdn.unitree.com/static/l2.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.unitree.com/L2',
|
||||
compatibility: ['Unitree Go2', 'Unitree quadrupeds', 'Third-party robots'],
|
||||
},
|
||||
|
||||
// ============ PUDU DISPATCH ============
|
||||
{
|
||||
id: 'pudu-pager',
|
||||
slug: 'pudu-pager',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'PUDU Pager',
|
||||
tagline: 'Restaurant table pager that triggers delivery cycles.',
|
||||
group: 'dispatch',
|
||||
description:
|
||||
'A compact table-side pager that calls BellaBot, KettyBot, HolaBot, and PuduBot to specific tables on demand. Wireless, long battery life, and integrates with the Pudu Link cloud platform.',
|
||||
features: [
|
||||
'Wireless table-side calling',
|
||||
'Long battery life',
|
||||
'Pudu Link cloud integration',
|
||||
'Multi-robot fleet support',
|
||||
'Multiple device pairing',
|
||||
'Customizable call zones',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_1_18f2507db0.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['BellaBot', 'BellaBot Pro', 'KettyBot', 'HolaBot', 'PuduBot 2'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-4g-watch',
|
||||
slug: 'pudu-4g-watch',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: '4G Watch',
|
||||
tagline: 'Wrist-worn 4G dispatcher for managing service robots from anywhere.',
|
||||
group: 'dispatch',
|
||||
description:
|
||||
'A wearable 4G watch for staff to dispatch and manage service robots from anywhere on the property. Real-time fleet status, table-to-robot routing, and call/cancel actions on-wrist.',
|
||||
features: [
|
||||
'Wrist-worn dispatch control',
|
||||
'4G connectivity',
|
||||
'Real-time fleet status',
|
||||
'Call / cancel actions',
|
||||
'Multi-robot management',
|
||||
'Pudu Link integration',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_1_18f2507db0.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['All Pudu service robots'],
|
||||
},
|
||||
|
||||
// ============ PUDU DOCKING & CHARGING ============
|
||||
{
|
||||
id: 'pudu-docking-station',
|
||||
slug: 'pudu-docking-station',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Docking & Charging Station',
|
||||
tagline: 'Auto-charging dock for continuous robot operation.',
|
||||
group: 'docking',
|
||||
description:
|
||||
'Auto-charging station for continuous robot operation. Product-specific variants for CC1, T300, FlashBot Max, BellaBot Pro, and other Pudu platforms.',
|
||||
features: [
|
||||
'Auto-docking and charging',
|
||||
'Product-specific variants',
|
||||
'Fleet-ready multi-robot support',
|
||||
'Indoor and semi-outdoor models',
|
||||
'Status indicators',
|
||||
'Pudu Link cloud integration',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_0dd9c73f5a.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['CC1', 'T300', 'FlashBot Max', 'BellaBot Pro', 'PuduBot 2'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-self-cleaning-dock',
|
||||
slug: 'pudu-self-cleaning-dock',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Self-Cleaning Docking Station',
|
||||
tagline: 'Heavy-duty CC1 dock with self-cleaning water station.',
|
||||
group: 'docking',
|
||||
description:
|
||||
'A heavy-duty dock for CC1 with metallic structure and a self-cleaning water station. Automatic refill, wastewater drain, and detergent dosing for fully autonomous cleaning cycles.',
|
||||
features: [
|
||||
'Self-cleaning water station',
|
||||
'Metallic heavy-duty frame',
|
||||
'Automatic refill + drain',
|
||||
'Detergent dosing',
|
||||
'Indoor commercial environments',
|
||||
'Fleet-ready',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_cc1_Pro_7de75f36ae.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['CC1', 'CC1 Pro'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-mobile-water-station',
|
||||
slug: 'pudu-mobile-water-station',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Mobile Water Station',
|
||||
tagline: 'Portable water + detergent station for cleaning robots.',
|
||||
group: 'docking',
|
||||
description:
|
||||
'A portable water and detergent station for CC1 / SH1 cleaning robots. Easy refill anywhere on site, with on-board detergent dosing for flexible cleaning programs.',
|
||||
features: [
|
||||
'Portable water + detergent',
|
||||
'On-site refill anywhere',
|
||||
'On-board detergent dosing',
|
||||
'Compatible with CC1 / SH1',
|
||||
'Modular tank',
|
||||
'Cleaning-ready operation',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_cc1_8baf7f1424.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['CC1', 'SH1'],
|
||||
},
|
||||
|
||||
// ============ PUDU MODULAR ATTACHMENTS ============
|
||||
{
|
||||
id: 'pudu-protection-case',
|
||||
slug: 'pudu-protection-case',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Protection Case',
|
||||
tagline: 'Snap-on protective covers for delivery robots.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'Snap-on protective covers for BellaBot Pro, KettyBot Pro, T300, and FlashBot Max. Protects exteriors during high-traffic operation while preserving cameras and sensors.',
|
||||
features: [
|
||||
'Snap-on covers',
|
||||
'Product-specific fit',
|
||||
'Easy install / removal',
|
||||
'Preserves sensors',
|
||||
'Available colors',
|
||||
'Heavy-traffic ready',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_bellabot_f807eb57b5.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['BellaBot Pro', 'KettyBot Pro', 'T300', 'FlashBot Max'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-retractable-tray-baffle',
|
||||
slug: 'pudu-retractable-tray-baffle',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Retractable Tray Baffle',
|
||||
tagline: 'Retractable side rails preventing dish slippage on trays.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'Retractable side rails for BellaBot Pro / KettyBot Pro trays. Keeps dishes, glassware, and parcels stable during high-speed delivery and turns.',
|
||||
features: [
|
||||
'Retractable side rails',
|
||||
'Dish + glass stability',
|
||||
'Easy retract for unloading',
|
||||
'Compatible with multi-tray setups',
|
||||
'High-traffic delivery ready',
|
||||
'Quick install',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_bella_pro_816bfa936e.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['BellaBot Pro', 'KettyBot Pro'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-tray',
|
||||
slug: 'pudu-tray',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Modular Tray',
|
||||
tagline: 'Spare modular tray for delivery robots — configurable 3–7 levels.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'Spare modular trays for Pudu delivery robots. Configurable from 3 to 7 levels with infrared tray sensors and adjustable heights for trays, dishes, and parcels.',
|
||||
features: [
|
||||
'Configurable 3–7 level stack',
|
||||
'Infrared tray sensors',
|
||||
'Adjustable height',
|
||||
'Heavy-load support',
|
||||
'Quick swap',
|
||||
'Multiple finishes',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_pudubot2_478d35cdae.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['BellaBot', 'BellaBot Pro', 'KettyBot Pro', 'PuduBot 2'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-conveyor-single-layer',
|
||||
slug: 'pudu-conveyor-single-layer',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'T300 Conveyor — Single Layer',
|
||||
tagline: 'Single-level conveyor attachment for T300 AMR.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'Single-level conveyor attachment for the T300 industrial AMR. Enables in-line pickup and dropoff for manufacturing material handling, light goods transport, and back-of-house logistics.',
|
||||
features: [
|
||||
'Single-level conveyor',
|
||||
'In-line pickup / drop',
|
||||
'Manufacturing material handling',
|
||||
'Quick attach',
|
||||
'Heavy-duty rollers',
|
||||
'Conveyor IoT integration',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_T600_09c8d0b9bb.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['PUDU T300'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-towing-device',
|
||||
slug: 'pudu-towing-device',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'T300 Towing Device',
|
||||
tagline: 'Towing attachment converting T300 to a tow tractor.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'T300 towing attachment for hauling trailers, carts, and totes. Modular hitch with safe coupling, ideal for warehouse train operations and back-of-house logistics.',
|
||||
features: [
|
||||
'Modular hitch',
|
||||
'Trailer / cart towing',
|
||||
'Safe coupling sensors',
|
||||
'Warehouse train ops',
|
||||
'Tool-less install',
|
||||
'IoT route planning',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_PUDU_D7_114b122fa9.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['PUDU T300'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-lifting-rack',
|
||||
slug: 'pudu-lifting-rack',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'T300 Lifting Rack',
|
||||
tagline: 'Lifting platform attachment for shelf pick-and-place.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'T300 lifting-platform attachment for shelf pick-and-place operations. Modular adjustable rack heights for parts kitting, restocking, and just-in-time material flows.',
|
||||
features: [
|
||||
'Powered lift platform',
|
||||
'Adjustable rack heights',
|
||||
'Shelf pick-and-place',
|
||||
'Just-in-time material flow',
|
||||
'Safe motion sensors',
|
||||
'Tool-less install',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_pudu_d9_baa71e3b5b.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['PUDU T300'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-carpet-vacuuming-assembly',
|
||||
slug: 'pudu-carpet-vacuuming-assembly',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Carpet Vacuuming Assembly',
|
||||
tagline: 'CC1 attachment switching from hard-floor to carpet vacuum.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'A CC1 attachment that converts the platform from hard-floor cleaning to dedicated carpet vacuuming. Quick swap for mixed-surface venues like hotels, offices, and lounges.',
|
||||
features: [
|
||||
'Carpet vacuum head',
|
||||
'Quick swap kit',
|
||||
'Mixed-surface support',
|
||||
'Suction optimized for carpet fibers',
|
||||
'Easy filter access',
|
||||
'Hotel / office ready',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/CC_1pro_PC_0e0fd8a3d4.webp',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['CC1', 'CC1 Pro'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-reflective-post',
|
||||
slug: 'pudu-reflective-post',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Reflective Post',
|
||||
tagline: 'Floor markers and reflectors for SLAM positioning support.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'Reflective posts and floor markers that assist SLAM positioning in challenging environments. Ideal for venues where visual texture or LiDAR returns are weak.',
|
||||
features: [
|
||||
'SLAM-assist reflectors',
|
||||
'Floor markers',
|
||||
'Weak-texture environment support',
|
||||
'Quick install',
|
||||
'Long-life reflective surface',
|
||||
'Indoor / semi-outdoor use',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_00c28dafe0.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['All Pudu service + delivery robots'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-flashbot-vending-machine',
|
||||
slug: 'pudu-flashbot-vending-machine',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'FlashBot Vending Compartment',
|
||||
tagline: 'Hotel mini-bar / vending compartment compatible with FlashBot.',
|
||||
group: 'attachment',
|
||||
description:
|
||||
'A vending compartment kit compatible with FlashBot and FlashBot Max. Stocks snacks, drinks, amenities, or hotel mini-bar items for in-room or in-corridor delivery on demand.',
|
||||
features: [
|
||||
'Mini-bar style compartments',
|
||||
'In-room / corridor delivery',
|
||||
'Secure access',
|
||||
'Stock management via Pudu Link',
|
||||
'Multi-compartment layout',
|
||||
'Compatible with FlashBot family',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_flashbot_new_e3c621b5fd.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['FlashBot', 'FlashBot Max'],
|
||||
},
|
||||
|
||||
// ============ PUDU IoT & BUILDING INTEGRATION ============
|
||||
{
|
||||
id: 'pudu-elevator-control-module',
|
||||
slug: 'pudu-elevator-control-module',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Elevator Control Module',
|
||||
tagline: 'IoT module enabling robots to call and operate elevators autonomously.',
|
||||
group: 'iot-integration',
|
||||
description:
|
||||
'A hardware module enabling Pudu delivery robots to call and operate elevators without elevator-side modifications. Supports major elevator brands and integrates cleanly with building systems.',
|
||||
features: [
|
||||
'Cloud + hardware elevator control',
|
||||
'No elevator modification required',
|
||||
'Major elevator brand support',
|
||||
'Multi-floor autonomous routing',
|
||||
'Secure access integration',
|
||||
'Pudu Link cloud',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_BG_1_Pro_1_b196fdb002.png',
|
||||
accent: GOLD_CHAMPAGNE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['FlashBot', 'FlashBot Max', 'PuduBot 2', 'SwiftBot'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-gate-control-module',
|
||||
slug: 'pudu-gate-control-module',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Turnstile & Automatic Door Control',
|
||||
tagline: 'IoT module for autonomous turnstile and automatic-door passage.',
|
||||
group: 'iot-integration',
|
||||
description:
|
||||
'IoT module enabling Pudu robots to pass autonomously through turnstiles and automatic doors. Supports access control integration for secure premises and multi-zone routing.',
|
||||
features: [
|
||||
'Turnstile autonomous passage',
|
||||
'Automatic door integration',
|
||||
'Access control linkage',
|
||||
'Multi-zone routing',
|
||||
'Secure facility ready',
|
||||
'Pudu Link cloud',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_flashbot_arm_58961abf05.png',
|
||||
accent: GOLD_BRAND,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['FlashBot', 'FlashBot Max', 'SwiftBot', 'PuduBot 2'],
|
||||
},
|
||||
{
|
||||
id: 'pudu-telephone-system',
|
||||
slug: 'pudu-telephone-system',
|
||||
brand: 'pudu',
|
||||
brandLabel: 'Pudu',
|
||||
name: 'Telephone Integration',
|
||||
tagline: 'Voice intercom linking guest phones to robot dispatch.',
|
||||
group: 'iot-integration',
|
||||
description:
|
||||
'A telephone system integration linking guest or customer phones to robot dispatch. Voice intercom on the robot enables direct conversations during delivery or reception.',
|
||||
features: [
|
||||
'Voice intercom on robot',
|
||||
'Guest phone integration',
|
||||
'Direct conversation during delivery',
|
||||
'PBX-friendly setup',
|
||||
'Hospitality + corporate ready',
|
||||
'Pudu Link cloud',
|
||||
],
|
||||
image: 'https://cdn.pudutech.com/nav_product_kettybotpro_64d5202d1a.png',
|
||||
accent: GOLD_BRONZE,
|
||||
officialUrl: 'https://www.pudurobotics.com/en/accessory',
|
||||
compatibility: ['FlashBot', 'FlashBot Max', 'SwiftBot'],
|
||||
},
|
||||
];
|
||||
|
||||
export function getAccessoryBySlug(slug: string): Accessory | undefined {
|
||||
return ACCESSORIES.find((a) => a.slug === slug);
|
||||
}
|
||||
|
||||
export function getAccessoriesByGroup(group: AccessoryGroup): Accessory[] {
|
||||
return ACCESSORIES.filter((a) => a.group === group);
|
||||
}
|
||||
|
||||
export function getAccessoriesByBrand(brand: AccessoryBrand): Accessory[] {
|
||||
return ACCESSORIES.filter((a) => a.brand === brand);
|
||||
}
|
||||
@ -25,8 +25,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['hospitality', 'service', 'delivery'],
|
||||
accent: '#DEE0F0',
|
||||
icon: 'hotel',
|
||||
image: '/industries/hospitality.webp',
|
||||
imageAlt: 'Pudu service robot in a hospitality venue',
|
||||
image: '/industries/cards/hospitality.webp',
|
||||
imageAlt: 'Service robot delivering in a UAE hospitality venue',
|
||||
},
|
||||
{
|
||||
id: 'restaurants',
|
||||
@ -38,8 +38,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['delivery', 'service', 'hospitality'],
|
||||
accent: '#8891C7',
|
||||
icon: 'utensils',
|
||||
image: '/industries/restaurants-cafes.webp',
|
||||
imageAlt: 'Pudu food delivery robot in a restaurant environment',
|
||||
image: '/industries/cards/restaurants-cafes.webp',
|
||||
imageAlt: 'Tray-runner delivery robot serving a UAE restaurant floor',
|
||||
},
|
||||
{
|
||||
id: 'hotels',
|
||||
@ -51,8 +51,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['delivery', 'hospitality', 'service'],
|
||||
accent: '#273F94',
|
||||
icon: 'hotel',
|
||||
image: '/industries/hotels-resorts.webp',
|
||||
imageAlt: 'Pudu delivery robot serving hotel guests',
|
||||
image: '/industries/cards/hotels-resorts.webp',
|
||||
imageAlt: 'Multi-floor delivery robot serving hotel guests in the UAE',
|
||||
},
|
||||
{
|
||||
id: 'malls',
|
||||
@ -64,8 +64,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['cleaning', 'service', 'humanoid'],
|
||||
accent: '#DEE0F0',
|
||||
icon: 'shopping-bag',
|
||||
image: '/industries/shopping-malls.webp',
|
||||
imageAlt: 'Pudu service robot in a high-traffic retail environment',
|
||||
image: '/industries/cards/shopping-malls.webp',
|
||||
imageAlt: 'Service robot operating in a high-traffic UAE retail environment',
|
||||
},
|
||||
{
|
||||
id: 'healthcare',
|
||||
@ -77,8 +77,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['delivery', 'service'],
|
||||
accent: '#273F94',
|
||||
icon: 'heart-pulse',
|
||||
image: '/industries/healthcare.webp',
|
||||
imageAlt: 'Pudu delivery robot for healthcare and care facilities',
|
||||
image: '/industries/cards/healthcare.webp',
|
||||
imageAlt: 'Autonomous delivery robot for UAE healthcare and care facilities',
|
||||
},
|
||||
{
|
||||
id: 'education',
|
||||
@ -90,8 +90,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['humanoid', 'service'],
|
||||
accent: '#8891C7',
|
||||
icon: 'graduation-cap',
|
||||
image: '/industries/education.jpg',
|
||||
imageAlt: 'Unitree humanoid robot for education and STEM research',
|
||||
image: '/industries/cards/education.jpg',
|
||||
imageAlt: 'Humanoid research robot in a UAE STEM lab',
|
||||
},
|
||||
{
|
||||
id: 'security',
|
||||
@ -103,8 +103,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['quadruped', 'commercial'],
|
||||
accent: '#DEE0F0',
|
||||
icon: 'shield',
|
||||
image: '/industries/security-surveillance.jpg',
|
||||
imageAlt: 'Unitree quadruped robot on autonomous security patrol',
|
||||
image: '/industries/cards/security-surveillance.jpg',
|
||||
imageAlt: 'Quadruped robot on autonomous security patrol at a UAE facility',
|
||||
},
|
||||
{
|
||||
id: 'warehouses',
|
||||
@ -116,8 +116,8 @@ export const INDUSTRIES: Industry[] = [
|
||||
matchCategories: ['quadruped', 'delivery', 'commercial'],
|
||||
accent: '#273F94',
|
||||
icon: 'warehouse',
|
||||
image: '/industries/warehouses-logistics.webp',
|
||||
imageAlt: 'Pudu industrial delivery robot for warehouses and logistics',
|
||||
image: '/industries/cards/warehouses-logistics.webp',
|
||||
imageAlt: 'Industrial robot for UAE warehouses and logistics operations',
|
||||
},
|
||||
{
|
||||
id: 'events',
|
||||
|
||||
@ -43,6 +43,7 @@ export type IndustryPageContent = {
|
||||
heroTitle: string;
|
||||
heroSubtitle: string;
|
||||
heroTags?: string[];
|
||||
heroImage?: { src: string; alt: string };
|
||||
proofPoints?: ProofPoint[];
|
||||
gallery?: GalleryImage[];
|
||||
problemPoints: string[];
|
||||
@ -63,10 +64,14 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Deploy service, delivery, cleaning, and concierge robots across UAE hospitality venues — from lounges and clubs to high-end hotels.',
|
||||
heroTags: ['Service', 'Delivery', 'Cleaning', 'Concierge'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/hospitality-hero.webp',
|
||||
alt: 'Service robot in a premium UAE hospitality venue',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: 'Pudu+Unitree', label: 'Brand mix' },
|
||||
{ value: '60+', label: 'Countries deployed' },
|
||||
{ value: 'Multi-zone', label: 'Route planning' },
|
||||
{ value: 'Auto-dock', label: 'Charging cycles' },
|
||||
{ value: 'Premium', label: 'Brand moments' },
|
||||
],
|
||||
gallery: [
|
||||
@ -146,11 +151,15 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Delivery and greeting robots that support peak service, reduce walking distance, and elevate the dining experience in UAE F&B venues.',
|
||||
heroTags: ['F&B service', 'Greeter', 'Multi-tray delivery', 'Promo runs'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/restaurants-cafes-hero.webp',
|
||||
alt: 'Tray-runner robot serving a UAE restaurant floor',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: '40kg', label: 'Tray payload' },
|
||||
{ value: '4-tier', label: 'BellaBot shelves' },
|
||||
{ value: '24/7', label: 'Service-ready' },
|
||||
{ value: '2,000+', label: 'Global venues' },
|
||||
{ value: 'Peak-hour', label: 'Service support' },
|
||||
{ value: 'Greet+Deliver', label: 'Hybrid roles' },
|
||||
],
|
||||
gallery: [
|
||||
{ src: '/images/robots/pudu-bellabot.png', alt: 'Pudu BellaBot multi-tray delivery robot', caption: 'BellaBot Pro — multi-tray food delivery.', credit: 'Pudu' },
|
||||
@ -224,6 +233,10 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Multi-floor delivery, cleaning, and humanoid moments designed for premium UAE hospitality operations.',
|
||||
heroTags: ['Multi-floor', 'Room service', 'Concierge', 'Cleaning'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/hotels-resorts-hero.webp',
|
||||
alt: 'Multi-floor delivery robot serving a UAE hotel suite',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: 'Multi-floor', label: 'Lift-aware nav' },
|
||||
{ value: 'Pudu+Unitree', label: 'Brand mix' },
|
||||
@ -302,8 +315,12 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Cleaning, service, security, and activation robots tuned for UAE malls, retail flagships, and large public venues.',
|
||||
heroTags: ['Cleaning', 'Wayfinding', 'Activations', 'Night patrol'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/shopping-malls-hero.webp',
|
||||
alt: 'Service robot operating in a UAE shopping mall concourse',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: '1,800m²/h', label: 'Cleaning throughput' },
|
||||
{ value: 'Large-floor', label: 'Cleaning coverage' },
|
||||
{ value: 'Thermal+LiDAR', label: 'Patrol sensors' },
|
||||
{ value: 'Ad-screen', label: 'On-robot media' },
|
||||
{ value: 'Overnight', label: 'Auto-cycles' },
|
||||
@ -386,6 +403,10 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Transport supplies, meals, and medication around UAE clinics and hospitals — so clinicians can focus on patient care.',
|
||||
heroTags: ['Internal delivery', 'Cleaning', 'Disinfection', 'Wayfinding'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/healthcare-hero.webp',
|
||||
alt: 'Delivery robot in a UAE hospital corridor',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: 'Multi-floor', label: 'Lift integration' },
|
||||
{ value: 'Contactless', label: 'Handoff' },
|
||||
@ -464,6 +485,10 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Humanoid and quadruped robots that bring AI, programming, and modern robotics into UAE schools, universities, and innovation labs.',
|
||||
heroTags: ['STEM labs', 'Robotics clubs', 'Innovation programs', 'Research'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/education-hero.jpg',
|
||||
alt: 'Humanoid research robot in a UAE STEM lab',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: 'Open SDK', label: 'Programmable' },
|
||||
{ value: 'Humanoid', label: 'G1 / H1' },
|
||||
@ -567,8 +592,12 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
security: {
|
||||
heroTitle: 'Autonomous patrol and inspection robots.',
|
||||
heroSubtitle:
|
||||
'Quadruped robots with infrared thermography, LiDAR, and AI vision that patrol, inspect, and monitor critical UAE facilities — 24/7 with zero downtime.',
|
||||
heroTags: ['Patrol', 'Thermal imaging', 'LiDAR + AI vision', '24/7'],
|
||||
'Quadruped robots with thermal imaging, LiDAR, and AI vision that walk routine patrol and inspection routes across critical UAE facilities — consistently and on schedule.',
|
||||
heroTags: ['Patrol', 'Thermal imaging', 'LiDAR + AI vision', 'Continuous'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/security-surveillance-hero.jpg',
|
||||
alt: 'Quadruped robot on autonomous patrol in a UAE industrial site',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: '90%', label: 'Complex terrain covered' },
|
||||
{ value: '40kg', label: 'Sustained payload' },
|
||||
@ -678,6 +707,10 @@ export const INDUSTRY_PAGES: Record<string, IndustryPageContent> = {
|
||||
heroSubtitle:
|
||||
'Inspection, transport, and monitoring robots that scale repetitive work across UAE logistics sites and industrial facilities — thermal vision, LiDAR, and AI route planning.',
|
||||
heroTags: ['Aisle inspection', 'Thermal + LiDAR', 'AI patrols', 'Cloud fleet'],
|
||||
heroImage: {
|
||||
src: '/industries/pages/warehouses-logistics-hero.png',
|
||||
alt: 'Industrial inspection robot in a UAE warehouse facility',
|
||||
},
|
||||
proofPoints: [
|
||||
{ value: '90%', label: 'Terrain coverage' },
|
||||
{ value: '40cm', label: 'Obstacle clearance' },
|
||||
|
||||