Compare commits

...

13 Commits

Author SHA1 Message Date
884911cbda Merge version_31_1783008052342 into main
Merge version_31_1783008052342 into main
2026-07-02 16:02:25 +00:00
kudinDmitriyUp
8826f83bf2 Bob AI: Removed FAQ section to show only reels 2026-07-02 16:01:44 +00:00
31780164e7 Merge version_30_1783007708422 into main
Merge version_30_1783007708422 into main
2026-07-02 15:57:22 +00:00
kudinDmitriyUp
a721f956f2 Bob AI: Populate src/pages/FishingReelsPage.tsx (snippet builder, 3 sections) 2026-07-02 15:56:43 +00:00
kudinDmitriyUp
6bcf853ae9 Bob AI: Add fishing-reels page 2026-07-02 15:55:54 +00:00
8ff4b79a3a Switch to version 26: remove src/pages/ReelsProductsPage.tsx 2026-06-22 19:14:53 +00:00
880bfc8721 Switch to version 26: modified src/routes.ts 2026-06-22 19:14:53 +00:00
a904271708 Switch to version 26: modified src/components/Layout.tsx 2026-06-22 19:14:53 +00:00
431ae43bf5 Switch to version 26: modified src/App.tsx 2026-06-22 19:14:52 +00:00
3fe6520c1b Switch to version 27: modified src/pages/ProductsPage.tsx 2026-06-22 19:14:44 +00:00
7d6ee33171 Switch to version 28: modified src/pages/ReelsProductsPage.tsx 2026-06-22 19:14:36 +00:00
dc737bcd5d Merge version_29_1782154552263 into main
Merge version_29_1782154552263 into main
2026-06-22 18:56:08 +00:00
21ebeaf352 Merge version_28_1782154323405 into main
Merge version_28_1782154323405 into main
2026-06-22 18:53:52 +00:00
8 changed files with 66 additions and 28 deletions

View File

@@ -3,14 +3,14 @@ import Layout from './components/Layout';
import HomePage from './pages/HomePage';
import ProductsPage from "@/pages/ProductsPage";
import ReelsProductsPage from "@/pages/ReelsProductsPage";
import FishingReelsPage from "@/pages/FishingReelsPage";
export default function App() {
return (
<Routes>
<Route element={<Layout />}>
<Route path="/" element={<HomePage />} />
<Route path="/products" element={<ProductsPage />} />
<Route path="/reels-products" element={<ReelsProductsPage />} />
<Route path="/fishing-reels" element={<FishingReelsPage />} />
</Route>
</Routes>
);

View File

@@ -29,7 +29,7 @@ export default function Layout() {
"name": "Brands", "href": "#brands"
},
{ name: "Products", href: "/products" },
{ name: "Reels Products", href: "/reels-products" },
{ name: "Fishing Reels", href: "/fishing-reels" },
];

View File

@@ -0,0 +1,18 @@
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in the sibling sections/ folder (one file per section).
// Edit those section files directly. Non-block content (wrappers,
// non-inlinable sections) is preserved inline; extracted section blocks
// become component refs.
import React from 'react';
import HeroSplitSection from './FishingReelsPage/sections/HeroSplit';
import ProductRatingCardsSection from './FishingReelsPage/sections/ProductRatingCards';
export default function FishingReelsPage(): React.JSX.Element {
return (
<>
<HeroSplitSection />
<ProductRatingCardsSection />
</>
);
}

View File

@@ -0,0 +1,15 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "HeroSplit" section.
import React from 'react';
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
export default function HeroSplitSection(): React.JSX.Element {
return (
<div data-webild-section="HeroSplit"><section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh pt-25 pb-20 md:py-0"><HeroBackgroundSlot /><div className="flex flex-col md:flex-row items-center gap-12 md:gap-20 w-content-width mx-auto"><div className="w-full md:w-1/2"><div className="flex flex-col items-center md:items-start gap-3"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Premium Fishing Reels</p></div><TextAnimation text="Engineered for the Toughest Catch" variant="slide-up" gradientText={true} tag="h1" className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance" /><TextAnimation text="Discover our rugged, high-performance fishing reels designed for marine professionals and serious anglers. Built to withstand saltwater and deliver unmatched reliability." variant="slide-up" gradientText={false} tag="p" className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance" /><div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3"><Button text="Shop Reels" href="#products" variant="primary" /><Button text="View Specs" href="#specifications" variant="secondary" animationDelay={0.1} /></div></div></div><ScrollReveal variant="fade-blur" delay={0.2} className="w-full md:w-1/2 h-100 md:h-[65vh] md:max-h-[75svh] p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://img.freepik.com/free-photo/close-up-fishing-rod-with-reel_23-2148813250.jpg" /></ScrollReveal></div></section></div>
);
}

