diff --git a/public/icon-192-maskable.png b/public/icon-192-maskable.png deleted file mode 100644 index 3a0fd07..0000000 Binary files a/public/icon-192-maskable.png and /dev/null differ diff --git a/public/icon-192-maskable.webp b/public/icon-192-maskable.webp new file mode 100644 index 0000000..7925fcf Binary files /dev/null and b/public/icon-192-maskable.webp differ diff --git a/public/icon-192.png b/public/icon-192.png deleted file mode 100644 index b216c08..0000000 Binary files a/public/icon-192.png and /dev/null differ diff --git a/public/icon-192.webp b/public/icon-192.webp new file mode 100644 index 0000000..45bb834 Binary files /dev/null and b/public/icon-192.webp differ diff --git a/public/icon-512-maskable.png b/public/icon-512-maskable.png deleted file mode 100644 index badfd6c..0000000 Binary files a/public/icon-512-maskable.png and /dev/null differ diff --git a/public/icon-512-maskable.webp b/public/icon-512-maskable.webp new file mode 100644 index 0000000..e96e889 Binary files /dev/null and b/public/icon-512-maskable.webp differ diff --git a/public/icon-512.png b/public/icon-512.png deleted file mode 100644 index c7ab6d3..0000000 Binary files a/public/icon-512.png and /dev/null differ diff --git a/public/icon-512.webp b/public/icon-512.webp new file mode 100644 index 0000000..c847a1b Binary files /dev/null and b/public/icon-512.webp differ diff --git a/public/images/accessories/pudu-conveyor-single-layer.png b/public/images/accessories/pudu-conveyor-single-layer.png deleted file mode 100644 index 5d75a94..0000000 Binary files a/public/images/accessories/pudu-conveyor-single-layer.png and /dev/null differ diff --git a/public/images/accessories/pudu-conveyor-single-layer.webp b/public/images/accessories/pudu-conveyor-single-layer.webp new file mode 100644 index 0000000..e958ff9 Binary files /dev/null and b/public/images/accessories/pudu-conveyor-single-layer.webp differ diff --git a/public/images/accessories/pudu-elevator-control-module.png b/public/images/accessories/pudu-elevator-control-module.png deleted file mode 100644 index 8db0f77..0000000 Binary files a/public/images/accessories/pudu-elevator-control-module.png and /dev/null differ diff --git a/public/images/accessories/pudu-elevator-control-module.webp b/public/images/accessories/pudu-elevator-control-module.webp new file mode 100644 index 0000000..883b1fa Binary files /dev/null and b/public/images/accessories/pudu-elevator-control-module.webp differ diff --git a/public/images/accessories/pudu-gate-control-module.png b/public/images/accessories/pudu-gate-control-module.png deleted file mode 100644 index 6c7741d..0000000 Binary files a/public/images/accessories/pudu-gate-control-module.png and /dev/null differ diff --git a/public/images/accessories/pudu-gate-control-module.webp b/public/images/accessories/pudu-gate-control-module.webp new file mode 100644 index 0000000..aedec04 Binary files /dev/null and b/public/images/accessories/pudu-gate-control-module.webp differ diff --git a/public/images/accessories/pudu-mobile-water-station.png b/public/images/accessories/pudu-mobile-water-station.png deleted file mode 100644 index 252ed1a..0000000 Binary files a/public/images/accessories/pudu-mobile-water-station.png and /dev/null differ diff --git a/public/images/accessories/pudu-mobile-water-station.webp b/public/images/accessories/pudu-mobile-water-station.webp new file mode 100644 index 0000000..e149a54 Binary files /dev/null and b/public/images/accessories/pudu-mobile-water-station.webp differ diff --git a/public/images/accessories/pudu-pager.png b/public/images/accessories/pudu-pager.png deleted file mode 100644 index 9743507..0000000 Binary files a/public/images/accessories/pudu-pager.png and /dev/null differ diff --git a/public/images/accessories/pudu-pager.webp b/public/images/accessories/pudu-pager.webp new file mode 100644 index 0000000..9e268f0 Binary files /dev/null and b/public/images/accessories/pudu-pager.webp differ diff --git a/public/images/accessories/pudu-protection-case.png b/public/images/accessories/pudu-protection-case.png deleted file mode 100644 index 39a1c0d..0000000 Binary files a/public/images/accessories/pudu-protection-case.png and /dev/null differ diff --git a/public/images/accessories/pudu-protection-case.webp b/public/images/accessories/pudu-protection-case.webp new file mode 100644 index 0000000..fb562eb Binary files /dev/null and b/public/images/accessories/pudu-protection-case.webp differ diff --git a/public/images/accessories/pudu-reflective-post.png b/public/images/accessories/pudu-reflective-post.png deleted file mode 100644 index 30cb0e7..0000000 Binary files a/public/images/accessories/pudu-reflective-post.png and /dev/null differ diff --git a/public/images/accessories/pudu-reflective-post.webp b/public/images/accessories/pudu-reflective-post.webp new file mode 100644 index 0000000..f23b609 Binary files /dev/null and b/public/images/accessories/pudu-reflective-post.webp differ diff --git a/public/images/accessories/pudu-retractable-tray-baffle.png b/public/images/accessories/pudu-retractable-tray-baffle.png deleted file mode 100644 index 57ef7ad..0000000 Binary files a/public/images/accessories/pudu-retractable-tray-baffle.png and /dev/null differ diff --git a/public/images/accessories/pudu-retractable-tray-baffle.webp b/public/images/accessories/pudu-retractable-tray-baffle.webp new file mode 100644 index 0000000..dd2a9a5 Binary files /dev/null and b/public/images/accessories/pudu-retractable-tray-baffle.webp differ diff --git a/public/images/accessories/pudu-self-cleaning-dock.png b/public/images/accessories/pudu-self-cleaning-dock.png deleted file mode 100644 index 442435f..0000000 Binary files a/public/images/accessories/pudu-self-cleaning-dock.png and /dev/null differ diff --git a/public/images/accessories/pudu-self-cleaning-dock.webp b/public/images/accessories/pudu-self-cleaning-dock.webp new file mode 100644 index 0000000..a0ad057 Binary files /dev/null and b/public/images/accessories/pudu-self-cleaning-dock.webp differ diff --git a/public/images/accessories/unitree-d1-t.jpg b/public/images/accessories/unitree-d1-t.jpg deleted file mode 100644 index 0aa406a..0000000 Binary files a/public/images/accessories/unitree-d1-t.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-d1-t.png b/public/images/accessories/unitree-d1-t.png deleted file mode 100644 index 069120b..0000000 Binary files a/public/images/accessories/unitree-d1-t.png and /dev/null differ diff --git a/public/images/accessories/unitree-d1-t.webp b/public/images/accessories/unitree-d1-t.webp new file mode 100644 index 0000000..881803e Binary files /dev/null and b/public/images/accessories/unitree-d1-t.webp differ diff --git a/public/images/accessories/unitree-dex1-1.png b/public/images/accessories/unitree-dex1-1.png deleted file mode 100644 index fafef2b..0000000 Binary files a/public/images/accessories/unitree-dex1-1.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex1-1.webp b/public/images/accessories/unitree-dex1-1.webp new file mode 100644 index 0000000..10aa277 Binary files /dev/null and b/public/images/accessories/unitree-dex1-1.webp differ diff --git a/public/images/accessories/unitree-dex1-1/diagram.png b/public/images/accessories/unitree-dex1-1/diagram.png deleted file mode 100644 index 9f2273e..0000000 Binary files a/public/images/accessories/unitree-dex1-1/diagram.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex1-1/diagram.webp b/public/images/accessories/unitree-dex1-1/diagram.webp new file mode 100644 index 0000000..2c229b0 Binary files /dev/null and b/public/images/accessories/unitree-dex1-1/diagram.webp differ diff --git a/public/images/accessories/unitree-dex2-5.jpg b/public/images/accessories/unitree-dex2-5.jpg deleted file mode 100644 index 0daf407..0000000 Binary files a/public/images/accessories/unitree-dex2-5.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-dex2-5.webp b/public/images/accessories/unitree-dex2-5.webp new file mode 100644 index 0000000..5cf43ed Binary files /dev/null and b/public/images/accessories/unitree-dex2-5.webp differ diff --git a/public/images/accessories/unitree-dex3-1.jpg b/public/images/accessories/unitree-dex3-1.jpg deleted file mode 100644 index 2f09d72..0000000 Binary files a/public/images/accessories/unitree-dex3-1.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1.png b/public/images/accessories/unitree-dex5-1.png deleted file mode 100644 index 63f9368..0000000 Binary files a/public/images/accessories/unitree-dex5-1.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1.webp b/public/images/accessories/unitree-dex5-1.webp new file mode 100644 index 0000000..f77db20 Binary files /dev/null and b/public/images/accessories/unitree-dex5-1.webp differ diff --git a/public/images/accessories/unitree-dex5-1/hero.png b/public/images/accessories/unitree-dex5-1/hero.png deleted file mode 100644 index 63f9368..0000000 Binary files a/public/images/accessories/unitree-dex5-1/hero.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1/hero.webp b/public/images/accessories/unitree-dex5-1/hero.webp new file mode 100644 index 0000000..f77db20 Binary files /dev/null and b/public/images/accessories/unitree-dex5-1/hero.webp differ diff --git a/public/images/accessories/unitree-dex5-1/params.png b/public/images/accessories/unitree-dex5-1/params.png deleted file mode 100644 index 2353fff..0000000 Binary files a/public/images/accessories/unitree-dex5-1/params.png and /dev/null differ diff --git a/public/images/accessories/unitree-dex5-1/params.webp b/public/images/accessories/unitree-dex5-1/params.webp new file mode 100644 index 0000000..ad13f2c Binary files /dev/null and b/public/images/accessories/unitree-dex5-1/params.webp differ diff --git a/public/images/accessories/unitree-l2.jpg b/public/images/accessories/unitree-l2.jpg deleted file mode 100644 index 6780b88..0000000 Binary files a/public/images/accessories/unitree-l2.jpg and /dev/null differ diff --git a/public/images/accessories/unitree-z1.png b/public/images/accessories/unitree-z1.png deleted file mode 100644 index 6618c4a..0000000 Binary files a/public/images/accessories/unitree-z1.png and /dev/null differ diff --git a/public/images/accessories/unitree-z1.webp b/public/images/accessories/unitree-z1.webp new file mode 100644 index 0000000..7682cf1 Binary files /dev/null and b/public/images/accessories/unitree-z1.webp differ diff --git a/public/images/brands/ys-lootah-robotics-logo.png b/public/images/brands/ys-lootah-robotics-logo.png deleted file mode 100644 index f21914e..0000000 Binary files a/public/images/brands/ys-lootah-robotics-logo.png and /dev/null differ diff --git a/public/images/brands/ys-lootah-robotics-logo.webp b/public/images/brands/ys-lootah-robotics-logo.webp new file mode 100644 index 0000000..83663c3 Binary files /dev/null and b/public/images/brands/ys-lootah-robotics-logo.webp differ diff --git a/public/images/robots/featured-bellabot-pro.png b/public/images/robots/featured-bellabot-pro.png deleted file mode 100644 index 295bece..0000000 Binary files a/public/images/robots/featured-bellabot-pro.png and /dev/null differ diff --git a/public/images/robots/featured-bellabot-pro.webp b/public/images/robots/featured-bellabot-pro.webp new file mode 100644 index 0000000..d16790c Binary files /dev/null and b/public/images/robots/featured-bellabot-pro.webp differ diff --git a/public/images/robots/featured-go2.png b/public/images/robots/featured-go2.png deleted file mode 100644 index b5a5eb9..0000000 Binary files a/public/images/robots/featured-go2.png and /dev/null differ diff --git a/public/images/robots/featured-go2.webp b/public/images/robots/featured-go2.webp new file mode 100644 index 0000000..75ef17a Binary files /dev/null and b/public/images/robots/featured-go2.webp differ diff --git a/public/images/robots/pudu-bellabot.png b/public/images/robots/pudu-bellabot.png deleted file mode 100644 index 4beb03c..0000000 Binary files a/public/images/robots/pudu-bellabot.png and /dev/null differ diff --git a/public/images/robots/pudu-bellabot.webp b/public/images/robots/pudu-bellabot.webp new file mode 100644 index 0000000..ea2de70 Binary files /dev/null and b/public/images/robots/pudu-bellabot.webp differ diff --git a/public/images/robots/pudu-cc1.png b/public/images/robots/pudu-cc1.png deleted file mode 100644 index a6e6c09..0000000 Binary files a/public/images/robots/pudu-cc1.png and /dev/null differ diff --git a/public/images/robots/pudu-cc1.webp b/public/images/robots/pudu-cc1.webp new file mode 100644 index 0000000..1042172 Binary files /dev/null and b/public/images/robots/pudu-cc1.webp differ diff --git a/public/images/robots/pudu-d7.png b/public/images/robots/pudu-d7.png deleted file mode 100644 index 6781874..0000000 Binary files a/public/images/robots/pudu-d7.png and /dev/null differ diff --git a/public/images/robots/pudu-d7.webp b/public/images/robots/pudu-d7.webp new file mode 100644 index 0000000..9a75d02 Binary files /dev/null and b/public/images/robots/pudu-d7.webp differ diff --git a/public/images/robots/pudu-d9.png b/public/images/robots/pudu-d9.png deleted file mode 100644 index e4cdec7..0000000 Binary files a/public/images/robots/pudu-d9.png and /dev/null differ diff --git a/public/images/robots/pudu-d9.webp b/public/images/robots/pudu-d9.webp new file mode 100644 index 0000000..2eb9966 Binary files /dev/null and b/public/images/robots/pudu-d9.webp differ diff --git a/public/images/robots/pudu-flashbot-max.png b/public/images/robots/pudu-flashbot-max.png deleted file mode 100644 index 2c14fac..0000000 Binary files a/public/images/robots/pudu-flashbot-max.png and /dev/null differ diff --git a/public/images/robots/pudu-flashbot-max.webp b/public/images/robots/pudu-flashbot-max.webp new file mode 100644 index 0000000..c829a40 Binary files /dev/null and b/public/images/robots/pudu-flashbot-max.webp differ diff --git a/public/images/robots/pudu-flashbot.png b/public/images/robots/pudu-flashbot.png deleted file mode 100644 index d358c0e..0000000 Binary files a/public/images/robots/pudu-flashbot.png and /dev/null differ diff --git a/public/images/robots/pudu-flashbot.webp b/public/images/robots/pudu-flashbot.webp new file mode 100644 index 0000000..172b4bc Binary files /dev/null and b/public/images/robots/pudu-flashbot.webp differ diff --git a/public/images/robots/pudu-holabot.png b/public/images/robots/pudu-holabot.png deleted file mode 100644 index 17b8ef6..0000000 Binary files a/public/images/robots/pudu-holabot.png and /dev/null differ diff --git a/public/images/robots/pudu-holabot.webp b/public/images/robots/pudu-holabot.webp new file mode 100644 index 0000000..17f0ee9 Binary files /dev/null and b/public/images/robots/pudu-holabot.webp differ diff --git a/public/images/robots/pudu-kettybot.png b/public/images/robots/pudu-kettybot.png deleted file mode 100644 index 17cacac..0000000 Binary files a/public/images/robots/pudu-kettybot.png and /dev/null differ diff --git a/public/images/robots/pudu-kettybot.webp b/public/images/robots/pudu-kettybot.webp new file mode 100644 index 0000000..b105d86 Binary files /dev/null and b/public/images/robots/pudu-kettybot.webp differ diff --git a/public/images/robots/pudu-mt1.png b/public/images/robots/pudu-mt1.png deleted file mode 100644 index 6e49ca5..0000000 Binary files a/public/images/robots/pudu-mt1.png and /dev/null differ diff --git a/public/images/robots/pudu-mt1.webp b/public/images/robots/pudu-mt1.webp new file mode 100644 index 0000000..030aab2 Binary files /dev/null and b/public/images/robots/pudu-mt1.webp differ diff --git a/public/images/robots/pudu-pudubot2.png b/public/images/robots/pudu-pudubot2.png deleted file mode 100644 index 9d85e77..0000000 Binary files a/public/images/robots/pudu-pudubot2.png and /dev/null differ diff --git a/public/images/robots/pudu-pudubot2.webp b/public/images/robots/pudu-pudubot2.webp new file mode 100644 index 0000000..74c41f4 Binary files /dev/null and b/public/images/robots/pudu-pudubot2.webp differ diff --git a/public/images/robots/pudu-sh1.png b/public/images/robots/pudu-sh1.png deleted file mode 100644 index ab148ae..0000000 Binary files a/public/images/robots/pudu-sh1.png and /dev/null differ diff --git a/public/images/robots/pudu-sh1.webp b/public/images/robots/pudu-sh1.webp new file mode 100644 index 0000000..28de4b2 Binary files /dev/null and b/public/images/robots/pudu-sh1.webp differ diff --git a/public/images/robots/pudu-t300.png b/public/images/robots/pudu-t300.png deleted file mode 100644 index ebfa206..0000000 Binary files a/public/images/robots/pudu-t300.png and /dev/null differ diff --git a/public/images/robots/pudu-t300.webp b/public/images/robots/pudu-t300.webp new file mode 100644 index 0000000..7b77220 Binary files /dev/null and b/public/images/robots/pudu-t300.webp differ diff --git a/public/images/robots/unitree-a1.png b/public/images/robots/unitree-a1.png deleted file mode 100644 index 7e4f05a..0000000 Binary files a/public/images/robots/unitree-a1.png and /dev/null differ diff --git a/public/images/robots/unitree-a1.webp b/public/images/robots/unitree-a1.webp new file mode 100644 index 0000000..50973e1 Binary files /dev/null and b/public/images/robots/unitree-a1.webp differ diff --git a/public/images/robots/unitree-a2-w.jpg b/public/images/robots/unitree-a2-w.jpg deleted file mode 100644 index 33df967..0000000 Binary files a/public/images/robots/unitree-a2-w.jpg and /dev/null differ diff --git a/public/images/robots/unitree-a2-w.webp b/public/images/robots/unitree-a2-w.webp new file mode 100644 index 0000000..0fe437c Binary files /dev/null and b/public/images/robots/unitree-a2-w.webp differ diff --git a/public/images/robots/unitree-a2.png b/public/images/robots/unitree-a2.png deleted file mode 100644 index 53b0c93..0000000 Binary files a/public/images/robots/unitree-a2.png and /dev/null differ diff --git a/public/images/robots/unitree-a2.webp b/public/images/robots/unitree-a2.webp new file mode 100644 index 0000000..ac9ad04 Binary files /dev/null and b/public/images/robots/unitree-a2.webp differ diff --git a/public/images/robots/unitree-aliengo.png b/public/images/robots/unitree-aliengo.png deleted file mode 100644 index 1c4af18..0000000 Binary files a/public/images/robots/unitree-aliengo.png and /dev/null differ diff --git a/public/images/robots/unitree-aliengo.webp b/public/images/robots/unitree-aliengo.webp new file mode 100644 index 0000000..736550f Binary files /dev/null and b/public/images/robots/unitree-aliengo.webp differ diff --git a/public/images/robots/unitree-as2.png b/public/images/robots/unitree-as2.png deleted file mode 100644 index 7629eaa..0000000 Binary files a/public/images/robots/unitree-as2.png and /dev/null differ diff --git a/public/images/robots/unitree-as2.webp b/public/images/robots/unitree-as2.webp new file mode 100644 index 0000000..093abef Binary files /dev/null and b/public/images/robots/unitree-as2.webp differ diff --git a/public/images/robots/unitree-b1.png b/public/images/robots/unitree-b1.png deleted file mode 100644 index 8bf7600..0000000 Binary files a/public/images/robots/unitree-b1.png and /dev/null differ diff --git a/public/images/robots/unitree-b1.webp b/public/images/robots/unitree-b1.webp new file mode 100644 index 0000000..0da41c8 Binary files /dev/null and b/public/images/robots/unitree-b1.webp differ diff --git a/public/images/robots/unitree-b2-w.jpg b/public/images/robots/unitree-b2-w.jpg deleted file mode 100644 index 2f5cae7..0000000 Binary files a/public/images/robots/unitree-b2-w.jpg and /dev/null differ diff --git a/public/images/robots/unitree-b2-w.webp b/public/images/robots/unitree-b2-w.webp new file mode 100644 index 0000000..7060beb Binary files /dev/null and b/public/images/robots/unitree-b2-w.webp differ diff --git a/public/images/robots/unitree-b2.png b/public/images/robots/unitree-b2.png deleted file mode 100644 index f9fb8c4..0000000 Binary files a/public/images/robots/unitree-b2.png and /dev/null differ diff --git a/public/images/robots/unitree-b2.webp b/public/images/robots/unitree-b2.webp new file mode 100644 index 0000000..c4b7b2b Binary files /dev/null and b/public/images/robots/unitree-b2.webp differ diff --git a/public/images/robots/unitree-g1.png b/public/images/robots/unitree-g1.png deleted file mode 100644 index 07d8373..0000000 Binary files a/public/images/robots/unitree-g1.png and /dev/null differ diff --git a/public/images/robots/unitree-g1.webp b/public/images/robots/unitree-g1.webp new file mode 100644 index 0000000..b76f3ff Binary files /dev/null and b/public/images/robots/unitree-g1.webp differ diff --git a/public/images/robots/unitree-go1.png b/public/images/robots/unitree-go1.png deleted file mode 100644 index 0f3b075..0000000 Binary files a/public/images/robots/unitree-go1.png and /dev/null differ diff --git a/public/images/robots/unitree-go1.webp b/public/images/robots/unitree-go1.webp new file mode 100644 index 0000000..02c17a3 Binary files /dev/null and b/public/images/robots/unitree-go1.webp differ diff --git a/public/images/robots/unitree-go2.png b/public/images/robots/unitree-go2.png deleted file mode 100644 index e8a3b61..0000000 Binary files a/public/images/robots/unitree-go2.png and /dev/null differ diff --git a/public/images/robots/unitree-go2.webp b/public/images/robots/unitree-go2.webp new file mode 100644 index 0000000..409a783 Binary files /dev/null and b/public/images/robots/unitree-go2.webp differ diff --git a/public/images/robots/unitree-h1.jpg b/public/images/robots/unitree-h1.jpg deleted file mode 100644 index 423e398..0000000 Binary files a/public/images/robots/unitree-h1.jpg and /dev/null differ diff --git a/public/images/robots/unitree-h1.webp b/public/images/robots/unitree-h1.webp new file mode 100644 index 0000000..87b47de Binary files /dev/null and b/public/images/robots/unitree-h1.webp differ diff --git a/public/images/robots/unitree-h2.png b/public/images/robots/unitree-h2.png deleted file mode 100644 index 30ffccd..0000000 Binary files a/public/images/robots/unitree-h2.png and /dev/null differ diff --git a/public/images/robots/unitree-h2.webp b/public/images/robots/unitree-h2.webp new file mode 100644 index 0000000..a5bea67 Binary files /dev/null and b/public/images/robots/unitree-h2.webp differ diff --git a/public/images/robots/unitree-r1.png b/public/images/robots/unitree-r1.png deleted file mode 100644 index 089de12..0000000 Binary files a/public/images/robots/unitree-r1.png and /dev/null differ diff --git a/public/images/robots/unitree-r1.webp b/public/images/robots/unitree-r1.webp new file mode 100644 index 0000000..e6c3223 Binary files /dev/null and b/public/images/robots/unitree-r1.webp differ diff --git a/public/images/robots/unitree/b2-shop-1.jpg b/public/images/robots/unitree/b2-shop-1.jpg deleted file mode 100644 index e155bc4..0000000 Binary files a/public/images/robots/unitree/b2-shop-1.jpg and /dev/null differ diff --git a/public/images/robots/unitree/b2-shop-1.webp b/public/images/robots/unitree/b2-shop-1.webp new file mode 100644 index 0000000..9e69fca Binary files /dev/null and b/public/images/robots/unitree/b2-shop-1.webp differ diff --git a/public/images/robots/unitree/g1-shop-1.jpg b/public/images/robots/unitree/g1-shop-1.jpg deleted file mode 100644 index 8a0af06..0000000 Binary files a/public/images/robots/unitree/g1-shop-1.jpg and /dev/null differ diff --git a/public/images/robots/unitree/g1-shop-1.webp b/public/images/robots/unitree/g1-shop-1.webp new file mode 100644 index 0000000..7de27c2 Binary files /dev/null and b/public/images/robots/unitree/g1-shop-1.webp differ diff --git a/public/images/robots/unitree/go2-shop-2.png b/public/images/robots/unitree/go2-shop-2.png deleted file mode 100644 index ae3e23d..0000000 Binary files a/public/images/robots/unitree/go2-shop-2.png and /dev/null differ diff --git a/public/images/robots/unitree/go2-shop-2.webp b/public/images/robots/unitree/go2-shop-2.webp new file mode 100644 index 0000000..1bd9e13 Binary files /dev/null and b/public/images/robots/unitree/go2-shop-2.webp differ diff --git a/public/industries/cards/security-surveillance.jpg b/public/industries/cards/security-surveillance.jpg deleted file mode 100644 index a9d3093..0000000 Binary files a/public/industries/cards/security-surveillance.jpg and /dev/null differ diff --git a/public/industries/cards/security-surveillance.webp b/public/industries/cards/security-surveillance.webp new file mode 100644 index 0000000..71bbaec Binary files /dev/null and b/public/industries/cards/security-surveillance.webp differ diff --git a/public/industries/unitree/ai-patrol.jpg b/public/industries/unitree/ai-patrol.jpg deleted file mode 100644 index b4cb1a2..0000000 Binary files a/public/industries/unitree/ai-patrol.jpg and /dev/null differ diff --git a/public/industries/unitree/ai-patrol.webp b/public/industries/unitree/ai-patrol.webp new file mode 100644 index 0000000..0983d98 Binary files /dev/null and b/public/industries/unitree/ai-patrol.webp differ diff --git a/public/industries/unitree/analytics.jpg b/public/industries/unitree/analytics.jpg deleted file mode 100644 index 1eb804d..0000000 Binary files a/public/industries/unitree/analytics.jpg and /dev/null differ diff --git a/public/industries/unitree/analytics.webp b/public/industries/unitree/analytics.webp new file mode 100644 index 0000000..dd4c737 Binary files /dev/null and b/public/industries/unitree/analytics.webp differ diff --git a/public/industries/unitree/b2-render.png b/public/industries/unitree/b2-render.png deleted file mode 100644 index ada38b8..0000000 Binary files a/public/industries/unitree/b2-render.png and /dev/null differ diff --git a/public/industries/unitree/b2-render.webp b/public/industries/unitree/b2-render.webp new file mode 100644 index 0000000..de04706 Binary files /dev/null and b/public/industries/unitree/b2-render.webp differ diff --git a/public/industries/unitree/cloud.jpg b/public/industries/unitree/cloud.jpg deleted file mode 100644 index 9080815..0000000 Binary files a/public/industries/unitree/cloud.jpg and /dev/null differ diff --git a/public/industries/unitree/cloud.webp b/public/industries/unitree/cloud.webp new file mode 100644 index 0000000..5b4fefb Binary files /dev/null and b/public/industries/unitree/cloud.webp differ diff --git a/public/industries/unitree/cost-efficiency.jpg b/public/industries/unitree/cost-efficiency.jpg deleted file mode 100644 index 9eb2c05..0000000 Binary files a/public/industries/unitree/cost-efficiency.jpg and /dev/null differ diff --git a/public/industries/unitree/cost-efficiency.webp b/public/industries/unitree/cost-efficiency.webp new file mode 100644 index 0000000..4567e2c Binary files /dev/null and b/public/industries/unitree/cost-efficiency.webp differ diff --git a/public/industries/unitree/digital-twin.jpg b/public/industries/unitree/digital-twin.jpg deleted file mode 100644 index 738e1d0..0000000 Binary files a/public/industries/unitree/digital-twin.jpg and /dev/null differ diff --git a/public/industries/unitree/digital-twin.webp b/public/industries/unitree/digital-twin.webp new file mode 100644 index 0000000..44494a7 Binary files /dev/null and b/public/industries/unitree/digital-twin.webp differ diff --git a/public/industries/unitree/endurance.jpg b/public/industries/unitree/endurance.jpg deleted file mode 100644 index ec81d8f..0000000 Binary files a/public/industries/unitree/endurance.jpg and /dev/null differ diff --git a/public/industries/unitree/endurance.webp b/public/industries/unitree/endurance.webp new file mode 100644 index 0000000..4868498 Binary files /dev/null and b/public/industries/unitree/endurance.webp differ diff --git a/public/industries/unitree/flight-path.jpg b/public/industries/unitree/flight-path.jpg deleted file mode 100644 index 686e3dc..0000000 Binary files a/public/industries/unitree/flight-path.jpg and /dev/null differ diff --git a/public/industries/unitree/flight-path.webp b/public/industries/unitree/flight-path.webp new file mode 100644 index 0000000..f61ff1d Binary files /dev/null and b/public/industries/unitree/flight-path.webp differ diff --git a/public/industries/unitree/go2-render.png b/public/industries/unitree/go2-render.png deleted file mode 100644 index e4d9f4c..0000000 Binary files a/public/industries/unitree/go2-render.png and /dev/null differ diff --git a/public/industries/unitree/go2-render.webp b/public/industries/unitree/go2-render.webp new file mode 100644 index 0000000..b25d4c0 Binary files /dev/null and b/public/industries/unitree/go2-render.webp differ diff --git a/public/industries/unitree/industrial-park.jpg b/public/industries/unitree/industrial-park.jpg deleted file mode 100644 index 5d4cdfa..0000000 Binary files a/public/industries/unitree/industrial-park.jpg and /dev/null differ diff --git a/public/industries/unitree/industrial-park.webp b/public/industries/unitree/industrial-park.webp new file mode 100644 index 0000000..c734d41 Binary files /dev/null and b/public/industries/unitree/industrial-park.webp differ diff --git a/public/industries/unitree/modular.jpg b/public/industries/unitree/modular.jpg deleted file mode 100644 index 740269b..0000000 Binary files a/public/industries/unitree/modular.jpg and /dev/null differ diff --git a/public/industries/unitree/modular.webp b/public/industries/unitree/modular.webp new file mode 100644 index 0000000..b67cfcb Binary files /dev/null and b/public/industries/unitree/modular.webp differ diff --git a/public/industries/unitree/patrol-system.png b/public/industries/unitree/patrol-system.png deleted file mode 100644 index 446968f..0000000 Binary files a/public/industries/unitree/patrol-system.png and /dev/null differ diff --git a/public/industries/unitree/patrol-system.webp b/public/industries/unitree/patrol-system.webp new file mode 100644 index 0000000..4d509a4 Binary files /dev/null and b/public/industries/unitree/patrol-system.webp differ diff --git a/public/industries/unitree/pipeline.jpg b/public/industries/unitree/pipeline.jpg deleted file mode 100644 index 92331f8..0000000 Binary files a/public/industries/unitree/pipeline.jpg and /dev/null differ diff --git a/public/industries/unitree/pipeline.webp b/public/industries/unitree/pipeline.webp new file mode 100644 index 0000000..c5cf1dc Binary files /dev/null and b/public/industries/unitree/pipeline.webp differ diff --git a/public/industries/unitree/quad-render.png b/public/industries/unitree/quad-render.png deleted file mode 100644 index b68f8b4..0000000 Binary files a/public/industries/unitree/quad-render.png and /dev/null differ diff --git a/public/industries/unitree/quad-render.webp b/public/industries/unitree/quad-render.webp new file mode 100644 index 0000000..9dc230b Binary files /dev/null and b/public/industries/unitree/quad-render.webp differ diff --git a/public/industries/unitree/sensor-overview.png b/public/industries/unitree/sensor-overview.png deleted file mode 100644 index 127f839..0000000 Binary files a/public/industries/unitree/sensor-overview.png and /dev/null differ diff --git a/public/industries/unitree/sensor-overview.webp b/public/industries/unitree/sensor-overview.webp new file mode 100644 index 0000000..d200526 Binary files /dev/null and b/public/industries/unitree/sensor-overview.webp differ diff --git a/public/industries/unitree/substation.jpg b/public/industries/unitree/substation.jpg deleted file mode 100644 index 353d298..0000000 Binary files a/public/industries/unitree/substation.jpg and /dev/null differ diff --git a/public/industries/unitree/substation.webp b/public/industries/unitree/substation.webp new file mode 100644 index 0000000..25cefff Binary files /dev/null and b/public/industries/unitree/substation.webp differ diff --git a/public/industries/unitree/terrain-day.jpg b/public/industries/unitree/terrain-day.jpg deleted file mode 100644 index 2ee10a9..0000000 Binary files a/public/industries/unitree/terrain-day.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain-day.webp b/public/industries/unitree/terrain-day.webp new file mode 100644 index 0000000..7dd3918 Binary files /dev/null and b/public/industries/unitree/terrain-day.webp differ diff --git a/public/industries/unitree/terrain-night.jpg b/public/industries/unitree/terrain-night.jpg deleted file mode 100644 index 4037866..0000000 Binary files a/public/industries/unitree/terrain-night.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain-night.webp b/public/industries/unitree/terrain-night.webp new file mode 100644 index 0000000..8687792 Binary files /dev/null and b/public/industries/unitree/terrain-night.webp differ diff --git a/public/industries/unitree/terrain.jpg b/public/industries/unitree/terrain.jpg deleted file mode 100644 index 72950dd..0000000 Binary files a/public/industries/unitree/terrain.jpg and /dev/null differ diff --git a/public/industries/unitree/terrain.webp b/public/industries/unitree/terrain.webp new file mode 100644 index 0000000..209a0f5 Binary files /dev/null and b/public/industries/unitree/terrain.webp differ diff --git a/public/industries/unitree/utility-room.jpg b/public/industries/unitree/utility-room.jpg deleted file mode 100644 index a12637a..0000000 Binary files a/public/industries/unitree/utility-room.jpg and /dev/null differ diff --git a/public/industries/unitree/utility-room.webp b/public/industries/unitree/utility-room.webp new file mode 100644 index 0000000..cdfa466 Binary files /dev/null and b/public/industries/unitree/utility-room.webp differ diff --git a/scripts/convert-to-webp.mjs b/scripts/convert-to-webp.mjs new file mode 100644 index 0000000..6f83087 --- /dev/null +++ b/scripts/convert-to-webp.mjs @@ -0,0 +1,74 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import sharp from 'sharp'; + +const ROOT = path.resolve('public'); +// Files NOT to touch +const SKIP = new Set(['favicon.ico', 'apple-touch-icon.png', 'icon.png', 'apple-icon.png']); +const SKIP_EXACT_PATHS = new Set([ + 'public/favicon.ico', + 'public/apple-touch-icon.png', +]); + +const exts = new Set(['.jpg', '.jpeg', '.png', '.gif']); +const results = { converted: 0, savedBytes: 0, skipped: 0, failed: 0 }; + +async function walk(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const e of entries) { + const p = path.join(dir, e.name); + if (e.isDirectory()) { + await walk(p); + } else if (exts.has(path.extname(p).toLowerCase())) { + await convert(p); + } + } +} + +async function convert(input) { + const ext = path.extname(input).toLowerCase(); + const base = input.slice(0, -ext.length); + const output = base + '.webp'; + const relRoot = path.relative(process.cwd(), input).split(path.sep).join('/'); + if (SKIP.has(path.basename(input)) || SKIP_EXACT_PATHS.has(relRoot)) { + results.skipped++; + console.log(`SKIP ${relRoot}`); + return; + } + try { + const stIn = await fs.stat(input); + // Output options per type + const isPng = ext === '.png'; + const isGif = ext === '.gif'; + const opts = isPng + ? { quality: 86, alphaQuality: 90, effort: 5, nearLossless: false } + : isGif + ? { quality: 80, effort: 5, loop: 0 } // animated -> animated webp + : { quality: 82, effort: 5 }; + let pipeline = sharp(input, { animated: isGif }); + await pipeline.webp(opts).toFile(output); + const stOut = await fs.stat(output); + if (stOut.size >= stIn.size) { + // worse than original — keep original, remove webp + await fs.unlink(output); + results.skipped++; + console.log(`KEEP ${relRoot} (webp larger: ${stOut.size} vs ${stIn.size})`); + return; + } + await fs.unlink(input); + results.converted++; + results.savedBytes += stIn.size - stOut.size; + const inKB = (stIn.size / 1024).toFixed(0); + const outKB = (stOut.size / 1024).toFixed(0); + console.log(`OK ${relRoot} ${inKB}KB -> ${outKB}KB`); + } catch (err) { + results.failed++; + console.log(`FAIL ${relRoot}: ${err.message}`); + } +} + +await walk(ROOT); +const savedMB = (results.savedBytes / 1024 / 1024).toFixed(2); +console.log('\n---'); +console.log(`converted: ${results.converted} skipped: ${results.skipped} failed: ${results.failed}`); +console.log(`saved: ${savedMB} MB`); diff --git a/scripts/fix-image-refs.mjs b/scripts/fix-image-refs.mjs new file mode 100644 index 0000000..3c86613 --- /dev/null +++ b/scripts/fix-image-refs.mjs @@ -0,0 +1,70 @@ +import { promises as fs } from 'node:fs'; +import path from 'node:path'; + +// Build map: relative path that ORIGINALLY existed but now only has .webp +// Walk /public for .webp files, compute their candidate original ext (.jpg/.png/.gif) +// If the candidate no longer exists on disk, that's a swap target. + +const PUBLIC_ROOT = path.resolve('public'); +const SRC_ROOT = path.resolve('src'); + +async function walk(dir, out) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const e of entries) { + const p = path.join(dir, e.name); + if (e.isDirectory()) await walk(p, out); + else out.push(p); + } +} + +// 1. Find .webp files and detect which original ext is missing +const all = []; +await walk(PUBLIC_ROOT, all); +const webps = all.filter((p) => p.toLowerCase().endsWith('.webp')); +const existing = new Set(all.map((p) => p.toLowerCase())); + +const swaps = []; // { from: /images/foo.jpg, to: /images/foo.webp } +for (const wp of webps) { + const base = wp.slice(0, -5); // strip .webp + for (const ext of ['.jpg', '.jpeg', '.png', '.gif']) { + const candidate = base + ext; + if (!existing.has(candidate.toLowerCase())) { + // Candidate gone => it was converted + const rel = '/' + path.relative(PUBLIC_ROOT, candidate).split(path.sep).join('/'); + const relWebp = '/' + path.relative(PUBLIC_ROOT, wp).split(path.sep).join('/'); + swaps.push({ from: rel, to: relWebp }); + } + } +} + +console.log(`detected ${swaps.length} swap pairs`); + +// 2. Walk /src for ts/tsx/js/jsx/json/md/css and apply replacements +const srcExts = new Set(['.ts', '.tsx', '.js', '.jsx', '.json', '.md', '.css', '.html', '.mjs']); +const srcFiles = []; +await walk(SRC_ROOT, srcFiles); +const targets = srcFiles.filter((p) => srcExts.has(path.extname(p).toLowerCase())); + +let totalReplacements = 0; +let touchedFiles = 0; +for (const file of targets) { + let text = await fs.readFile(file, 'utf8'); + let count = 0; + for (const s of swaps) { + if (text.includes(s.from)) { + const before = text; + text = text.split(s.from).join(s.to); + const occurrences = (before.length - text.length) / (s.from.length - s.to.length); + count += occurrences; + } + } + if (count > 0) { + await fs.writeFile(file, text, 'utf8'); + totalReplacements += count; + touchedFiles++; + const rel = path.relative(process.cwd(), file).split(path.sep).join('/'); + console.log(`UPDATE ${rel} (${count} swaps)`); + } +} +console.log('---'); +console.log(`replaced ${totalReplacements} references across ${touchedFiles} files`); diff --git a/src/app/bu-sunaidah/page.tsx b/src/app/bu-sunaidah/page.tsx index 3e35d41..2421a1e 100644 --- a/src/app/bu-sunaidah/page.tsx +++ b/src/app/bu-sunaidah/page.tsx @@ -116,7 +116,7 @@ export default async function BuSunaidahPage() { {BU_SUNAIDAH_REEL == null ? (
Bu Sunaidah persona — reel preview YS Lootah Robotics logo YS Lootah Robotics logo = { description: 'Quadruped and humanoid robotics platforms available in the UAE through YS Lootah Robotics.', chips: ['Quadruped', 'Humanoid', 'Inspection', 'Research'], - primary: { src: '/images/robots/unitree-g1.png', alt: 'Unitree G1 humanoid robot' }, - secondary: { src: '/images/robots/unitree-go2.png', alt: 'Unitree Go2 quadruped robot' }, + primary: { src: '/images/robots/unitree-g1.webp', alt: 'Unitree G1 humanoid robot' }, + secondary: { src: '/images/robots/unitree-go2.webp', alt: 'Unitree Go2 quadruped robot' }, }, pudu: { logo: { src: '/brands/pudu-logo.svg', alt: 'Pudu Robotics logo', width: 121, height: 32 }, description: 'Service, delivery, cleaning, and hospitality robotics available in the UAE through YS Lootah Robotics.', chips: ['Service', 'Delivery', 'Cleaning', 'Hospitality'], - primary: { src: '/images/robots/pudu-bellabot.png', alt: 'Pudu BellaBot multi-tray delivery robot' }, - secondary: { src: '/images/robots/pudu-kettybot.png', alt: 'Pudu KettyBot Pro service robot with built-in advertising display' }, + primary: { src: '/images/robots/pudu-bellabot.webp', alt: 'Pudu BellaBot multi-tray delivery robot' }, + secondary: { src: '/images/robots/pudu-kettybot.webp', alt: 'Pudu KettyBot Pro service robot with built-in advertising display' }, }, }; diff --git a/src/components/robotics/ExclusiveAccessSection.tsx b/src/components/robotics/ExclusiveAccessSection.tsx index 419ecba..039eb1d 100644 --- a/src/components/robotics/ExclusiveAccessSection.tsx +++ b/src/components/robotics/ExclusiveAccessSection.tsx @@ -105,16 +105,16 @@ export function ExclusiveAccessSection() { brand="Unitree" tag="Quadruped · Humanoid" accent="#DEE0F0" - primary={{ src: '/images/robots/unitree-g1.png', alt: 'Unitree G1 humanoid robot' }} - secondary={{ src: '/images/robots/unitree-go2.png', alt: 'Unitree Go2 quadruped robot' }} + primary={{ src: '/images/robots/unitree-g1.webp', alt: 'Unitree G1 humanoid robot' }} + secondary={{ src: '/images/robots/unitree-go2.webp', alt: 'Unitree Go2 quadruped robot' }} /> diff --git a/src/components/robotics/FeaturedRobotsShowcase.tsx b/src/components/robotics/FeaturedRobotsShowcase.tsx index 39fb30a..a63eb9d 100644 --- a/src/components/robotics/FeaturedRobotsShowcase.tsx +++ b/src/components/robotics/FeaturedRobotsShowcase.tsx @@ -14,10 +14,10 @@ const ease = [0.16, 1, 0.3, 1] as const; /* unique exhibit visuals per slug — transparent renders for clean dark integration */ const FEATURED_IMG: Record = { - 'unitree-g1': '/images/robots/unitree-g1.png', - 'unitree-go2': '/images/robots/featured-go2.png', - 'pudu-bellabot': '/images/robots/featured-bellabot-pro.png', - 'pudu-kettybot': '/images/robots/pudu-kettybot.png', + 'unitree-g1': '/images/robots/unitree-g1.webp', + 'unitree-go2': '/images/robots/featured-go2.webp', + 'pudu-bellabot': '/images/robots/featured-bellabot-pro.webp', + 'pudu-kettybot': '/images/robots/pudu-kettybot.webp', }; const exhibitImg = (slug: string, fallback: string) => FEATURED_IMG[slug] ?? fallback; diff --git a/src/components/sections/robotics-scroll-showcase.tsx b/src/components/sections/robotics-scroll-showcase.tsx index d67a059..01b027b 100644 --- a/src/components/sections/robotics-scroll-showcase.tsx +++ b/src/components/sections/robotics-scroll-showcase.tsx @@ -15,21 +15,21 @@ const SHOWROOM_ROBOTS = [ { name: 'Unitree G1', slug: 'unitree-g1', - image: '/images/robots/unitree-g1.png', + image: '/images/robots/unitree-g1.webp', category: 'Humanoid', accent: '#DEE0F0', }, { name: 'Unitree Go2', slug: 'unitree-go2', - image: '/images/robots/unitree-go2.png', + image: '/images/robots/unitree-go2.webp', category: 'Quadruped', accent: '#D7DBEA', }, { name: 'Pudu BellaBot', slug: 'pudu-bellabot', - image: '/images/robots/pudu-bellabot.png', + image: '/images/robots/pudu-bellabot.webp', category: 'Delivery', accent: '#8891C7', }, diff --git a/src/data/accessories.ts b/src/data/accessories.ts index 23b3f75..780ebef 100644 --- a/src/data/accessories.ts +++ b/src/data/accessories.ts @@ -93,7 +93,7 @@ export const ACCESSORIES: Accessory[] = [ 'Survived 100+ drop tests', '1000 Hz sensor / comm rate', ], - image: '/images/accessories/unitree-dex2-5.jpg', + image: '/images/accessories/unitree-dex2-5.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/Dex2-5', compatibility: ['Unitree G1', 'Unitree R1'], @@ -182,7 +182,7 @@ export const ACCESSORIES: Accessory[] = [ 'Low-damping, small-clearance reducers', '1000 Hz comm + sensor rate', ], - image: '/images/accessories/unitree-dex5-1.png', + image: '/images/accessories/unitree-dex5-1.webp', accent: GOLD_BRAND, officialUrl: 'https://www.unitree.com/Dex5-1', compatibility: ['Unitree G1', 'Unitree H1', 'Unitree H2', 'Research arms'], @@ -286,7 +286,7 @@ export const ACCESSORIES: Accessory[] = [ ], }, ], - paramsImage: '/images/accessories/unitree-dex5-1/params.png', + paramsImage: '/images/accessories/unitree-dex5-1/params.webp', footnotes: [ 'Size refers to dexterous hand in flat state.', 'Pressure data represents force from a vertically-applied 1 cm diameter cylinder; varies by application scenario.', @@ -429,7 +429,7 @@ export const ACCESSORIES: Accessory[] = [ '6 Mbps RS485 communication', 'Advanced version includes 1080p camera', ], - image: '/images/accessories/unitree-dex1-1.png', + image: '/images/accessories/unitree-dex1-1.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/Dex1-1', compatibility: ['Unitree G1', 'Unitree H2', 'Unitree R1', 'Standalone'], @@ -490,7 +490,7 @@ export const ACCESSORIES: Accessory[] = [ ], }, ], - paramsImage: '/images/accessories/unitree-dex1-1/diagram.png', + paramsImage: '/images/accessories/unitree-dex1-1/diagram.webp', footnotes: [ 'The gripper width is 78 mm when half-open, 120 mm when fully open, and 124.5 mm when fully closed (with side rails extended).', 'Listed values for speed, gripping force, and full-stroke closing time are measured under varying conditions (24 V – 60 V) by adjusting motor stiffness, damping, and torque. Values may vary depending on the application.', @@ -524,7 +524,7 @@ export const ACCESSORIES: Accessory[] = [ 'Harmonic reducer joint motors', 'Ethernet interface, Ubuntu OS', ], - image: '/images/accessories/unitree-z1.png', + image: '/images/accessories/unitree-z1.webp', accent: GOLD_BRAND, officialUrl: 'https://www.unitree.com/z1', compatibility: ['Unitree AlienGo', 'Unitree B1', 'Mobile platforms'], @@ -636,7 +636,7 @@ export const ACCESSORIES: Accessory[] = [ '24 V @ 2.5 A standard / 5 A max', 'RJ45 + Type-C debug interface', ], - image: '/images/accessories/unitree-d1-t.jpg', + image: '/images/accessories/unitree-d1-t.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/D1-T', compatibility: ['Embodied AI research', 'Data collection'], @@ -838,7 +838,7 @@ export const ACCESSORIES: Accessory[] = [ 'Multiple device pairing', 'Customizable call zones', ], - image: '/images/accessories/pudu-pager.png', + image: '/images/accessories/pudu-pager.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['BellaBot', 'BellaBot Pro', 'KettyBot', 'HolaBot', 'PuduBot 2'], @@ -861,7 +861,7 @@ export const ACCESSORIES: Accessory[] = [ 'Multi-robot management', 'Pudu Link integration', ], - image: '/images/accessories/pudu-pager.png', + image: '/images/accessories/pudu-pager.webp', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['All Pudu service robots'], @@ -886,7 +886,7 @@ export const ACCESSORIES: Accessory[] = [ 'Status indicators', 'Pudu Link cloud integration', ], - image: '/images/robots/pudu-sh1.png', + image: '/images/robots/pudu-sh1.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['CC1', 'T300', 'FlashBot Max', 'BellaBot Pro', 'PuduBot 2'], @@ -909,7 +909,7 @@ export const ACCESSORIES: Accessory[] = [ 'Indoor commercial environments', 'Fleet-ready', ], - image: '/images/accessories/pudu-self-cleaning-dock.png', + image: '/images/accessories/pudu-self-cleaning-dock.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['CC1', 'CC1 Pro'], @@ -932,7 +932,7 @@ export const ACCESSORIES: Accessory[] = [ 'Modular tank', 'Cleaning-ready operation', ], - image: '/images/accessories/pudu-mobile-water-station.png', + image: '/images/accessories/pudu-mobile-water-station.webp', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['CC1', 'SH1'], @@ -957,7 +957,7 @@ export const ACCESSORIES: Accessory[] = [ 'Available colors', 'Heavy-traffic ready', ], - image: '/images/accessories/pudu-protection-case.png', + image: '/images/accessories/pudu-protection-case.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['BellaBot Pro', 'KettyBot Pro', 'T300', 'FlashBot Max'], @@ -980,7 +980,7 @@ export const ACCESSORIES: Accessory[] = [ 'High-traffic delivery ready', 'Quick install', ], - image: '/images/accessories/pudu-retractable-tray-baffle.png', + image: '/images/accessories/pudu-retractable-tray-baffle.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['BellaBot Pro', 'KettyBot Pro'], @@ -1003,7 +1003,7 @@ export const ACCESSORIES: Accessory[] = [ 'Quick swap', 'Multiple finishes', ], - image: '/images/robots/pudu-pudubot2.png', + image: '/images/robots/pudu-pudubot2.webp', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['BellaBot', 'BellaBot Pro', 'KettyBot Pro', 'PuduBot 2'], @@ -1026,7 +1026,7 @@ export const ACCESSORIES: Accessory[] = [ 'Heavy-duty rollers', 'Conveyor IoT integration', ], - image: '/images/accessories/pudu-conveyor-single-layer.png', + image: '/images/accessories/pudu-conveyor-single-layer.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['PUDU T300'], @@ -1072,7 +1072,7 @@ export const ACCESSORIES: Accessory[] = [ 'Long-life reflective surface', 'Indoor / semi-outdoor use', ], - image: '/images/accessories/pudu-reflective-post.png', + image: '/images/accessories/pudu-reflective-post.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['All Pudu service + delivery robots'], @@ -1095,7 +1095,7 @@ export const ACCESSORIES: Accessory[] = [ 'Multi-compartment layout', 'Compatible with FlashBot family', ], - image: '/images/robots/pudu-flashbot-max.png', + image: '/images/robots/pudu-flashbot-max.webp', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['FlashBot', 'FlashBot Max'], @@ -1120,7 +1120,7 @@ export const ACCESSORIES: Accessory[] = [ 'Secure access integration', 'Pudu Link cloud', ], - image: '/images/accessories/pudu-elevator-control-module.png', + image: '/images/accessories/pudu-elevator-control-module.webp', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['FlashBot', 'FlashBot Max', 'PuduBot 2', 'SwiftBot'], @@ -1143,7 +1143,7 @@ export const ACCESSORIES: Accessory[] = [ 'Secure facility ready', 'Pudu Link cloud', ], - image: '/images/accessories/pudu-gate-control-module.png', + image: '/images/accessories/pudu-gate-control-module.webp', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['FlashBot', 'FlashBot Max', 'SwiftBot', 'PuduBot 2'], @@ -1166,7 +1166,7 @@ export const ACCESSORIES: Accessory[] = [ 'Hospitality + corporate ready', 'Pudu Link cloud', ], - image: '/images/robots/pudu-kettybot.png', + image: '/images/robots/pudu-kettybot.webp', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/accessory', compatibility: ['FlashBot', 'FlashBot Max', 'SwiftBot'], diff --git a/src/data/industries.ts b/src/data/industries.ts index e7474d9..008c37b 100644 --- a/src/data/industries.ts +++ b/src/data/industries.ts @@ -90,7 +90,7 @@ export const INDUSTRIES: Industry[] = [ matchCategories: ['humanoid', 'service'], accent: '#8891C7', icon: 'graduation-cap', - image: '/images/robots/unitree-h1.jpg', + image: '/images/robots/unitree-h1.webp', imageAlt: 'Humanoid research robot in a UAE STEM lab', }, { @@ -103,7 +103,7 @@ export const INDUSTRIES: Industry[] = [ matchCategories: ['quadruped', 'commercial'], accent: '#DEE0F0', icon: 'shield', - image: '/industries/cards/security-surveillance.jpg', + image: '/industries/cards/security-surveillance.webp', imageAlt: 'Quadruped robot on autonomous security patrol at a UAE facility', }, { @@ -155,7 +155,7 @@ export const INDUSTRIES: Industry[] = [ matchCategories: ['humanoid', 'quadruped', 'service'], accent: '#273F94', icon: 'landmark', - image: '/industries/unitree/utility-room.jpg', + image: '/industries/unitree/utility-room.webp', imageAlt: 'Quadruped robots deployed for UAE civic and emergency services', }, ]; diff --git a/src/data/industry-pages.ts b/src/data/industry-pages.ts index 5629baf..b1418fc 100644 --- a/src/data/industry-pages.ts +++ b/src/data/industry-pages.ts @@ -75,10 +75,10 @@ export const INDUSTRY_PAGES: Record = { { value: 'Premium', label: 'Brand moments' }, ], gallery: [ - { src: '/images/robots/pudu-bellabot.png', alt: 'BellaBot service-floor delivery', caption: 'BellaBot Pro — service-floor delivery.', credit: 'Pudu' }, - { src: '/images/robots/pudu-kettybot.png', alt: 'KettyBot front-of-house greeter', caption: 'KettyBot Pro — front-of-house greeter.', credit: 'Pudu' }, - { src: '/images/robots/pudu-cc1.png', alt: 'PUDU CC1 lobby cleaning', caption: 'PUDU CC1 — overnight lobby cleaning.', credit: 'Pudu' }, - { src: '/images/robots/unitree-g1.png', alt: 'Unitree G1 humanoid concierge', caption: 'Unitree G1 — humanoid concierge moments.', credit: 'Unitree' }, + { src: '/images/robots/pudu-bellabot.webp', alt: 'BellaBot service-floor delivery', caption: 'BellaBot Pro — service-floor delivery.', credit: 'Pudu' }, + { src: '/images/robots/pudu-kettybot.webp', alt: 'KettyBot front-of-house greeter', caption: 'KettyBot Pro — front-of-house greeter.', credit: 'Pudu' }, + { src: '/images/robots/pudu-cc1.webp', alt: 'PUDU CC1 lobby cleaning', caption: 'PUDU CC1 — overnight lobby cleaning.', credit: 'Pudu' }, + { src: '/images/robots/unitree-g1.webp', alt: 'Unitree G1 humanoid concierge', caption: 'Unitree G1 — humanoid concierge moments.', credit: 'Unitree' }, ], problemPoints: [ 'Guest service teams are stretched thin during peak hours and events.', @@ -162,9 +162,9 @@ export const INDUSTRY_PAGES: Record = { { 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' }, - { src: '/images/robots/featured-bellabot-pro.png', alt: 'BellaBot Pro on restaurant floor', caption: 'Designed for restaurant peak service.', credit: 'Pudu' }, - { src: '/images/robots/pudu-kettybot.png', alt: 'Pudu KettyBot greeter robot', caption: 'KettyBot Pro — greeter with ad display.', credit: 'Pudu' }, + { src: '/images/robots/pudu-bellabot.webp', alt: 'Pudu BellaBot multi-tray delivery robot', caption: 'BellaBot Pro — multi-tray food delivery.', credit: 'Pudu' }, + { src: '/images/robots/featured-bellabot-pro.webp', alt: 'BellaBot Pro on restaurant floor', caption: 'Designed for restaurant peak service.', credit: 'Pudu' }, + { src: '/images/robots/pudu-kettybot.webp', alt: 'Pudu KettyBot greeter robot', caption: 'KettyBot Pro — greeter with ad display.', credit: 'Pudu' }, { src: '/images/robots/featured-kettybot-black.webp', alt: 'KettyBot in black', caption: 'KettyBot Pro — premium black finish.', credit: 'Pudu' }, ], problemPoints: [ @@ -244,10 +244,10 @@ export const INDUSTRY_PAGES: Record = { { value: 'Premium', label: 'Guest moments' }, ], gallery: [ - { src: '/images/robots/pudu-holabot.png', alt: 'Pudu HolaBot multi-floor delivery', caption: 'HolaBot / FlashBot — multi-floor delivery.', credit: 'Pudu' }, - { src: '/images/robots/pudu-cc1.png', alt: 'PUDU CC1 cleaning scrubber', caption: 'PUDU CC1 — commercial cleaning scrubber.', credit: 'Pudu' }, - { src: '/images/robots/pudu-pudubot2.png', alt: 'PuduBot 2 indoor delivery', caption: 'PuduBot 2 — indoor logistics platform.', credit: 'Pudu' }, - { src: '/images/robots/unitree-g1.png', alt: 'Unitree G1 humanoid for concierge moments', caption: 'Unitree G1 — humanoid concierge moments.', credit: 'Unitree' }, + { src: '/images/robots/pudu-holabot.webp', alt: 'Pudu HolaBot multi-floor delivery', caption: 'HolaBot / FlashBot — multi-floor delivery.', credit: 'Pudu' }, + { src: '/images/robots/pudu-cc1.webp', alt: 'PUDU CC1 cleaning scrubber', caption: 'PUDU CC1 — commercial cleaning scrubber.', credit: 'Pudu' }, + { src: '/images/robots/pudu-pudubot2.webp', alt: 'PuduBot 2 indoor delivery', caption: 'PuduBot 2 — indoor logistics platform.', credit: 'Pudu' }, + { src: '/images/robots/unitree-g1.webp', alt: 'Unitree G1 humanoid for concierge moments', caption: 'Unitree G1 — humanoid concierge moments.', credit: 'Unitree' }, ], problemPoints: [ 'Room service and back-of-house logistics consume operational hours.', @@ -326,9 +326,9 @@ export const INDUSTRY_PAGES: Record = { { value: 'Overnight', label: 'Auto-cycles' }, ], gallery: [ - { src: '/images/robots/pudu-cc1.png', alt: 'PUDU CC1 auto-scrubber', caption: 'PUDU CC1 — auto-scrubber for large floors.', credit: 'Pudu' }, - { src: '/images/robots/pudu-kettybot.png', alt: 'KettyBot wayfinding and ad display', caption: 'KettyBot Pro — wayfinding and promo runs.', credit: 'Pudu' }, - { src: '/images/robots/unitree-go2.png', alt: 'Unitree Go2 night patrol', caption: 'Unitree Go2 — night patrol across decks.', credit: 'Unitree' }, + { src: '/images/robots/pudu-cc1.webp', alt: 'PUDU CC1 auto-scrubber', caption: 'PUDU CC1 — auto-scrubber for large floors.', credit: 'Pudu' }, + { src: '/images/robots/pudu-kettybot.webp', alt: 'KettyBot wayfinding and ad display', caption: 'KettyBot Pro — wayfinding and promo runs.', credit: 'Pudu' }, + { src: '/images/robots/unitree-go2.webp', alt: 'Unitree Go2 night patrol', caption: 'Unitree Go2 — night patrol across decks.', credit: 'Unitree' }, { src: '/industries/unitree/thermal.jpg', alt: 'Thermal + LiDAR patrol sensors', caption: 'Thermal + LiDAR sensors for after-hours rounds.', credit: 'Unitree' }, ], problemPoints: [ @@ -414,10 +414,10 @@ export const INDUSTRY_PAGES: Record = { { value: '24/7', label: 'Continuous ops' }, ], gallery: [ - { src: '/images/robots/pudu-holabot.png', alt: 'Pudu HolaBot hospital delivery', caption: 'HolaBot / FlashBot — medication and meal delivery.', credit: 'Pudu' }, - { src: '/images/robots/pudu-cc1.png', alt: 'PUDU CC1 cleaning between cycles', caption: 'PUDU CC1 — between-cycle floor cleaning.', credit: 'Pudu' }, - { src: '/images/robots/pudu-d9.png', alt: 'PUDU D9 disinfection robot', caption: 'PUDU D9 — UV-C disinfection.', credit: 'Pudu' }, - { src: '/images/robots/pudu-kettybot.png', alt: 'KettyBot visitor reception', caption: 'KettyBot Pro — visitor reception.', credit: 'Pudu' }, + { src: '/images/robots/pudu-holabot.webp', alt: 'Pudu HolaBot hospital delivery', caption: 'HolaBot / FlashBot — medication and meal delivery.', credit: 'Pudu' }, + { src: '/images/robots/pudu-cc1.webp', alt: 'PUDU CC1 cleaning between cycles', caption: 'PUDU CC1 — between-cycle floor cleaning.', credit: 'Pudu' }, + { src: '/images/robots/pudu-d9.webp', alt: 'PUDU D9 disinfection robot', caption: 'PUDU D9 — UV-C disinfection.', credit: 'Pudu' }, + { src: '/images/robots/pudu-kettybot.webp', alt: 'KettyBot visitor reception', caption: 'KettyBot Pro — visitor reception.', credit: 'Pudu' }, ], problemPoints: [ 'Clinical staff lose hours to non-clinical transport tasks.', @@ -486,7 +486,7 @@ export const INDUSTRY_PAGES: Record = { '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: '/images/robots/unitree-h1.jpg', + src: '/images/robots/unitree-h1.webp', alt: 'Humanoid research robot in a UAE STEM lab', }, proofPoints: [ @@ -496,10 +496,10 @@ export const INDUSTRY_PAGES: Record = { { value: 'K-12 → PhD', label: 'Curriculum range' }, ], gallery: [ - { src: '/images/robots/unitree-g1.png', alt: 'Unitree G1 humanoid in STEM lab', caption: 'Unitree G1 — humanoid platform for AI and HRI labs.', credit: 'Unitree' }, - { src: '/images/robots/unitree-go2.png', alt: 'Unitree Go2 quadruped for STEM', caption: 'Unitree Go2 / Go2 EDU — programmable quadruped.', credit: 'Unitree' }, - { src: '/images/robots/unitree-b2.png', alt: 'Unitree B2 research platform', caption: 'Unitree B2 — advanced research projects.', credit: 'Unitree' }, - { src: '/industries/unitree/modular.jpg', alt: 'Modular sensor and payload kits', caption: 'Modular sensor and payload options for course work.', credit: 'Unitree' }, + { src: '/images/robots/unitree-g1.webp', alt: 'Unitree G1 humanoid in STEM lab', caption: 'Unitree G1 — humanoid platform for AI and HRI labs.', credit: 'Unitree' }, + { src: '/images/robots/unitree-go2.webp', alt: 'Unitree Go2 quadruped for STEM', caption: 'Unitree Go2 / Go2 EDU — programmable quadruped.', credit: 'Unitree' }, + { src: '/images/robots/unitree-b2.webp', alt: 'Unitree B2 research platform', caption: 'Unitree B2 — advanced research projects.', credit: 'Unitree' }, + { src: '/industries/unitree/modular.webp', alt: 'Modular sensor and payload kits', caption: 'Modular sensor and payload options for course work.', credit: 'Unitree' }, ], problemPoints: [ 'Schools need hands-on robotics and AI learning tools.', @@ -595,7 +595,7 @@ export const INDUSTRY_PAGES: Record = { '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/unitree/terrain.jpg', + src: '/industries/unitree/terrain.webp', alt: 'Quadruped robot on autonomous patrol in a UAE industrial site', }, proofPoints: [ @@ -605,15 +605,15 @@ export const INDUSTRY_PAGES: Record = { { value: '4–6h', label: 'Patrol endurance' }, ], gallery: [ - { src: '/industries/unitree/terrain.jpg', alt: 'Quadruped robot on mixed industrial terrain', caption: 'Stairs, gullies, and uneven ground handled on one platform.', credit: 'Unitree' }, + { src: '/industries/unitree/terrain.webp', alt: 'Quadruped robot on mixed industrial terrain', caption: 'Stairs, gullies, and uneven ground handled on one platform.', credit: 'Unitree' }, { src: '/industries/unitree/thermal.jpg', alt: 'Thermal imaging and laser-radar detection', caption: 'Thermal, laser-radar, and AI imaging for routine monitoring.', credit: 'Unitree' }, - { src: '/industries/unitree/substation.jpg', alt: 'Power substation patrol', caption: 'Substation patrol — switchgear and transformer scans.', credit: 'Unitree' }, - { src: '/industries/unitree/pipeline.jpg', alt: 'Pipeline corridor patrol', caption: 'Pipeline and refinery corridor inspection rounds.', credit: 'Unitree' }, - { src: '/industries/unitree/industrial-park.jpg', alt: 'Industrial park perimeter coverage', caption: 'Industrial park and large-compound perimeter coverage.', credit: 'Unitree' }, - { src: '/industries/unitree/utility-room.jpg', alt: 'Utility plant room inspection', caption: 'Utility and plant-room routine checks.', credit: 'Unitree' }, + { src: '/industries/unitree/substation.webp', alt: 'Power substation patrol', caption: 'Substation patrol — switchgear and transformer scans.', credit: 'Unitree' }, + { src: '/industries/unitree/pipeline.webp', alt: 'Pipeline corridor patrol', caption: 'Pipeline and refinery corridor inspection rounds.', credit: 'Unitree' }, + { src: '/industries/unitree/industrial-park.webp', alt: 'Industrial park perimeter coverage', caption: 'Industrial park and large-compound perimeter coverage.', credit: 'Unitree' }, + { src: '/industries/unitree/utility-room.webp', alt: 'Utility plant room inspection', caption: 'Utility and plant-room routine checks.', credit: 'Unitree' }, { src: '/industries/unitree/mine.jpg', alt: 'Tunnel inspection', caption: 'Tunnel and confined-zone inspection.', credit: 'Unitree' }, - { src: '/industries/unitree/terrain-night.jpg', alt: 'Quadruped robot on night patrol', caption: 'After-hours rounds with consistent route timing.', credit: 'Unitree' }, - { src: '/industries/unitree/b2-render.png', alt: 'Unitree B2 industrial quadruped render', caption: 'B2 — industrial-grade quadruped platform.', credit: 'Unitree' }, + { src: '/industries/unitree/terrain-night.webp', alt: 'Quadruped robot on night patrol', caption: 'After-hours rounds with consistent route timing.', credit: 'Unitree' }, + { src: '/industries/unitree/b2-render.webp', alt: 'Unitree B2 industrial quadruped render', caption: 'B2 — industrial-grade quadruped platform.', credit: 'Unitree' }, ], problemPoints: [ 'Manual patrols are repetitive, costly, and uneven across shifts.', @@ -711,7 +711,7 @@ export const INDUSTRY_PAGES: Record = { '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/unitree/patrol-system.png', + src: '/industries/unitree/patrol-system.webp', alt: 'Industrial inspection robot in a UAE warehouse facility', }, proofPoints: [ @@ -721,15 +721,15 @@ export const INDUSTRY_PAGES: Record = { { value: 'Scheduled', label: 'Auto run cycles' }, ], gallery: [ - { src: '/industries/unitree/patrol-system.png', alt: 'Patrol system overview', caption: 'End-to-end patrol and inspection platform.', credit: 'Unitree' }, - { src: '/industries/unitree/ai-patrol.jpg', alt: 'AI-planned facility patrols', caption: 'AI route planning across facility zones.', credit: 'Unitree' }, - { src: '/industries/unitree/digital-twin.jpg', alt: 'Digital twin facility view', caption: 'Digital twin view of facility and fleet status.', credit: 'Unitree' }, - { src: '/industries/unitree/analytics.jpg', alt: 'Inference and anomaly analytics dashboard', caption: 'Anomaly analytics on live patrol data.', credit: 'Unitree' }, - { src: '/industries/unitree/flight-path.jpg', alt: '3D auto-generated route path', caption: '3D route planning for repeatable rounds.', credit: 'Unitree' }, - { src: '/industries/unitree/sensor-overview.png', alt: 'Modular sensor and payload diagram', caption: 'Modular sensor and payload options.', credit: 'Unitree' }, - { src: '/industries/unitree/cloud.jpg', alt: 'Cloud-connected fleet management', caption: 'Cloud platform for fleet operations.', credit: 'Unitree' }, - { src: '/industries/unitree/cost-efficiency.jpg', alt: 'Long-term operational cost view', caption: 'Lower long-term cost across cycles.', credit: 'Unitree' }, - { src: '/industries/unitree/go2-render.png', alt: 'Unitree Go2 quadruped render', caption: 'Go2 — agile inspection platform.', credit: 'Unitree' }, + { src: '/industries/unitree/patrol-system.webp', alt: 'Patrol system overview', caption: 'End-to-end patrol and inspection platform.', credit: 'Unitree' }, + { src: '/industries/unitree/ai-patrol.webp', alt: 'AI-planned facility patrols', caption: 'AI route planning across facility zones.', credit: 'Unitree' }, + { src: '/industries/unitree/digital-twin.webp', alt: 'Digital twin facility view', caption: 'Digital twin view of facility and fleet status.', credit: 'Unitree' }, + { src: '/industries/unitree/analytics.webp', alt: 'Inference and anomaly analytics dashboard', caption: 'Anomaly analytics on live patrol data.', credit: 'Unitree' }, + { src: '/industries/unitree/flight-path.webp', alt: '3D auto-generated route path', caption: '3D route planning for repeatable rounds.', credit: 'Unitree' }, + { src: '/industries/unitree/sensor-overview.webp', alt: 'Modular sensor and payload diagram', caption: 'Modular sensor and payload options.', credit: 'Unitree' }, + { src: '/industries/unitree/cloud.webp', alt: 'Cloud-connected fleet management', caption: 'Cloud platform for fleet operations.', credit: 'Unitree' }, + { src: '/industries/unitree/cost-efficiency.webp', alt: 'Long-term operational cost view', caption: 'Lower long-term cost across cycles.', credit: 'Unitree' }, + { src: '/industries/unitree/go2-render.webp', alt: 'Unitree Go2 quadruped render', caption: 'Go2 — agile inspection platform.', credit: 'Unitree' }, ], problemPoints: [ 'Inventory and inspection routes scale poorly with human hours.', diff --git a/src/data/robots.ts b/src/data/robots.ts index 5babfc9..cae289c 100644 --- a/src/data/robots.ts +++ b/src/data/robots.ts @@ -110,7 +110,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/unitree-g1.png', + image: '/images/robots/unitree-g1.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/g1', @@ -149,7 +149,7 @@ export const ROBOTS: Robot[] = [ { label: 'Top Speed', value: '3.3 m/s' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-h1.jpg', + image: '/images/robots/unitree-h1.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.unitree.com/h1', @@ -182,7 +182,7 @@ export const ROBOTS: Robot[] = [ { label: 'Joints', value: '31 DOF' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-h2.png', + image: '/images/robots/unitree-h2.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/H2', @@ -215,7 +215,7 @@ export const ROBOTS: Robot[] = [ { label: 'Height', value: '≤123 cm' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-r1.png', + image: '/images/robots/unitree-r1.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/R1', @@ -255,7 +255,7 @@ export const ROBOTS: Robot[] = [ { label: 'Payload Options', value: 'Cameras, LiDAR, sensors' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-go2.png', + image: '/images/robots/unitree-go2.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/go2', @@ -321,7 +321,7 @@ export const ROBOTS: Robot[] = [ { label: 'Top Speed', value: '5 m/s' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-as2.png', + image: '/images/robots/unitree-as2.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/As2', @@ -354,7 +354,7 @@ export const ROBOTS: Robot[] = [ { label: 'Payload', value: '3–5 kg' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-go1.png', + image: '/images/robots/unitree-go1.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/go1', @@ -387,7 +387,7 @@ export const ROBOTS: Robot[] = [ { label: 'Payload', value: '5 kg' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-a1.png', + image: '/images/robots/unitree-a1.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/a1', @@ -427,7 +427,7 @@ export const ROBOTS: Robot[] = [ { label: 'Top Speed', value: '6 m/s' }, { label: 'Payload', value: '40+ kg' }, ], - image: '/images/robots/unitree-b2.png', + image: '/images/robots/unitree-b2.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.unitree.com/b2', @@ -460,7 +460,7 @@ export const ROBOTS: Robot[] = [ { label: 'Payload', value: '40 kg' }, { label: 'IP Rating', value: 'IP67' }, ], - image: '/images/robots/unitree-b2-w.jpg', + image: '/images/robots/unitree-b2-w.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/b2-w', @@ -493,7 +493,7 @@ export const ROBOTS: Robot[] = [ { label: 'Battery', value: 'Hot-swappable dual' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-a2.png', + image: '/images/robots/unitree-a2.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/A2', @@ -526,7 +526,7 @@ export const ROBOTS: Robot[] = [ { label: 'Battery', value: 'Hot-swappable dual' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-a2-w.jpg', + image: '/images/robots/unitree-a2-w.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.unitree.com/A2-W', @@ -559,7 +559,7 @@ export const ROBOTS: Robot[] = [ { label: 'Battery', value: '932 Wh' }, { label: 'IP Rating', value: 'IP68' }, ], - image: '/images/robots/unitree-b1.png', + image: '/images/robots/unitree-b1.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.unitree.com/b1', @@ -592,7 +592,7 @@ export const ROBOTS: Robot[] = [ { label: 'I/O', value: 'Ethernet / USB 3.0 / RS485' }, SPEC_CONSULT, ], - image: '/images/robots/unitree-aliengo.png', + image: '/images/robots/unitree-aliengo.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.unitree.com/aliengo', @@ -627,7 +627,7 @@ export const ROBOTS: Robot[] = [ { label: 'Displays', value: '18.5" + 10.1"' }, SPEC_CONSULT, ], - image: '/images/robots/featured-bellabot-pro.png', + image: '/images/robots/featured-bellabot-pro.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/products/bellabotpro', @@ -660,7 +660,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/pudu-bellabot.png', + image: '/images/robots/pudu-bellabot.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/products/bellabot', @@ -726,7 +726,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/pudu-kettybot.png', + image: '/images/robots/pudu-kettybot.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/products/kettybot', @@ -759,7 +759,7 @@ export const ROBOTS: Robot[] = [ { label: 'IP Rating', value: 'IPX5 cabin' }, SPEC_CONSULT, ], - image: '/images/robots/pudu-holabot.png', + image: '/images/robots/pudu-holabot.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/products/holabot', @@ -825,7 +825,7 @@ export const ROBOTS: Robot[] = [ { label: 'Trays', value: 'Up to 7' }, { label: 'Runtime', value: '24 h' }, ], - image: '/images/robots/pudu-pudubot2.png', + image: '/images/robots/pudu-pudubot2.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/products/pudubot', @@ -858,7 +858,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/pudu-flashbot-max.png', + image: '/images/robots/pudu-flashbot-max.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/products/flashbot-new', @@ -891,7 +891,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/pudu-flashbot.png', + image: '/images/robots/pudu-flashbot.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/products/flashbot', @@ -926,7 +926,7 @@ export const ROBOTS: Robot[] = [ { label: 'Safety', value: 'ISO 3691-4' }, SPEC_CONSULT, ], - image: '/images/robots/pudu-t300.png', + image: '/images/robots/pudu-t300.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/products/pudut300', @@ -961,7 +961,7 @@ export const ROBOTS: Robot[] = [ SPEC_CONSULT, SPEC_PLACEHOLDER, ], - image: '/images/robots/pudu-cc1.png', + image: '/images/robots/pudu-cc1.webp', imageType: 'photo', accent: GOLD_BRONZE, officialUrl: 'https://www.pudurobotics.com/en/products/puduCC1', @@ -994,7 +994,7 @@ export const ROBOTS: Robot[] = [ { label: 'Suction', value: '20,000 Pa' }, SPEC_CONSULT, ], - image: '/images/robots/pudu-sh1.png', + image: '/images/robots/pudu-sh1.webp', imageType: 'photo', accent: GOLD_CHAMPAGNE, officialUrl: 'https://www.pudurobotics.com/en/products/puduSH1', @@ -1027,7 +1027,7 @@ export const ROBOTS: Robot[] = [ { label: 'Runtime', value: '4–8 h' }, SPEC_CONSULT, ], - image: '/images/robots/pudu-mt1.png', + image: '/images/robots/pudu-mt1.webp', imageType: 'photo', accent: GOLD_BRAND, officialUrl: 'https://www.pudurobotics.com/en/products/mt1',