diff --git a/vula-index.json b/vula-index.json new file mode 100644 index 0000000..5a60ca8 --- /dev/null +++ b/vula-index.json @@ -0,0 +1,677 @@ +{ + "projectName": "Vault by Mkhize", + "businessType": "", + "industry": "", + "tone": "", + "tier": 3, + "generatedAt": "2026-07-28T13:23:26.422Z", + "sections": [ + { + "name": "HeroSection", + "importPath": "@/components/sections/HeroSection", + "position": 0, + "role": "hero", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "flex-row", + "headings": [ + "{d.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "next/image", + "@/hooks/useVulaContent", + "hero_banners", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "hero", + "relative overflow-hidden bg-gray-900 text-white", + "relative min-h-[480px] flex items-center", + "object-cover opacity-40", + "relative z-10 max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-24", + "text-4xl sm:text-5xl font-bold mb-4 max-w-2xl", + "text-xl text-gray-200 mb-8 max-w-xl", + "inline-flex items-center px-8 py-3 bg-white text-gray-900 font-bold rounded-full hover:bg-gray-100 transition-colors" + ], + "cmsCollection": "hero_banners" + }, + { + "name": "LatestDropsSection", + "importPath": "@/components/sections/LatestDropsSection", + "position": 1, + "role": "unknown", + "hasImage": true, + "hasForm": false, + "itemCount": 10, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useMedusaProducts", + "@/hooks/useMedusaCart", + "@/components/ui/Card", + "@/components/ui/Button", + "@/components/ui/Badge", + "next/image", + "next/link", + "latestdrops", + "latest-drops", + "flex justify-center py-24 bg-[#0f0f17]", + "w-8 h-8 rounded-full border-2 border-[#c0c0c0] border-t-transparent animate-spin", + "py-24 px-6 bg-[#0f0f17]", + "max-w-7xl mx-auto", + "flex items-center justify-center gap-4 mb-10", + "block w-14 h-0.5 bg-[#c0c0c0]", + "text-3xl md:text-4xl font-light text-[#e7e7ee] font-['Cormorant_Garamond'] uppercase tracking-wider", + "Latest", + "italic text-[#c0c0c0]", + "Drops", + "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", + "Price on request", + "bg-[#18181b] border border-[#303040] hover:border-[#c0c0c0] transition-all duration-200 ease-out", + "block", + "aspect-square overflow-hidden", + "object-cover w-full h-full hover:scale-105 transition-transform duration-500 ease-out", + "p-4 pb-0", + "text-[#e7e7ee] font-['Cormorant_Garamond'] text-xl", + "p-4 pt-2", + "text-[#c0c0c0] font-semibold", + "p-4 pt-0", + "outline", + "sm", + "w-full border-[#c0c0c0] text-[#c0c0c0] hover:bg-[#c0c0c0] hover:text-[#0f0f17]", + "cart-drawer-open", + "Add to Cart" + ] + }, + { + "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": "MostPopularSection", + "importPath": "@/components/sections/MostPopularSection", + "position": 3, + "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": "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": "FeaturedCollectionsSection", + "importPath": "@/components/sections/FeaturedCollectionsSection", + "position": 5, + "role": "services", + "hasImage": true, + "hasForm": false, + "itemCount": 10, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useMedusaProducts", + "@/hooks/useMedusaCart", + "@/components/ui/Card", + "@/components/ui/Button", + "@/components/ui/Badge", + "next/image", + "next/link", + "featuredcollections", + "featured-collections", + "flex justify-center py-24 bg-[#18181b]", + "w-8 h-8 rounded-full border-2 border-[#c0c0c0] border-t-transparent animate-spin", + "py-24 px-6 bg-[#18181b]", + "max-w-7xl mx-auto", + "flex items-center justify-center gap-4 mb-12", + "block w-14 h-0.5 bg-[#c0c0c0]", + "text-3xl md:text-4xl font-light text-[#e7e7ee] font-['Cormorant_Garamond'] uppercase tracking-wider", + "Featured", + "italic text-[#c0c0c0]", + "Collections", + "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6", + "Price on request", + "bg-[#0f0f17] border border-[#303040] hover:border-[#c0c0c0] transition-all duration-200 ease-out", + "block", + "aspect-square overflow-hidden", + "object-cover w-full h-full hover:scale-105 transition-transform duration-500 ease-out", + "p-4 pb-0", + "text-[#e7e7ee] font-['Cormorant_Garamond'] text-lg", + "p-4 pt-2", + "text-[#c0c0c0] font-semibold", + "p-4 pt-0", + "outline", + "sm", + "w-full border-[#c0c0c0] text-[#c0c0c0] hover:bg-[#c0c0c0] hover:text-[#0f0f17]", + "cart-drawer-open", + "Add to Cart" + ] + }, + { + "name": "BrandCarouselSection", + "importPath": "@/components/sections/BrandCarouselSection", + "position": 6, + "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": "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": "AboutVaultSection", + "importPath": "@/components/sections/AboutVaultSection", + "position": 8, + "role": "about", + "hasImage": true, + "hasForm": false, + "itemCount": 10, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "next/image", + "aboutvault", + "about-vault", + "py-24 px-6 bg-[#0f0f17]", + "max-w-6xl mx-auto grid grid-cols-1 lg:grid-cols-2 gap-12 items-center", + "relative h-[400px] lg:h-[500px] overflow-hidden rounded-sm border border-[#303040]", + "Vault by Mkhize boutique interior, Johannesburg", + "(max-width: 768px) 100vw, 50vw", + "object-cover", + "absolute inset-0 bg-gradient-to-t from-[#0f0f17]/70 to-transparent", + "text-left", + "flex items-center gap-4 mb-6", + "block w-14 h-0.5 bg-[#c0c0c0]", + "text-[#c0c0c0] tracking-[0.2em] uppercase text-xs font-medium", + "Our Origin", + "text-4xl md:text-5xl font-light text-[#e7e7ee] font-['Cormorant_Garamond'] leading-tight mb-8", + "Curating", + "italic text-[#c0c0c0]", + "exclusivity", + "since 2020", + "space-y-4 text-[#e7e7ee]/70 text-base leading-relaxed", + "Vault by Mkhize was born in the heart of Sandton — a response to Johannesburg's hunger for\n sneakers that tell a story. We don't just sell shoes; we curate cultural artifacts from the\n world's most coveted labels: Nike, Adidas, and exclusive South African collaborations.", + "Every pair that enters our vault undergoes rigorous authentication by a team with over a decade\n of experience. We partner directly with global brands and local creatives to secure limited runs\n that never see the mass market. Our Rosebank showroom is an invitation to experience the craft.", + "For the collector who demands more than hype — who seeks provenance, rarity, and the quiet\n confidence of owning something few will ever see — Vault by Mkhize is your sanctuary.", + "mt-10 grid grid-cols-3 gap-6 text-center", + "text-2xl font-bold text-[#c0c0c0]", + "500+", + "text-xs text-[#e7e7ee]/50 uppercase tracking-wider", + "Curated releases", + "100%", + "Authenticity guaranteed", + "#1", + "SA luxury sneaker destination" + ] + }, + { + "name": "CampaignsSection", + "importPath": "@/components/sections/CampaignsSection", + "position": 9, + "role": "cms-campaigns", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Campaigns" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "@/components/ui/Card", + "@/components/ui/Button", + "@/components/ui/Badge", + "next/image", + "campaigns", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "py-24 bg-[#0f0f17]", + "container mx-auto px-4", + "text-3xl font-light text-[#e7e7ee] tracking-wide uppercase text-center mb-12", + "Campaigns", + "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", + "bg-[#18181b] border border-[#303040]", + "relative aspect-video overflow-hidden rounded-t-lg", + "(max-width: 768px) 100vw, 33vw", + "object-cover", + "accent", + "w-fit mb-2", + "text-[#e7e7ee] font-light", + "text-[#e7e7ee]/70 text-sm", + "outline", + "sm" + ], + "cmsCollection": "campaigns" + }, + { + "name": "GallerySection", + "importPath": "@/components/sections/GallerySection", + "position": 10, + "role": "gallery", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Gallery", + "{d.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "@/components/ui/Card", + "next/image", + "gallery", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "py-24 bg-[#0f0f17]", + "container mx-auto px-4", + "text-3xl font-light text-[#e7e7ee] tracking-wide uppercase text-center mb-12", + "Gallery", + "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", + "bg-[#18181b] border border-[#303040] overflow-hidden group relative", + "relative aspect-square", + "(max-width: 768px) 100vw, 33vw", + "object-cover transition-transform duration-500 group-hover:scale-105", + "absolute inset-0 bg-gradient-to-t from-black/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end p-4", + "text-white font-medium text-sm", + "text-white/70 text-xs mt-1" + ], + "cmsCollection": "gallery" + }, + { + "name": "JournalSection", + "importPath": "@/components/sections/JournalSection", + "position": 11, + "role": "blog", + "hasImage": true, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Journal" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "@/components/ui/Card", + "@/components/ui/Badge", + "next/image", + "posts", + "flex justify-center py-16", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin", + "journal", + "py-24 bg-[#0f0f17]", + "container mx-auto px-4", + "text-3xl font-light text-[#e7e7ee] tracking-wide uppercase text-center mb-12", + "Journal", + "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", + "bg-[#18181b] border border-[#303040] flex flex-col", + "relative aspect-video overflow-hidden rounded-t-lg", + "(max-width: 768px) 100vw, 33vw", + "object-cover", + "secondary", + "w-fit mb-2 text-xs", + "text-[#e7e7ee] font-light text-lg", + "flex-1", + "text-[#e7e7ee]/70 text-sm leading-relaxed", + "border-t border-[#303040] pt-3", + "text-[#c0c0c0] text-xs uppercase tracking-wider" + ], + "cmsCollection": "posts" + }, + { + "name": "AuthenticationGuaranteeSection", + "importPath": "@/components/sections/AuthenticationGuaranteeSection", + "position": 12, + "role": "unknown", + "hasImage": false, + "hasForm": false, + "itemCount": -1, + "layout": "grid", + "headings": [ + "{d.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "lucide-react", + "@/components/ui/Card", + "@/components/ui/Badge", + "policies", + "flex justify-center py-24", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#c0c0c0]", + "authentication-guarantee", + "authenticationguarantee", + "bg-[#0f0f17] py-24 lg:py-32 px-4", + "max-w-6xl mx-auto", + "flex items-center gap-4 mb-12", + "h-px w-14 bg-[#c0c0c0]", + "accent", + "tracking-widest uppercase text-xs", + "Trust Guarantee", + "font-serif text-3xl lg:text-4xl text-[#e7e7ee] mb-16 max-w-3xl leading-tight", + "Every pair authenticated", + "italic text-[#c0c0c0]", + "before it reaches your door", + "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", + "bg-[#18181b] border border-[#303040] rounded-lg overflow-hidden", + "p-8", + "mb-6", + "w-8 h-8 text-[#c0c0c0]", + "text-xl font-semibold text-[#e7e7ee] mb-3 font-sans", + "text-[#a0a0b0] leading-relaxed text-sm", + "mt-16 flex flex-wrap gap-10 justify-center text-xs uppercase tracking-widest text-[#c0c0c0]", + "flex items-center gap-2", + "w-4 h-4", + "Verified by third-party experts", + "100% satisfaction guarantee", + "Free returns within 7 days" + ], + "cmsCollection": "policies" + }, + { + "name": "ShopTheVaultCTASection", + "importPath": "@/components/sections/ShopTheVaultCTASection", + "position": 13, + "role": "cta", + "hasImage": false, + "hasForm": false, + "itemCount": 1, + "layout": "single", + "headings": [], + "buttonLabels": [ + "Enter The Vault" + ], + "people": [], + "allText": [ + "@/components/ui/Button", + "next/link", + "shop-the-vault", + "shopthevaultcta", + "bg-[#0f0f17] py-24 lg:py-32 px-4 border-t border-[#303040]", + "max-w-4xl mx-auto text-center", + "text-xs uppercase tracking-[0.2em] text-[#c0c0c0] mb-6", + "Sandton / Rosebank", + "font-serif text-3xl lg:text-5xl text-[#e7e7ee] leading-tight mb-8", + "Discover the rarest drops,", + "italic text-[#c0c0c0]", + "curated for you", + "text-[#a0a0b0] max-w-2xl mx-auto mb-10 text-sm leading-relaxed", + "Limited-edition Nike, Adidas, and exclusive SA collaborations.\n Each pair authenticated before it reaches your doorstep.", + "default", + "lg", + "bg-[#c0c0c0] text-[#0f0f17] hover:bg-[#d0d0d0] px-10 py-5 text-sm uppercase tracking-widest font-semibold", + "Enter The Vault" + ] + }, + { + "name": "ContactVaultSection", + "importPath": "@/components/sections/ContactVaultSection", + "position": 14, + "role": "contact", + "hasImage": false, + "hasForm": true, + "itemCount": -1, + "layout": "grid", + "headings": [ + "Request a Private Appointment" + ], + "buttonLabels": [ + "Send Enquiry" + ], + "people": [], + "allText": [ + "use client", + "@/hooks/useVulaContent", + "react", + "lucide-react", + "@/components/ui/Input", + "@/components/ui/Button", + "@/components/ui/Card", + "business_hours", + "flex justify-center py-24", + "w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#c0c0c0]", + "Thank you for your enquiry. Our concierge will be in touch within 24 hours.", + "contact-vault", + "contactvault", + "bg-[#0f0f17] py-24 lg:py-32 px-4", + "max-w-6xl mx-auto", + "grid grid-cols-1 lg:grid-cols-2 gap-16", + "flex items-center gap-4 mb-8", + "h-px w-14 bg-[#c0c0c0]", + "font-sans text-xs uppercase tracking-[0.15em] text-[#c0c0c0]", + "Private Appointments", + "font-serif text-3xl lg:text-4xl text-[#e7e7ee] leading-tight mb-12", + "Visit Our", + "italic text-[#c0c0c0]", + "Sandton", + "Showroom", + "space-y-6 text-[#a0a0b0] text-sm", + "flex items-start gap-4", + "w-5 h-5 mt-0.5 text-[#c0c0c0]", + "text-[#e7e7ee] font-medium", + "Vault by Mkhize", + "5th Floor, Sandton City Mall", + "Sandton, Johannesburg, 2196", + "South Africa", + "+27 11 234 5678", + "text-xs mt-1", + "WhatsApp: +27 71 234 5678", + "concierge@vaultbymkhize.co.za", + "pt-6 border-t border-[#303040]", + "flex items-center gap-2 mb-4", + "w-5 h-5 text-[#c0c0c0]", + "text-[#e7e7ee] font-medium uppercase text-xs tracking-widest", + "Operating Hours", + "flex justify-between text-sm py-2 border-b border-[#303040]/50 last:border-none", + "text-[#e7e7ee]", + "text-[#a0a0b0]", + "Closed", + "text-xs text-[#707080] mt-4", + "Closed on South African public holidays.", + "bg-[#18181b] border border-[#303040] rounded-lg", + "p-8" + ], + "cmsCollection": "business_hours" + } + ], + "navigationLinks": [ + "Vault by Mkhize", + "Home", + "Latest Drops", + "Featured Collections", + "About Vault", + "Gallery", + "Products" + ] +} \ No newline at end of file