View File

@@ -0,0 +1,11 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "ProductRatingCards" section.
import React from 'react';
import { Star, Loader2 } from "lucide-react";
export default function ProductRatingCardsSection(): React.JSX.Element {
return (
<div data-webild-section="ProductRatingCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
);
}

View File

@@ -4,15 +4,28 @@ import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import AvatarGroup from "@/components/ui/AvatarGroup";
import { ArrowUpRight, Loader2 } from "lucide-react";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import useProducts from "@/hooks/useProducts";
import ProductQuantityCards from "@/components/sections/product/ProductQuantityCards";
import FeaturesAttributeCards from "@/components/sections/features/FeaturesAttributeCards";
export default function ProductsPage() {
return (
<>
<div data-webild-section="HeroBillboard"><section aria-label="Hero section" className="relative pt-25 pb-20 md:pt-30"><HeroBackgroundSlot /><div className="flex flex-col gap-12 md:gap-15 w-content-width mx-auto"><div className="flex flex-col items-center gap-3 text-center"><AvatarGroup avatarsSrc={["https://img.freepik.com/free-photo/portrait-fisherman-holding-fishing-rod_23-2148995383.jpg","https://img.freepik.com/free-photo/man-fishing-river_1303-22363.jpg","https://img.freepik.com/free-photo/close-up-man-holding-fish_23-2148995395.jpg"]} label="Trusted by pro anglers" className="mb-1" /><TextAnimation text="High-Performance Offshore Lures" variant="fade-blur" gradientText={true} tag="h1" className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Equip yourself with rugged, proven lures designed to attract marlin, tuna, and wahoo. Built for the toughest offshore conditions." variant="fade-blur" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Shop Lures" href="#shop" variant="primary" /><Button text="View Categories" href="#categories" variant="secondary" animationDelay={0.1} /></div></div><ScrollReveal variant="slide-up" delay={0.2} className="w-full p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://img.freepik.com/premium-photo/colorful-fishing-lure-with-hooks-water_1048944-18451833.jpg" className="aspect-4/5 md:aspect-video" /></ScrollReveal></div></section></div>
<div data-webild-section="ProductMediaCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
<div data-webild-section="HeroBillboard"><section aria-label="Hero section" className="relative pt-25 pb-20 md:pt-30"><HeroBackgroundSlot /><div className="flex flex-col gap-12 md:gap-15 w-content-width mx-auto"><div className="flex flex-col items-center gap-3 text-center"><AvatarGroup avatarsSrc={["https://img.freepik.com/free-photo/portrait-white-man-isolated_53876-40306.jpg","https://img.freepik.com/free-photo/close-up-portrait-young-bearded-man-white-shirt-jacket-posing-camera-isolated-blue-background_1258-100020.jpg","https://img.freepik.com/free-photo/handsome-confident-smiling-man-with-hands-crossed-chest_176420-18743.jpg"]} label="Trusted by Carlos R., Maria L., and local anglers" className="mb-1" /><TextAnimation text="High-Performance Fishing Rods" variant="fade-blur" gradientText={true} tag="h1" className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Browse our extensive inventory of premium fishing rods. Check real-time stock, compare pricing, and choose between fast shipping or in-store pickup." variant="fade-blur" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Shop All Rods" href="#categories" variant="primary" /><Button text="View In-Stock" href="#in-stock" variant="secondary" animationDelay={0.1} /></div></div><ScrollReveal variant="slide-up" delay={0.2} className="w-full p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://picsum.photos/seed/989317248/1200/800" className="aspect-4/5 md:aspect-video" /></ScrollReveal></div></section></div>
<div data-webild-section="ProductQuantityCards"><ProductQuantityCards
tag="Rods Inventory"
title="High-Performance Fishing Rods"
description="Browse our selection of heavy-duty and lightweight rods. Built for durability and precision on the water."
primaryButton={{"text":"View All Categories","href":"/products"}}
products={[{"name":"Offshore Heavy Duty Rod","price":"$149.99","imageSrc":"https://img.freepik.com/free-photo/fishing-rod-lake_1150-12345.jpg"},{"name":"Inshore Spinning Rod","price":"$89.99","imageSrc":"https://img.freepik.com/free-photo/close-up-fishing-rod_23-2148138900.jpg"},{"name":"Carbon Fiber Casting Rod","price":"$129.99","imageSrc":"https://img.freepik.com/free-photo/fishing-equipment-wooden-background_23-2148138915.jpg"},{"name":"Telescopic Travel Rod","price":"$59.99","imageSrc":"https://img.freepik.com/free-photo/fishing-rod-with-reel-lake_23-2148138930.jpg"}]}
/></div>
<div data-webild-section="FeaturesAttributeCards"><FeaturesAttributeCards
tag="Premium Rods"
title="High-Performance Fishing Rods"
description="Explore our curated selection of rugged fishing rods. Built for durability and precision, available for immediate pickup or fast shipping."
primaryButton={{"text":"View All Gear","href":"/products"}}
secondaryButton={{"text":"Shipping Policy","href":"/shipping"}}
items={[{"title":"Kraken Offshore Troller","tags":"Saltwater • Heavy Power","badge":"In Stock","details":[{"icon":"DollarSign","label":"Price","value":"$249.99"},{"icon":"Package","label":"Inventory","value":"12 units"},{"icon":"Truck","label":"Fulfillment","value":"Ship / Pickup"}],"imageSrc":"https://img.freepik.com/premium-photo/fishing-rod-reel-boat-sea_1048944-2453186.jpg"},{"title":"Coastal Carbon Spinner","tags":"Inshore • Medium-Heavy","badge":"Low Stock","details":[{"icon":"DollarSign","label":"Price","value":"$159.00"},{"icon":"Package","label":"Inventory","value":"3 units"},{"icon":"Store","label":"Fulfillment","value":"Pickup Only"}],"imageSrc":"https://img.freepik.com/free-photo/close-up-fishing-rod-with-reel_23-2148138914.jpg"},{"title":"Tidal Wave Surf Caster","tags":"Surf • Extra Heavy","badge":"In Stock","details":[{"icon":"DollarSign","label":"Price","value":"$189.50"},{"icon":"Package","label":"Inventory","value":"24 units"},{"icon":"Truck","label":"Fulfillment","value":"Ship / Pickup"}],"imageSrc":"https://img.freepik.com/premium-photo/man-fishing-beach-with-fishing-rod_1048944-1845123.jpg"},{"title":"Lake Phantom Baitcaster","tags":"Freshwater • Medium","badge":"Out of Stock","details":[{"icon":"DollarSign","label":"Price","value":"$129.99"},{"icon":"Package","label":"Inventory","value":"0 units"},{"icon":"Clock","label":"Fulfillment","value":"Backorder"}],"imageSrc":"https://img.freepik.com/free-photo/fishing-rod-lake-with-nature-background_1150-15345.jpg"}]}
/></div>
</>
);
}

