Commit Graph
80 Commits
Author SHA1 Message Date
Najjar\NajjarV02andClaude Opus 5.5 8382501598 feat(seo): fix titles, canonicals, share tags and soft 404s
CI/CD / test-and-build (pull_request) Canceled after 0s
CI/CD / deploy (pull_request) Canceled after 0s
- Titles carried the brand twice (page title plus layout template) and Pudu
  items read "Pudu PUDU". Pages now go through pageMetadata() and displayName().
- /configure, /privacy-policy and /terms-of-service reused the homepage title.
- Eight pages had no canonical and inherited the homepage og:url.
- Unknown /robots, /accessories and /industries slugs returned 200; they are
  now a real 404 (dynamicParams = false) with a not-found page.
- Events, Smart Buildings and Government have no page content yet and rendered
  not-found: moved to UPCOMING_INDUSTRIES until it is written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 16:57:18 +04:00
Najjar\NajjarV02andClaude Opus 4.8 6f6536db7c chore(contact): update address to DIFC Trade Center Second showroom
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-24 15:47:36 +04:00
Najjar 8bc90b0db9 feat(shop): add AgiBot brand (A2 + X2 flagship) to catalog
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
2026-07-06 16:12:00 +04:00
Najjar 0cb5693ca3 chore(seo): point shop canonical/sitemap/llms to shop.yslootahrobotics.com
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-07-06 14:16:54 +04:00
NajjarandClaude Opus 4.8 60d50e15e4 feat(seo): robots.txt, richer sitemap, llms.txt, manifest, OG image, JSON-LD
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Add app/robots.ts (allow crawl, disallow admin/api, sitemap URL)
- Expand sitemap to industries/[slug], accessories/[slug] and more static routes
- Add public/llms.txt (AI summary), site.webmanifest, 1200x630 og.jpg
- Layout: default OG/Twitter image, manifest, robots meta, Organization + WebSite JSON-LD
- Robot pages: canonical, OG image, Product + BreadcrumbList JSON-LD; home canonical

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 13:45:38 +04:00
NajjarandClaude Opus 4.8 873026a4a9 feat: monochrome black & white rebrand + new Pudu robots
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Convert site from royal-blue theme to black/white monochrome (desaturate
  all blue-hued colors; keep WhatsApp green and error red)
- Swap blue circular brand logo for mono YS mark; regenerate favicon/PWA icons
- Add 6 Pudu robots (CC1 Pro, MT1 Max, MT1 Vac, T600, T600 Underride, BG1 Pro)
- Fix favicon.ico to RGBA (Next 16 Turbopack decode) and Stripe apiVersion type

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 13:20:26 +04:00
Najjar\NajjarV02andClaude Opus 4.8 c2490947d2 fix: favicon uses official Lootah Robotics logo instead of gold icon
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
Regenerate favicon.ico (16/32/48px) and apple-touch-icon.png from
public/images/brands/ys-lootah-robotics-logo.webp.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 13:44:27 +04:00
Najjar\NajjarV02andClaude Opus 4.8 7bb71dc707 fix: mobile configurator shows robot above price panel
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
On mobile (<768px) the flex column put the config aside (price
breakdown + Proceed/Reset) above the robot canvas. Add explicit
order so the robot renders first and the panel flows below it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:27:20 +04:00
Najjar\NajjarV02andClaude Opus 4.8 60e1ea8407 fix: mobile configurator panel flows in-page so Proceed button is reachable
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
On mobile the configurator was a 100vh frame with an inner scrolling
bottom-sheet embedded inside the scrolling /configure page. Page scroll
hijacked the gesture and skipped the frame, trapping the Proceed to Order
and Reset buttons in the inner scroll. Drop the nested scroll on <=768px:
canvas stays fixed on top, the full config panel flows in normal page
scroll so the CTAs are always visible. Landscape side-by-side preserved.

