89 Commits

Author SHA1 Message Date
Najjar\NajjarV02
c2490947d2 fix: favicon uses official Lootah Robotics logo instead of gold icon
Some checks failed
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\NajjarV02
7bb71dc707 fix: mobile configurator shows robot above price panel
Some checks failed
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\NajjarV02
60e1ea8407 fix: mobile configurator panel flows in-page so Proceed button is reachable
Some checks are pending
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
Some checks failed
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
Some checks are pending
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\NajjarV02
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
Some checks are pending
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\NajjarV02
4c415cd5ea fix: bento tiles full-width below 900px (no two-up on mobile)
Some checks are pending
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\NajjarV02
8d4fe60f28 fix: BentoGrid flagship tile mobile overlap
Some checks are pending
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\NajjarV02
5a40f6b733 perf: aggressive webp re-compression + max-width 1920 resize
Some checks are pending
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\NajjarV02
dda358b59d perf: convert all images to webp, update references
Some checks are pending
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\NajjarV02
de25d774af content: page copy refinements + accessory rich data extensions
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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.
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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\NajjarV02
2eac53dac3 feat(seed): update pricing item seeding to upsert on every deploy
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-19 17:46:22 +04:00
Najjar\NajjarV02
fe5f1ce25f Refactor code structure for improved readability and maintainability
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-05-19 17:44:20 +04:00
Najjar\NajjarV02
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\NajjarV02
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
Some checks failed
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
dcb6a9bb43 feat: add new GLB models for police mannequin, medical professional, robot doctor, and security guard
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 16:03:43 +04:00
Najjar\NajjarV02
e220d83397 revert: use original uncompressed GLBs (robot-doctor 30MB, security-guard 38.8MB)
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 16:02:37 +04:00
Najjar\NajjarV02
3741d7386d chore: remove raw uncompressed GLBs from repo root (keep compressed versions in public/models)
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 16:00:34 +04:00
Najjar\NajjarV02
1e128466f3 fix: prevent duplicate persona entries (race condition in hydrate), remove accidental 54MB file
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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
822ab076b4 Refactor code structure for improved readability and maintainability
Some checks are pending
CI/CD / test-and-build (push) Waiting to run
CI/CD / deploy (push) Blocked by required conditions
2026-04-20 13:57:21 +04:00
Najjar\NajjarV02
25ffbf4b5d feat: add favicon and app icons for PWA support
Some checks are pending
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
Some checks are pending
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
Some checks are pending
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