diff --git a/vula-index.json b/vula-index.json new file mode 100644 index 0000000..b6c53f8 --- /dev/null +++ b/vula-index.json @@ -0,0 +1,619 @@ +{ + "projectName": "Kasi Wear", + "businessType": "", + "industry": "", + "tone": "", + "tier": 3, + "generatedAt": "2026-07-27T17:28:21.563Z", + "sections": [ + { + "name": "KasiHeroSection", + "importPath": "@/components/sections/KasiHeroSection", + "position": 0, + "role": "hero", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "flex-row", + "headings": [ + "{d.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "react", + "next/image", + "next/link", + "@/components/ui/Button", + "@/hooks/useVulaContent", + "hero_banners", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "kasi-hero", + "kasihero", + "relative h-[70vh] lg:h-[85vh] overflow-hidden bg-[#18181b]", + "absolute inset-0", + "Kasi Wear banner", + "100vw", + "object-cover opacity-70", + "absolute inset-0 flex items-center justify-center bg-gradient-to-r from-black/60 to-transparent", + "text-center px-6 max-w-3xl", + "text-4xl md:text-6xl lg:text-7xl font-black uppercase text-white leading-tight", + "mt-4 text-lg md:text-xl text-gray-200 max-w-xl mx-auto", + "mt-8", + "default", + "lg", + "bg-[#dc2626] hover:bg-red-700 text-white border-0", + "Shop the look", + "absolute bottom-6 left-1/2 -translate-x-1/2 flex gap-3", + "bg-[#d4af37] scale-125", + "bg-white/50" + ], + "cmsCollection": "hero_banners" + }, + { + "name": "KasiSelectSection", + "importPath": "@/components/sections/KasiSelectSection", + "position": 1, + "role": "unknown", + "hasImage": true, + "hasForm": false, + "itemCount": 9, + "layout": "grid", + "headings": [ + "Kasi Select", + "{p.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useMedusaProducts", + "@/hooks/useMedusaCart", + "@/components/ui/Card", + "@/components/ui/Button", + "next/image", + "next/link", + "KSh", + "kasiselect", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "cart-drawer-open", + "kasi-select", + "py-20 bg-white", + "max-w-7xl mx-auto px-4", + "text-center mb-12", + "text-3xl md:text-5xl font-black uppercase text-[#18181b]", + "Kasi Select", + "mt-3 text-gray-600 max-w-xl mx-auto", + "8 hand-picked limited-edition pieces — each piece iyi-story.", + "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6", + "group cursor-pointer hover:shadow-[6px_6px_0_0_#18181b] transition-all duration-200 ease-out border-2 border-[#18181b]", + "block", + "relative aspect-square overflow-hidden border-b-2 border-[#18181b]", + "(max-width: 768px) 50vw, 25vw", + "object-cover group-hover:scale-105 transition-transform duration-500 ease-out", + "p-3", + "font-bold text-sm uppercase truncate text-[#18181b]", + "text-[#dc2626] font-extrabold text-lg mt-1", + "p-3 pt-0", + "default", + "sm", + "w-full bg-[#18181b] hover:bg-black text-white uppercase tracking-wider", + "Gcwalisa" + ] + }, + { + "name": "FeaturedProductsSection", + "importPath": "@/components/sections/FeaturedProductsSection", + "position": 2, + "role": "services", + "hasImage": false, + "hasForm": false, + "itemCount": 11, + "layout": "grid", + "headings": [ + "Featured Products" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useFeaturedProducts", + "next/link", + "lucide-react", + "@/hooks/useMedusaCart", + "KSh", + "py-20", + "container mx-auto px-4", + "grid grid-cols-2 md:grid-cols-4 gap-6", + "aspect-square rounded-xl bg-muted animate-pulse", + "featuredproducts", + "flex items-center justify-between mb-10", + "text-xs uppercase tracking-widest text-primary font-semibold mb-1", + "Curated for You", + "text-3xl font-bold text-foreground", + "Featured Products", + "text-sm font-semibold text-primary hover:underline underline-offset-4", + "View all →", + "group bg-card rounded-xl overflow-hidden border border-border hover:shadow-md transition-all", + "block", + "relative aspect-square bg-muted", + "w-full h-full object-cover group-hover:scale-105 transition-transform duration-500", + "w-full h-full flex items-center justify-center", + "h-8 w-8 text-muted-foreground/30", + "p-4", + "text-sm font-semibold text-foreground line-clamp-2 mb-1 hover:text-primary transition-colors", + "text-sm font-bold text-primary mb-3", + "cart-drawer-open", + "w-full text-xs bg-primary/10 text-primary hover:bg-primary hover:text-primary-foreground py-2 rounded-lg transition-colors font-medium disabled:opacity-40", + "Add to Cart" + ] + }, + { + "name": "FreshKasiDropsSection", + "importPath": "@/components/sections/FreshKasiDropsSection", + "position": 3, + "role": "unknown", + "hasImage": true, + "hasForm": false, + "itemCount": 10, + "layout": "grid", + "headings": [ + "{product.title}", + "Fresh Kasi Drops" + ], + "buttonLabels": [ + "Bamba i-drop" + ], + "people": [], + "allText": [ + "use client", + "@/hooks/useMedusaProducts", + "@/hooks/useMedusaCart", + "@/components/ui/Button", + "@/components/ui/Badge", + "@/components/ui/Card", + "next/image", + "next/link", + "lucide-react", + "KSh", + "cart-drawer-open", + "relative border-[3px] border-[#18181b] shadow-[4px_4px_0_0_#dc2626] group", + "block", + "relative aspect-square overflow-hidden", + "(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 25vw", + "object-cover transition-transform duration-500 ease-out group-hover:scale-105", + "h-full w-full bg-gray-100 flex items-center justify-center", + "w-12 h-12 text-gray-400", + "absolute inset-0 bg-[#18181b]/0 group-hover:bg-[#18181b]/30 transition-all duration-200 ease-out flex items-center justify-center opacity-0 group-hover:opacity-100", + "w-8 h-8 text-white", + "accent", + "absolute top-2 left-2 uppercase text-xs font-bold bg-[#dc2626] text-white border-0", + "Limited stock", + "p-4", + "font-bold uppercase text-sm text-[#18181b] truncate", + "text-[#dc2626] font-black text-lg mt-1", + "default", + "sm", + "w-full mt-3 uppercase bg-[#d4af37] hover:bg-[#b8962e] text-[#18181b] font-bold", + "Bamba i-drop", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "fresh-kasi-drops", + "bg-[#ffffff] py-16 px-4", + "max-w-6xl mx-auto", + "mb-10 border-b-[3px] border-[#d4af37] pb-4", + "bg-[#dc2626] text-white font-black uppercase text-sm px-4 py-1 inline-block mb-2", + "Fresh off the press", + "text-4xl font-black uppercase tracking-tighter text-[#18181b]", + "Fresh Kasi Drops", + "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6" + ] + }, + { + "name": "ProductCarouselSection", + "importPath": "@/components/sections/ProductCarouselSection", + "position": 4, + "role": "services", + "hasImage": true, + "hasForm": false, + "itemCount": 4, + "layout": "flex-row", + "headings": [ + "{section.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "next/image", + "next/link", + "@/lib/cms", + "KSh", + "x-publishable-api-key", + "py-8 px-4", + "max-w-7xl mx-auto", + "text-xl font-bold mb-5", + "flex gap-4 overflow-x-auto pb-3 scrollbar-hide snap-x snap-mandatory", + "flex-none snap-start w-44 group", + "relative h-44 w-44 rounded-xl overflow-hidden bg-muted mb-2 group-hover:shadow-md transition-shadow", + "object-cover group-hover:scale-105 transition-transform duration-300", + "w-full h-full flex items-center justify-center text-muted-foreground text-xs", + "No image", + "text-xs font-medium line-clamp-2 group-hover:text-primary transition-colors mb-1", + "text-xs font-bold text-primary" + ] + }, + { + "name": "MostPopularSection", + "importPath": "@/components/sections/MostPopularSection", + "position": 5, + "role": "unknown", + "hasImage": false, + "hasForm": false, + "itemCount": 12, + "layout": "grid", + "headings": [ + "Most Popular" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "react", + "@/hooks/useMedusaCart", + "@/hooks/useMedusaProducts", + "next/link", + "lucide-react", + "KSh", + "py-20", + "container mx-auto px-4", + "grid grid-cols-2 md:grid-cols-4 gap-6", + "aspect-square rounded-xl bg-muted animate-pulse", + "mostpopular", + "flex items-center justify-between mb-10", + "flex items-center gap-3", + "h-6 w-6 text-primary", + "text-xs uppercase tracking-widest text-primary font-semibold mb-1", + "Best Sellers", + "text-3xl font-bold text-foreground", + "Most Popular", + "text-sm font-semibold text-primary hover:underline underline-offset-4 hidden md:inline-flex items-center gap-1", + "View all →", + "grid grid-cols-2 lg:grid-cols-4 gap-6", + "group bg-card rounded-xl overflow-hidden border border-border hover:shadow-md transition-all relative", + "absolute top-2 left-2 z-10 bg-primary text-primary-foreground text-xs font-semibold px-2 py-0.5 rounded-full", + "Best Seller", + "block overflow-hidden", + "relative aspect-square bg-muted", + "w-full h-full object-cover group-hover:scale-105 transition-transform duration-300", + "w-full h-full flex items-center justify-center", + "h-8 w-8 text-muted-foreground/30", + "p-4", + "text-sm font-semibold text-foreground line-clamp-2 mb-1 hover:text-primary transition-colors", + "text-sm font-bold text-primary mb-3", + "cart-drawer-open", + "w-full text-xs bg-primary/10 text-primary hover:bg-primary hover:text-primary-foreground py-2 rounded-lg transition-colors font-medium disabled:opacity-40", + "Add to Cart" + ] + }, + { + "name": "SowetoStyleGallerySection", + "importPath": "@/components/sections/SowetoStyleGallerySection", + "position": 6, + "role": "gallery", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Soweto Style Gallery", + "{d.title ?? ''}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "next/image", + "gallery", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "soweto-style-gallery", + "bg-[#18181b] py-16 px-4", + "max-w-6xl mx-auto", + "text-4xl font-black uppercase tracking-tighter text-[#ffffff] mb-2", + "Soweto Style Gallery", + "text-[#d4af37] font-bold uppercase text-sm mb-8 tracking-widest", + "Check the drip", + "grid grid-cols-2 md:grid-cols-3 gap-4", + "relative overflow-hidden border-[3px] border-[#d4af37] shadow-[4px_4px_0_0_#dc2626] group cursor-pointer", + "relative aspect-square", + "Gallery photo", + "(max-width: 768px) 50vw, 33vw", + "object-cover transition-transform duration-500 ease-out group-hover:scale-105", + "aspect-square bg-gray-800 flex items-center justify-center", + "text-gray-500 uppercase text-sm", + "No image", + "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-[#18181b]/80 to-transparent p-3", + "text-white font-bold uppercase text-sm truncate", + "text-gray-300 text-xs mt-1 truncate", + "text-[#d4af37] text-xs font-bold mt-1 block", + "#WearYourKasi" + ], + "cmsCollection": "gallery" + }, + { + "name": "AdvertBannerSection", + "importPath": "@/components/sections/AdvertBannerSection", + "position": 7, + "role": "hero", + "hasImage": true, + "hasForm": false, + "itemCount": 4, + "layout": "flex-row", + "headings": [ + "{headline}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "next/image", + "next/link", + "@/lib/cms", + "relative w-full overflow-hidden rounded-2xl my-8 mx-auto max-w-7xl px-4", + "relative h-64 md:h-80 w-full", + "object-cover rounded-2xl", + "absolute inset-0 bg-black/45 rounded-2xl", + "absolute inset-0 flex flex-col items-center justify-center text-center px-6 gap-3", + "text-2xl md:text-4xl font-bold text-white drop-shadow", + "text-sm md:text-base text-white/90", + "mt-2 inline-block bg-white text-black font-semibold px-6 py-2 rounded-full hover:bg-primary hover:text-white transition-colors text-sm", + "flex flex-col items-center justify-center gap-3 py-16 px-6 text-center bg-primary/10 rounded-2xl", + "text-2xl md:text-3xl font-bold", + "text-muted-foreground", + "inline-block bg-primary text-white font-semibold px-6 py-2 rounded-full hover:bg-primary/80 transition-colors text-sm" + ] + }, + { + "name": "BrandCarouselSection", + "importPath": "@/components/sections/BrandCarouselSection", + "position": 8, + "role": "partners", + "hasImage": true, + "hasForm": false, + "itemCount": 4, + "layout": "flex-row", + "headings": [ + "Shop by Collection" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "react", + "next/link", + "next/image", + "py-10 px-4", + "max-w-7xl mx-auto", + "text-xl font-bold mb-5", + "Shop by Collection", + "flex gap-4 overflow-x-auto pb-3 scrollbar-hide snap-x snap-mandatory", + "flex-none snap-start w-36 group", + "relative h-36 w-36 rounded-2xl overflow-hidden bg-muted mb-2 group-hover:shadow-md transition-shadow", + "object-cover group-hover:scale-105 transition-transform duration-300", + "w-full h-full flex items-center justify-center text-3xl font-bold text-primary/30 uppercase", + "text-xs font-medium text-center line-clamp-2 group-hover:text-primary transition-colors" + ] + }, + { + "name": "AmacampaignsSection", + "importPath": "@/components/sections/AmacampaignsSection", + "position": 9, + "role": "cms-campaigns", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Amacampaigns", + "{d.title ?? d.headline ?? ''}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "@/components/ui/Button", + "next/image", + "campaigns", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "amacampaigns", + "bg-[#ffffff] py-16 px-4", + "max-w-6xl mx-auto", + "text-4xl font-black uppercase tracking-tighter text-[#18181b] mb-8 border-b-[3px] border-[#d4af37] pb-4", + "Amacampaigns", + "grid grid-cols-1 md:grid-cols-2 gap-6", + "relative overflow-hidden border-[3px] border-[#18181b] shadow-[6px_6px_0_0_#dc2626]", + "relative h-56 md:h-64", + "Campaign", + "(max-width: 768px) 100vw, 50vw", + "object-cover", + "absolute inset-0 bg-gradient-to-t from-[#18181b]/70 to-transparent", + "p-6 bg-[#ffffff]", + "text-xl font-black uppercase tracking-wide text-[#18181b]", + "text-[#d4af37] font-bold uppercase text-sm mt-1", + "text-gray-700 mt-2 text-sm leading-relaxed", + "default", + "md", + "mt-4 uppercase bg-[#dc2626] hover:bg-[#b91c1c] text-white font-bold" + ], + "cmsCollection": "campaigns" + }, + { + "name": "IndabaYethuSection", + "importPath": "@/components/sections/IndabaYethuSection", + "position": 10, + "role": "unknown", + "hasImage": false, + "hasForm": false, + "itemCount": 8, + "layout": "flex-row", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "next/image", + "indabayethu", + "indaba-yethu", + "relative min-h-[90vh] bg-[#18181b] overflow-hidden", + "absolute inset-0 bg-fixed bg-center bg-cover", + "absolute inset-0 bg-gradient-to-r from-black/80 via-black/60 to-transparent", + "relative z-10 flex items-center min-h-[90vh] px-6 lg:px-16", + "max-w-2xl", + "inline-block uppercase tracking-[0.3em] text-[#d4af37] text-sm font-bold mb-4 border-b-2 border-[#d4af37] pb-1", + "Our Roots", + "text-4xl md:text-6xl font-black uppercase text-white leading-tight", + "From Soweto Garage", + "text-[#dc2626]", + "to Your Wardrobe", + "mt-6 text-lg md:text-xl text-gray-200 leading-relaxed", + "Kasi Wear started not just to sell, but to weave the spirit of e kasi into every stitch.\n What began as a dream in a Soweto garage has grown into a movement that celebrates\n African-print streetwear — hoodies, caps, and tees that carry our stories.\n Each piece iyi-story, every drop a celebration of township pride.", + "mt-10 flex flex-wrap gap-8 text-white", + "text-5xl font-black text-[#d4af37]", + "2018", + "text-sm uppercase tracking-widest mt-1", + "Founded", + "50+", + "Drops", + "12K", + "Customers" + ] + }, + { + "name": "StayFreshSection", + "importPath": "@/components/sections/StayFreshSection", + "position": 11, + "role": "unknown", + "hasImage": false, + "hasForm": true, + "itemCount": 2, + "layout": "flex-row", + "headings": [ + "Faka i-email yakho" + ], + "buttonLabels": [ + "Join" + ], + "people": [], + "allText": [ + "use client", + "react", + "@/components/ui/Button", + "@/components/ui/Input", + "stayfresh", + "stay-fresh", + "bg-[#18181b] text-white py-20", + "container mx-auto px-4", + "max-w-3xl mx-auto text-center", + "text-4xl md:text-5xl font-black uppercase tracking-tight mb-4", + "Faka i-email yakho", + "text-lg text-[#d4af37] font-semibold mb-8", + "Stay ahead of the culture. Early drop access, exclusive drops.", + "text-2xl text-[#d4af37] font-bold", + "Signed up! We'll be in touch.", + "flex flex-col sm:flex-row gap-4 justify-center", + "email", + "your@email.com", + "bg-black border-2 border-[#d4af37] text-white placeholder-gray-400 rounded-none px-6 py-3 text-lg flex-1 max-w-sm", + "submit", + "default", + "bg-[#d4af37] text-black font-extrabold uppercase tracking-wider px-8 py-3 rounded-none border-2 border-[#d4af37] hover:bg-black hover:text-[#d4af37] transition-all duration-200", + "Join" + ] + }, + { + "name": "SowetoBaseSection", + "importPath": "@/components/sections/SowetoBaseSection", + "position": 12, + "role": "unknown", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Soweto Base", + "Trading Hours" + ], + "buttonLabels": [ + "info@kasiwear.co.za", + "Visit Us" + ], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "next/image", + "lucide-react", + "@/components/ui/Button", + "business_hours", + "py-16 flex justify-center bg-white", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#d4af37]", + "soweto-base", + "sowetobase", + "py-20 bg-white", + "container mx-auto px-4", + "grid grid-cols-1 lg:grid-cols-2 gap-12", + "relative h-80 lg:h-auto overflow-hidden border-2 border-[#18181b] shadow-[8px_8px_0_0_#d4af37]", + "Soweto landscape", + "(max-width: 768px) 100vw, 50vw", + "object-cover", + "flex flex-col justify-center space-y-8", + "text-4xl font-black uppercase tracking-tight text-[#18181b]", + "Soweto Base", + "text-lg text-[#d4af37] font-semibold mt-2", + "Based in Soweto, Mzansi. Amaproud.", + "space-y-4 text-lg text-[#18181b]", + "flex items-start gap-3", + "w-6 h-6 text-[#d4af37] flex-shrink-0 mt-1", + "font-bold", + "Kasi Wear Studio", + "123 Vilakazi Street, Orlando West", + "Soweto, 1804, Gauteng, South Africa", + "flex items-center gap-3", + "w-6 h-6 text-[#d4af37]", + "tel:+27723456789", + "hover:text-[#d4af37]", + "+27 72 345 6789", + "mailto:info@kasiwear.co.za", + "info@kasiwear.co.za", + "border-t-2 border-[#d4af37] pt-6", + "text-2xl font-bold uppercase tracking-wide mb-4 text-[#18181b]", + "Trading Hours", + "grid grid-cols-1 gap-2 text-lg", + "flex justify-between border-b border-gray-200 py-1", + "font-medium text-[#18181b]", + "text-red-600 font-bold", + "Closed", + "text-[#18181b]", + "text-sm text-gray-500 ml-2", + "default", + "bg-[#d4af37] text-black font-extrabold uppercase tracking-wider px-8 py-4 rounded-none border-2 border-[#d4af37] hover:bg-black hover:text-[#d4af37] w-fit", + "Visit Us" + ], + "cmsCollection": "business_hours" + } + ], + "navigationLinks": [ + "Kasi Wear", + "Home", + "Indaba Yethu", + "Amacampaigns", + "Soweto Style Gallery", + "Soweto Base", + "Products" + ] +} \ No newline at end of file