Also pin outputFileTracingRoot to the project dir to silence the
multiple-lockfile workspace-root warning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 10:35:24 +04:00
Najjar\NajjarV02 e500fee42f fix: enhance layout and styling for footer and body, add portrait image for Bu Sunaidah
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
2026-05-22 10:46:46 +04:00
Najjar\NajjarV02 78649c6f3b fix: prevent horizontal overflow and adjust main width for better layout
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-22 10:25:19 +04:00
Najjar\NajjarV02andClaude Opus 4.7 c667736ee6 fix: kill horizontal overflow on mobile
Add `overflow-x: clip` to main/section/header/footer/nav so decorative
absolutely-positioned glow elements (dcta-glow, brand-card-glow,
cap-tile-glow) can't bubble their bounds up to body.scrollWidth.
Without this, body extended ~168px past viewport at 360px width,
producing right-side empty gap and horizontal scroll on Android Chrome.

Also stack 2-col grids on narrow viewports in ExclusiveAccessSection,
FounderSection, and IndustryUseCases stats row to prevent cramped
or overflowing content under 640px.

Verified via Playwright at 320/360/375/390/411/414/480 — body.scrollWidth
now equals viewport at all widths.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 10:10:09 +04:00
Najjar\NajjarV02 e8f3bf8686 fix: enforce LTR layout across the application regardless of language
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-22 09:39:44 +04:00
Najjar\NajjarV02andClaude Opus 4.7 4c415cd5ea fix: bento tiles full-width below 900px (no two-up on mobile)
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:54:20 +04:00
Najjar\NajjarV02andClaude Opus 4.7 8d4fe60f28 fix: BentoGrid flagship tile mobile overlap
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
Robot image and text overlapped on mobile because image was
absolutely positioned over the full card while text was max-width 50%.
Refactored to stacked flex layout below 900px (copy on top, image
below in own region), original side-by-side layout preserved at
desktop via media query.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:41:06 +04:00
Najjar\NajjarV02andClaude Opus 4.7 5a40f6b733 perf: aggressive webp re-compression + max-width 1920 resize
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- recompress every webp at q=70-82 depending on size band
- resize anything wider than 1920px to 1920 max
- convert remaining png/jpg holdouts (mine, thermal, dex3-1 etc) to webp
- restore apple-touch-icon.png (iOS requires png)
- 86 files recompressed, saved 4.36 MB
- public/ images: 11.7 MB -> 6.69 MB (-43%)
- total trajectory: 23.3 MB -> 6.69 MB (-71%)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:31:56 +04:00
Najjar\NajjarV02andClaude Opus 4.7 dda358b59d perf: convert all images to webp, update references
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- 77 jpg/png/gif → webp (kept 7 where webp larger)
- public/ assets: 23.3 MB → ~12 MB (~50% smaller)
- 110 image references updated across data files + components
- scripts/convert-to-webp.mjs + scripts/fix-image-refs.mjs added

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:26:39 +04:00
Najjar\NajjarV02andClaude Opus 4.7 de25d774af content: page copy refinements + accessory rich data extensions
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- about, brands, contact, industries, bu-sunaidah page copy polish
- BuSunaidahSection content updates
- accessories.ts: rich-content interfaces (highlights, featureSections,
  specGroups, paramsImage, footnotes, safetyNotice) + full Dex2-5,
  Dex3-1, Dex1-1, Dex5-1, Z1, D1-T, L2 data sourced from vendor pages

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 17:17:05 +04:00
Najjar\NajjarV02 fb41977b18 feat: enhance UI components and update Instagram post data
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 17:08:24 +04:00
Najjar\NajjarV02 e7fde29a21 Add Instagram post fetching functionality and local JSON fallback
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Introduced a new TypeScript file `bu-sunaidah-fetch.ts` to handle fetching the latest Instagram posts for Bu Sunaidah.
- Implemented a scraping method to attempt to retrieve posts directly from Instagram, with a fallback to a local JSON file `bu-sunaidah-posts.json`.
- Added a new JSON file containing recent Instagram post URLs and captions.
- Included a new image asset `unitree-l2.jpg` for accessories.
2026-05-21 16:50:22 +04:00
Najjar\NajjarV02 2d32a1e722 feat: add accessory detail and index pages with dynamic routing and metadata
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 16:22:05 +04:00
Najjar\NajjarV02 5271914b16 feat: update RobotCanvas lighting and background styles; enhance button designs
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
fix: update accessory images and compatibility details in accessories data