View File

@@ -1,19 +0,0 @@
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import AvatarGroup from "@/components/ui/AvatarGroup";
import { Star, Loader2 } from "lucide-react";
import { cls } from "@/lib/utils";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import useProducts from "@/hooks/useProducts";
export default function ReelsProductsPage() {
return (
<>
<div data-webild-section="HeroBillboard"><section aria-label="Hero section" className="relative pt-25 pb-20 md:pt-30"><HeroBackgroundSlot /><div className="flex flex-col gap-12 md:gap-15 w-content-width mx-auto"><div className="flex flex-col items-center gap-3 text-center"><AvatarGroup avatarsSrc={["https://img.freepik.com/free-photo/portrait-smiling-fisherman-holding-fishing-rod_23-2148019154.jpg","https://img.freepik.com/free-photo/young-man-fishing-lake_1303-22314.jpg","https://img.freepik.com/free-photo/cheerful-fisherman-holding-his-catch_23-2148019168.jpg"]} label="Trusted by Carlos R., Maria L., and our community of anglers" className="mb-1" /><TextAnimation text="Engineered for the Perfect Catch" variant="fade-blur" gradientText={true} tag="h1" className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Discover our curated collection of high-performance fishing reels. Built for durability and precision, these reels are ready for your next adventure on the water." variant="fade-blur" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Shop Reels" href="/reels-products" variant="primary" /><Button text="Read Guide" href="/reel-guide" variant="secondary" animationDelay={0.1} /></div></div><ScrollReveal variant="slide-up" delay={0.2} className="w-full p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://storage.googleapis.com/webild/users/user_3E7geerNBaObnLeEmBO57i03va7/uploaded-1782150224261-fpd6ao9v.png" className="aspect-4/5 md:aspect-video" /></ScrollReveal></div></section></div>
<div data-webild-section="ProductRatingCards"><section aria-label="Products section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
</>
);
}

View File

@@ -7,5 +7,5 @@ export interface Route {
export const routes: Route[] = [
{ path: '/', label: 'Home', pageFile: 'HomePage' },
{ path: '/products', label: 'Products', pageFile: 'ProductsPage' },
{ path: '/reels-products', label: 'Reels Products', pageFile: 'ReelsProductsPage' },
{ path: '/fishing-reels', label: 'Fishing Reels', pageFile: 'FishingReelsPage' },
];