Files
vula-0b9cc299/vula-index.json
T
Vula Builder bfe64e006a Deploy
2026-07-14 19:08:56 +00:00

590 lines
23 KiB
JSON

{
"projectName": "Molten Rock Private Reserve",
"businessType": "hotel",
"industry": "hotel",
"tone": "",
"tier": 2,
"serviceType": "hotel",
"generatedAt": "2026-07-13T18:03:29.038Z",
"sections": [
{
"name": "HeroSection",
"importPath": "@/components/sections/HeroSection",
"position": 0,
"role": "hero",
"hasImage": true,
"hasForm": false,
"itemCount": 4,
"layout": "flex-row",
"headings": [],
"buttonLabels": [],
"people": [
"Molten Rock Private Reserve"
],
"allText": [
"next/image",
"next/link",
"hero",
"relative flex flex-col md:flex-row min-h-[82vh]",
"relative w-full md:w-1/2 h-72 md:h-auto min-h-[320px] overflow-hidden",
"Molten Rock Private Reserve",
"object-cover",
"(max-width: 768px) 100vw, 50vw",
"absolute inset-0",
"linear-gradient(135deg, #36454F, #d4af37)",
"w-full md:w-1/2 flex flex-col justify-center px-8 lg:px-16 py-14",
"#f2f4f5",
"#1f2b33",
"uppercase tracking-[0.12em] text-[12px] opacity-55 mb-4",
"text-4xl lg:text-5xl font-semibold tracking-[-0.02em] leading-[1.12] mb-6 max-w-4xl",
"An ultra-private, 6-suite safari sanctuary in the Greater Kruger offering",
"text-[#16a34a]",
"bespoke game.",
"text-base lg:text-lg mb-8 max-w-lg",
"#5c6870",
"Professional safari retreat in South Africa.",
"w-fit",
"#contact",
"inline-block bg-[#36454F] text-white px-9 py-4 text-[15px] font-semibold rounded-full shadow-xl hover:-translate-y-0.5 transition-all duration-200",
"Get in touch"
]
},
{
"name": "ExclusiveSuitesSection",
"importPath": "@/components/sections/ExclusiveSuitesSection",
"position": 1,
"role": "unknown",
"hasImage": true,
"hasForm": false,
"itemCount": 17,
"layout": "grid",
"headings": [],
"buttonLabels": [
"Explore All Suites"
],
"people": [],
"allText": [
"use client",
"next/image",
"next/link",
"@/hooks/useMedusaProducts",
"@/components/ui/Card",
"lucide-react",
"@/components/ui/Button",
"KSh",
"exclusivesuites",
"suites",
"py-24 bg-[#f2f4f5]",
"max-w-7xl mx-auto px-4",
"text-center mb-16 max-w-2xl mx-auto",
"text-4xl md:text-5xl font-bold text-[#1f2b33] mb-4",
"Sora, sans-serif",
"Six sanctuaries,",
"text-[#d4af37]",
"each a world apart",
"text-lg text-[#36454F]/70 leading-relaxed",
"Every suite is a private hideaway — handcrafted with local stone, reclaimed timber, and panoramic glass overlooking the bushveld.",
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",
"bg-white rounded-3xl overflow-hidden shadow-soft animate-pulse",
"h-64 bg-[#d4dadd]",
"p-6 space-y-3",
"h-6 bg-[#d4dadd] rounded w-3/4",
"h-4 bg-[#d4dadd] rounded w-full",
"h-4 bg-[#d4dadd] rounded w-1/2",
"bg-white rounded-3xl overflow-hidden shadow-soft border-0 group cursor-pointer transition-all duration-300 hover:-translate-y-2 hover:shadow-xl",
"relative h-64 overflow-hidden",
"(max-width: 768px) 100vw, 33vw",
"object-cover transition-transform duration-500 group-hover:scale-105",
"absolute top-4 left-4 bg-white/90 backdrop-blur-sm rounded-full px-3 py-1 text-sm font-medium text-[#36454F]",
"flex items-center gap-1",
"Up to 2 guests",
"pb-2",
"text-2xl font-semibold text-[#1f2b33]",
"space-y-3",
"text-[#36454F]/70 leading-relaxed",
"text-[#16a34a] font-bold text-xl",
"text-sm font-normal text-[#36454F]/60",
"/ night",
"inline-block mt-2 bg-[#d4af37] text-[#1f2b33] px-6 py-2 rounded-full font-semibold text-sm hover:bg-[#c49f2e] transition-colors",
"View Suite",
"text-center mt-12",
"default",
"lg",
"bg-[#36454F] text-[#f2f4f5] hover:bg-[#2a3844] rounded-full px-10",
"Explore All Suites"
]
},
{
"name": "MoltenRockStorySection",
"importPath": "@/components/sections/MoltenRockStorySection",
"position": 2,
"role": "about",
"hasImage": true,
"hasForm": false,
"itemCount": 5,
"layout": "grid",
"headings": [],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"next/image",
"moltenrockstory",
"our-story",
"py-24 bg-white",
"max-w-7xl mx-auto px-4",
"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",
"relative h-[400px] lg:h-[500px] overflow-hidden rounded-3xl shadow-soft",
"Ancient rock formations at Molten Rock Private Reserve",
"(max-width: 1024px) 100vw, 50vw",
"object-cover",
"text-4xl md:text-5xl font-bold text-[#1f2b33] mb-6",
"Sora, sans-serif",
"A land shaped by fire,",
"text-[#d4af37]",
"preserved by purpose",
"space-y-4 text-[#36454F]/80 leading-relaxed",
"One hundred million years ago, molten magma pushed through ancient granite — cooling into the iconic \n 'koppies' that give our reserve its name. Today, these towering rock formations watch over a landscape \n that has been rewilded with care: elephant, lion, leopard, and rhino roam across sixty thousand hectares \n of riverine forest and open savannah.",
"Our family's conservation vision was deliberate: limit guests to six suites so the land breathes. \n No convoys. No crowds. Only the sounds of the bush and the quiet privilege of being part of something larger.",
"italic text-[#d4af37]",
"\"We are not owners of this wilderness — we are its guardians.\""
]
},
{
"name": "BespokeExperiencesSection",
"importPath": "@/components/sections/BespokeExperiencesSection",
"position": 3,
"role": "unknown",
"hasImage": true,
"hasForm": false,
"itemCount": 3,
"layout": "grid",
"headings": [
"{exp.title}"
],
"buttonLabels": [],
"people": [
"Private Game Drives",
"Bush Spa Rituals",
"Starlit Dining"
],
"allText": [
"use client",
"next/image",
"lucide-react",
"Private Game Drives",
"Venture before dawn in an open Land Cruiser with a tracker who knows every spoor. Witness the predators return, the herds stir, and the sun paint the escarpment gold — without another vehicle in sight.",
"Signature",
"Bush Spa Rituals",
"Indulge in treatments using indigenous botanicals — marula oil, rooibos, and African potato. Your therapist sets up on a sala overlooking the dry riverbed; the only soundtrack is the wind in the knobthorn trees.",
"Wellness",
"Starlit Dining",
"Our Michelin-trained chef curates a menu drawn from the region's bounty — game, foraged herbs, and heirloom vegetables. Dinner is served beneath the Southern Cross, with lanterns and a crackling fire.",
"Culinary",
"bespokeexperiences",
"bespoke-experiences",
"py-24 bg-[#f2f4f5]",
"max-w-7xl mx-auto px-4",
"text-center mb-16 max-w-2xl mx-auto",
"text-4xl md:text-5xl font-bold text-[#1f2b33] mb-4",
"Sora, sans-serif",
"Tailor each day",
"text-[#d4af37]",
"to your pulse",
"text-lg text-[#36454F]/70 leading-relaxed",
"No two stays are alike. Select from our signature encounters — or let us design a journey that only you will ever experience.",
"grid grid-cols-1 md:grid-cols-3 gap-8",
"bg-white rounded-3xl overflow-hidden shadow-soft group transition-all duration-300 hover:-translate-y-2 hover:shadow-xl",
"relative h-56 overflow-hidden",
"(max-width: 768px) 100vw, 33vw",
"object-cover transition-transform duration-500 group-hover:scale-105",
"absolute top-4 left-4 bg-[#16a34a] text-white text-xs font-semibold px-3 py-1 rounded-full uppercase tracking-wider",
"p-6",
"flex items-center gap-3 mb-3",
"w-6 h-6 text-[#d4af37]",
"text-xl font-semibold text-[#1f2b33]",
"text-[#36454F]/70 leading-relaxed"
]
},
{
"name": "MoltenRockCampaignsSection",
"importPath": "@/components/sections/MoltenRockCampaignsSection",
"position": 4,
"role": "cms-campaigns",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"@/hooks/useEmDashContent",
"next/image",
"@/components/ui/Button",
"@/components/ui/Card",
"lucide-react",
"campaigns",
"flex justify-center py-20",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#36454F]",
"exclusive-offers",
"moltenrockcampaigns",
"py-20 bg-[#f2f4f5]",
"container mx-auto px-4 max-w-7xl",
"text-3xl md:text-4xl font-light text-[#36454F] mb-4 text-center",
"Exclusive offers for",
"font-semibold text-[#d4af37]",
"direct bookers",
"text-[#1f2b33] text-center max-w-2xl mx-auto mb-12 text-lg leading-relaxed",
"Curated privileges reserved for those who book directly with Molten Rock Private Reserve.",
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",
"rounded-[24px] shadow-2xl shadow-black/10 overflow-hidden border-0 transition-all duration-300 hover:shadow-3xl hover:-translate-y-1",
"relative h-48 w-full overflow-hidden",
"Campaign",
"(max-width: 768px) 100vw, 33vw",
"object-cover transition-transform duration-500 ease-out hover:scale-105",
"px-6 pt-6 pb-0",
"text-xl font-medium text-[#36454F]",
"px-6 py-4",
"text-[#d4af37] font-semibold text-sm uppercase tracking-wider mb-2",
"text-[#1f2b33] text-sm leading-relaxed",
"px-6 pb-6 pt-0",
"default",
"sm",
"bg-[#36454F] text-white hover:bg-[#2a363f] rounded-full px-6 py-2 text-sm font-medium transition-all duration-200 ease-out",
"Pre-book now",
"ml-2 w-4 h-4",
"flex justify-center mt-10",
"text-[#1f2b33] text-sm",
"inline-block w-2 h-2 rounded-full bg-[#16a34a] mr-2",
"Limited availability — rates are subject to change upon confirmation."
],
"cmsCollection": "campaigns"
},
{
"name": "SafariGallerySection",
"importPath": "@/components/sections/SafariGallerySection",
"position": 5,
"role": "gallery",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [
"{d.title}"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"react",
"@/hooks/useEmDashContent",
"next/image",
"lucide-react",
"@/components/ui/Modal",
"@/components/ui/Card",
"gallery",
"flex justify-center py-20",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#36454F]",
"safari-gallery",
"safarigallery",
"py-20 bg-white",
"container mx-auto px-4 max-w-7xl",
"text-3xl md:text-4xl font-light text-[#36454F] mb-4 text-center",
"The",
"font-semibold text-[#d4af37]",
"wilderness",
"in frames",
"text-[#1f2b33] text-center max-w-xl mx-auto mb-12 text-lg leading-relaxed",
"A private glimpse into life on the reserve — captured for the discerning eye.",
"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",
"overflow-hidden rounded-[24px] border-0 cursor-pointer shadow-lg hover:shadow-2xl transition-all duration-200 ease-out",
"p-0 relative aspect-square w-full",
"Safari image",
"(max-width: 768px) 50vw, 25vw",
"object-cover transition-transform duration-500 ease-out hover:scale-105",
"absolute inset-0 bg-gradient-to-t from-black/10 to-transparent",
"absolute bottom-3 left-3 right-3",
"text-white text-sm font-medium drop-shadow-lg",
"relative max-w-5xl mx-auto",
"absolute top-4 right-4 z-10 bg-black/50 text-white rounded-full p-2 hover:bg-black/70 transition-colors",
"Close",
"w-5 h-5",
"flex items-center justify-between mb-4",
"bg-black/50 text-white rounded-full p-3 hover:bg-black/70 transition-colors",
"Previous",
"flex-grow h-96 relative mx-4",
"Gallery image",
"object-contain",
"80vw",
"Next",
"text-center text-sm text-white mt-2"
],
"cmsCollection": "gallery"
},
{
"name": "BushChronicleSection",
"importPath": "@/components/sections/BushChronicleSection",
"position": 6,
"role": "blog",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"@/hooks/useEmDashContent",
"next/image",
"@/components/ui/Card",
"lucide-react",
"posts",
"flex justify-center py-20",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin text-[#36454F]",
"bush-chronicle",
"bushchronicle",
"py-20 bg-[#f2f4f5]",
"container mx-auto px-4 max-w-7xl",
"text-3xl md:text-4xl font-light text-[#36454F] mb-4 text-center",
"Tales from the",
"font-semibold text-[#d4af37]",
"bush",
"text-[#1f2b33] text-center max-w-xl mx-auto mb-12 text-lg leading-relaxed",
"Notes on wild moments, conservation milestones, and the chef's table under the stars.",
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",
"rounded-[24px] shadow-2xl shadow-black/10 overflow-hidden border-0 transition-all duration-300 hover:shadow-3xl hover:-translate-y-1",
"relative h-48 w-full overflow-hidden",
"Post image",
"(max-width: 768px) 100vw, 33vw",
"object-cover transition-transform duration-500 ease-out hover:scale-105",
"px-6 pt-6 pb-0",
"flex items-center justify-between mb-2",
"text-xs uppercase tracking-wider text-[#d4af37] font-semibold",
"text-xl font-medium text-[#36454F]",
"px-6 py-4",
"text-[#1f2b33] text-sm leading-relaxed",
"px-6 pb-6 pt-0 flex items-center justify-between",
"text-xs text-[#1f2b33]/60",
"inline-flex items-center text-xs font-medium text-[#16a34a] hover:underline transition-all",
"w-3 h-3 mr-1",
"Read more",
"flex justify-center mt-10",
"text-[#1f2b33] text-sm italic",
"Recent dispatches from the reserve — updated each season."
],
"cmsCollection": "posts"
},
{
"name": "DiscerningGuestVoicesSection",
"importPath": "@/components/sections/DiscerningGuestVoicesSection",
"position": 7,
"role": "unknown",
"hasImage": false,
"hasForm": false,
"itemCount": 3,
"layout": "flex-row",
"headings": [],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"C.R.",
"Zürich",
"The silence at dawn is something I have never experienced. Our guide tracked a pack of wild dogs across the riverbed — a private sighting that will stay with me forever.",
"A.L.",
"New York",
"Every meal felt like an event — the chef came to our table each evening to explain the ingredients sourced from the region. The wine cellar alone is worth the journey.",
"E.H.",
"Tokyo",
"The treatment room opens onto the bushveld. During my massage, a herd of elephants passed within fifty metres. I have never felt so connected to a place.",
"guest-voices",
"discerningguests",
"testimonials",
"py-20 bg-[#f2f4f5]",
"container mx-auto px-4 max-w-5xl",
"text-3xl md:text-4xl font-light text-[#36454F] mb-4 text-center",
"What our",
"font-semibold text-[#d4af37]",
"guests",
"carry home",
"text-[#1f2b33] text-center max-w-xl mx-auto mb-12 text-lg leading-relaxed",
"Intimate reflections — shared in confidence, offered here with permission.",
"space-y-12",
"relative pl-8 md:pl-16",
"absolute left-0 top-0 bottom-0 w-1 bg-[#16a34a] rounded-full",
"space-y-3",
"text-[#1f2b33] text-lg leading-relaxed italic",
"“",
"”",
"flex items-center gap-2 text-sm text-[#1f2b33]/70",
"font-medium",
"text-[#d4af37]"
]
},
{
"name": "ExclusiveBookingCtaSection",
"importPath": "@/components/sections/ExclusiveBookingCtaSection",
"position": 8,
"role": "booking",
"hasImage": false,
"hasForm": false,
"itemCount": 4,
"layout": "flex-row",
"headings": [],
"buttonLabels": [
"Secure Your Stay"
],
"people": [],
"allText": [
"use client",
"@/components/ui/Button",
"lucide-react",
"exclusivebookingcta",
"book-direct",
"bg-[#36454F] py-24 px-6",
"max-w-4xl mx-auto text-center",
"w-10 h-10 text-[#d4af37] mx-auto mb-6",
"text-4xl md:text-5xl font-light text-[#f2f4f5] mb-6 leading-tight",
"text-[#d4af37]",
"Reserve",
"your suite directly",
"text-[#d4dadd] text-lg mb-8 max-w-[44ch] mx-auto leading-relaxed",
"Book with us and receive the best available rate, a personalised\n itinerary tailored to your preferences, and a curated welcome\n amenity upon arrival.",
"flex flex-col sm:flex-row justify-center gap-4 mb-10",
"flex items-center gap-3 bg-[#2a3a44] rounded-2xl px-5 py-3 text-left",
"w-6 h-6 text-[#16a34a]",
"text-sm text-[#f2f4f5]",
"Best rate guarantee",
"Personalised itinerary",
"default",
"lg",
"bg-[#d4af37] hover:bg-[#be9c2f] text-[#1f2b33] font-medium px-10 py-4 rounded-full shadow-lg hover:shadow-[#d4af37]/30 transition-all duration-200 ease-out",
"inline-block",
"Secure Your Stay"
]
},
{
"name": "SanctuaryLocationSection",
"importPath": "@/components/sections/SanctuaryLocationSection",
"position": 9,
"role": "unknown",
"hasImage": false,
"hasForm": false,
"itemCount": 3,
"layout": "grid",
"headings": [],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"lucide-react",
"Hoedspruit Airport",
"45 min drive",
"Kruger Mpumalanga",
"2 hr drive",
"Johannesburg (JNB)",
"5 hr drive / 1.5 hr flight",
"sanctuarylocation",
"location",
"bg-[#f2f4f5] py-24 px-6",
"max-w-6xl mx-auto",
"flex flex-col lg:flex-row gap-12 items-center",
"relative w-full lg:w-1/2 aspect-[4/3] rounded-3xl overflow-hidden bg-[#d4dadd] shadow-xl",
"absolute inset-0 flex items-center justify-center",
"text-center",
"w-12 h-12 text-[#d4af37] mx-auto mb-2",
"text-sm text-[#1f2b33] font-medium",
"Greater Kruger, South Africa",
"absolute inset-0 grid grid-cols-6 grid-rows-4",
"border border-[#c0c4c8]/30",
"w-full lg:w-1/2",
"text-4xl md:text-5xl font-light text-[#1f2b33] mb-4 leading-tight",
"text-[#d4af37]",
"Untamed",
"by design",
"text-[#4a5a66] text-lg mb-8 leading-relaxed max-w-[44ch]",
"Nestled within the expansive Greater Kruger, Molten Rock lies at the\n intersection of wilderness and refined seclusion. Arrive via private\n airstrip or scenic road transfer from Hoedspruit.",
"space-y-5",
"flex items-center gap-4 bg-white rounded-2xl px-5 py-4 shadow-sm",
"w-5 h-5 text-[#16a34a] shrink-0",
"text-sm font-medium text-[#1f2b33]",
"text-xs text-[#4a5a66]",
"mt-8 flex items-center gap-3 bg-[#d4af37]/10 rounded-xl px-5 py-3 text-sm text-[#1f2b33]",
"w-5 h-5 text-[#d4af37]",
"Helicopter transfers available for the ultimate entrance"
]
},
{
"name": "GuestEnquirySection",
"importPath": "@/components/sections/GuestEnquirySection",
"position": 10,
"role": "contact",
"hasImage": false,
"hasForm": true,
"itemCount": 10,
"layout": "grid",
"headings": [],
"buttonLabels": [
"Send Message"
],
"people": [],
"allText": [
"use client",
"react",
"@/components/ui/Button",
"@/components/ui/Input",
"lucide-react",
"guestenquiry",
"contact",
"bg-white py-24 px-6",
"max-w-4xl mx-auto",
"text-center mb-12",
"text-4xl md:text-5xl font-light text-[#1f2b33] mb-3 leading-tight",
"Let us",
"text-[#d4af37]",
"craft",
"your journey",
"text-[#4a5a66] text-lg max-w-[44ch] mx-auto leading-relaxed",
"Whether it is a pre-arrival request, a celebration arrangement,\n or simply curiosity — reach out and we will respond within 24 hours.",
"grid grid-cols-1 md:grid-cols-2 gap-12",
"space-y-5",
"text",
"Your name",
"border-[#d4dadd] focus:border-[#d4af37] rounded-xl bg-[#f2f4f5] px-4 py-3 text-sm",
"email",
"Email address",
"Your message",
"w-full border border-[#d4dadd] focus:border-[#d4af37] rounded-xl bg-[#f2f4f5] px-4 py-3 text-sm resize-none transition-colors duration-200 ease-out",
"text-[#16a34a] text-sm flex items-center gap-2",
"Message sent — we will be in touch shortly.",
"submit",
"default",
"w-full bg-[#36454F] hover:bg-[#2a3a44] text-white rounded-full py-3 px-6 transition-all duration-200 ease-out",
"Send Message",
"flex flex-col justify-center gap-6",
"flex items-center gap-4 bg-[#f2f4f5] rounded-2xl p-5",
"w-6 h-6 text-[#d4af37]",
"text-sm font-medium text-[#1f2b33]",
"Phone",
"text-sm text-[#4a5a66]",
"+27 82 900 1234",
"Email",
"info@moltenrock.co.za",
"Response time",
"Within 24 hours from the lodge manager"
]
}
],
"navigationLinks": [
"Home",
"Exclusive Suites",
"Molten Rock Story",
"Bespoke Experiences",
"Safari Gallery",
"Guest Enquiry",
"Book a Room"
]
}