refactor: modify industry page hero image for education section

feat: add Bu Sunaidah page with sections for media, Instagram feed, and press coverage

feat: create InstagramGlyph icon component for consistent styling

chore: initialize Bu Sunaidah press and Instagram data structures
2026-05-21 16:15:40 +04:00
Najjar\NajjarV02 e500409305 Refactor code structure and remove redundant changes
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 16:00:57 +04:00
Najjar\NajjarV02 1967ae5402 Refactor code structure for improved readability and maintainability
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 15:53:21 +04:00
Najjar\NajjarV02 d8502292bc feat: add AccessoriesShowcase component and accessories data
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- 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.
2026-05-21 15:45:45 +04:00
Najjar\NajjarV02 37fab3fcaf Refactor code structure for improved readability and maintainability
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 15:36:32 +04:00
Najjar\NajjarV02 574d43adb4 feat: enhance industry detail and showcase components with responsive images and improved styles
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 15:24:31 +04:00
Najjar\NajjarV02 7c3b42e651 Refactor code structure for improved readability and maintainability
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 14:54:20 +04:00
Najjar\NajjarV02 b5876aead5 refactor: update icon imports to individual paths and enhance industry page content
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 14:38:45 +04:00
Najjar\NajjarV02 329967df60 feat: add industry pages data structure for robotics solutions across various sectors
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 14:27:04 +04:00
Najjar\NajjarV02 fa5f4f7a3e feat: add global responsive guards and enhance layout for mobile and touch interactions
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 13:46:17 +04:00
Najjar\NajjarV02 de9f358582 refactor: remove ServicesGrid component and its associated styles 2026-05-21 13:28:38 +04:00
Najjar\NajjarV02 7458818c62 feat: add CTAButton component with customizable variants, sizes, and arrows
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-21 12:57:56 +04:00
Najjar\NajjarV02 79f7f9e579 feat: enhance CategoryShowcaseScroll with manual scroll locking and improved layout adjustments
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-20 18:21:20 +04:00
Najjar\NajjarV02 8457493f49 refactor: replace RobotCategoryGrid with CategoryShowcaseScroll and update styles across components
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Updated HomePage to use CategoryShowcaseScroll instead of RobotCategoryGrid for better category display.
- Modified BrandShowcase component to adjust background gradients and text colors for improved aesthetics.
- Changed CompanyStory component to enhance visual consistency with updated accent colors.
- Refined ExclusiveAccessSection to align with new design standards, including gradient adjustments.
- Enhanced Hero3DRobotics with new gradient backgrounds and updated text colors for better readability.
- Updated RoboticsScrollShowcase to reflect new color scheme and improved text visibility.
- Adjusted RoboticsSplineShowcase to maintain design consistency with updated colors and gradients.
- Improved MotionSection to enhance scroll behavior and visibility transitions.
- Updated container-scroll-animation styles for better visual effects.
- Introduced new CategoryShowcaseScroll component for a more dynamic category display experience.
2026-05-20 18:15:43 +04:00
Najjar\NajjarV02 729ab71c2c Refactor code structure for improved readability and maintainability; removed redundant code blocks and optimized function calls.
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-20 18:03:42 +04:00
Najjar\NajjarV02 bfe589be27 feat: enhance BrandShowcase component with improved layout and visual elements
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-20 17:58:58 +04:00
Najjar\NajjarV02 d7c343ac7d refactor: update Hero3DRobotics and RoboticsSplineShowcase components for improved styling and layout
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Adjusted padding, opacity, and transform properties for robot images in Hero3DRobotics.
- Updated sizes for images to enhance responsiveness.
- Modified floor reflection styles for better visual consistency.
- Refactored RoboticsSplineShowcase to use inline styles for layout and design consistency.
- Enhanced text styles and button designs for better user experience.
- Improved grid layout for better responsiveness across different screen sizes.
2026-05-20 17:56:07 +04:00
Najjar\NajjarV02 461a00384c feat: add robotics showcase components and UI enhancements
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Introduced FounderSection component to highlight leadership and vision.
- Created ServicesGrid component to display various robotics services offered.
- Developed RoboticsScrollShowcase for showcasing robots with interactive elements.
- Implemented RoboticsSplineShowcase featuring a 3D Spline scene for enhanced user experience.
- Added reusable Card component for consistent styling across sections.
- Integrated ContainerScroll for animated scrolling effects in the showcase.
- Built SplineScene component for lazy loading Spline 3D scenes.
- Added Spotlight component for interactive hover effects.
- Created utility function for class name merging to streamline styling.
2026-05-20 17:46:36 +04:00
Najjar\NajjarV02 92cf4aba3b feat: add robotics components and data structures
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
- Introduced RobotProductCard component for displaying robot details.
- Added WhyUs component highlighting key reasons for choosing our robotics solutions.
- Implemented CursorSpotlight for enhanced user interaction.
- Created GlassPanel for a stylish UI element.
- Developed MotionSection for animated section visibility.
- Added PremiumButton for versatile button options.
- Established data structures for industries and robots, including detailed specifications and use cases.
- Included utility functions for retrieving robots by slug and category.
2026-05-20 17:22:47 +04:00
Najjar\NajjarV02andClaude Opus 4.7 52b910ed93 feat(pricing): switch base+EDU prices to AED and unify attire at 5000 AED
- `base` (Basic body) → 77,125 AED  (Unitree G1 retail $16k + $5k markup)
- new `edu` row     → 146,900 AED  ($40k flat)
- all persona attire (kandura, vest, suit, robot-doctor, security-guard) → 5,000 AED
- `custom-color` unchanged at 3,500 AED
- PricingEngine now swaps the base line when EDU body is selected
- localStorage key bumped to `lootah-pricing-v2` to invalidate stale client caches
- Robot Body buttons now describe the variants as `Standard consumer` vs `Open-source education / research` (same chassis GLB, differs in licensing)
- New `prisma/update-prices.ts` idempotent script applies the new prices to an existing DB; seed.ts updated for fresh installs
- Pricing tests updated to match new defaults

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:40:04 +04:00
Najjar\NajjarV02andClaude Opus 4.7 03dbc4ac98 feat(configure): add Basic vs EDU robot body selector under Persona Attire
- New `activeBody` field in config store with `setBody` action and URL sync (`b` key, defaults to `basic` for backward compat)
- Robot Body section in ConfigPanel between Persona Attire and Pricing
- RobotModel base mesh extracted into BaseBodyMesh subcomponent wrapped in error boundary so a missing EDU GLB silently falls back to basic
- Tests cover defaults, setBody, reset, and round-trip serialization

Note: drop `/public/Unitree_G1_EDU.glb` to enable the EDU variant — until then EDU selection falls back to basic with a console warning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:11:14 +04:00
Najjar\NajjarV02 c26338f355 perf: preload robot-doctor and security-guard GLBs in background on page load
CI/CD / test-and-build (push) Has been cancelled
CI/CD / deploy (push) Has been cancelled
2026-04-20 16:13:12 +04:00
Najjar\NajjarV02 1e128466f3 fix: prevent duplicate persona entries (race condition in hydrate), remove accidental 54MB file
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 15:59:17 +04:00
Najjar\NajjarV02 2ff21c5b54 perf: compress GLBs 75%, add Draco decoder, loading spinner for attire
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 15:52:00 +04:00
Najjar\NajjarV02 b2a484f402 fix: dynamic attire buttons in ScrollOverlays + mobile touch support
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 15:13:34 +04:00
Najjar\NajjarV02 320b77b32b fix: contacts API - use ADMIN_JWT_SECRET env var
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 14:31:21 +04:00
Najjar\NajjarV02 25ffbf4b5d feat: add favicon and app icons for PWA support
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 13:53:43 +04:00
Najjar\NajjarV02 4d145ae7b0 feat: add FooterAndContact component and privacy policy page
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 12:07:23 +04:00
Najjar\NajjarV02 e686d41d26 fix: use configStore.getState().setPersonaAttire in ScrollOverlays
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 12:00:20 +04:00