Files
Vula Builder ab9d52d865 Deploy
2026-07-14 19:12:47 +00:00

546 lines
20 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"projectName": "Thornveld Game Lodge",
"businessType": "",
"industry": "",
"tone": "",
"tier": 1,
"generatedAt": "2026-07-13T09:20:45.291Z",
"sections": [
{
"name": "BushveldHeroSection",
"importPath": "@/components/sections/BushveldHeroSection",
"position": 0,
"role": "hero",
"hasImage": true,
"hasForm": false,
"itemCount": 2,
"layout": "flex-row",
"headings": [
"Unhurried Days, Wild Nights."
],
"buttonLabels": [
"Explore the Lodge"
],
"people": [],
"allText": [
"next/image",
"@/components/ui/Button",
"bushveldhero",
"hero",
"relative h-[70vh] lg:h-[90vh] overflow-hidden",
"Golden bushveld sunset with thorn tree silhouettes",
"object-cover",
"100vw",
"absolute inset-0 bg-gradient-to-t from-black/60 via-black/20 to-transparent",
"absolute inset-0 flex flex-col justify-center items-center text-center px-4",
"font-heading text-4xl md:text-6xl lg:text-7xl text-[#f5f5dc] mb-4 max-w-3xl leading-tight",
"Unhurried Days, Wild Nights.",
"font-body italic text-lg md:text-xl lg:text-2xl text-[#f5f5dc]/90 mb-8 max-w-2xl",
"\"Where the bush tells its own stories.\"",
"default",
"lg",
"bg-[#6b8e23] hover:bg-[#5a7a1e] text-white px-8 py-3 rounded-xl shadow-md font-heading",
"#thornveld-experiences",
"Explore the Lodge"
]
},
{
"name": "ThornveldExperiencesSection",
"importPath": "@/components/sections/ThornveldExperiencesSection",
"position": 1,
"role": "unknown",
"hasImage": true,
"hasForm": false,
"itemCount": 4,
"layout": "grid",
"headings": [
"Life in the Thornveld"
],
"buttonLabels": [],
"people": [
"Guided Walking Trails",
"Dawn Birding",
"Sundowner Drives"
],
"allText": [
"next/image",
"@/components/ui/Card",
"@/components/ui/Badge",
"Self-Catering Chalets",
"Fully equipped kitchens, private braai areas, and verandas shaded by ancient knobthorn trees your home in the bush.",
"Guided Walking Trails",
"Daily walks with our rangers learn to identify tracks, calls, and the quiet rhythms of the thornveld.",
"Dawn Birding",
"Early mornings alive with kingfishers, hornbills, and rollers. Our guides know every perch.",
"Sundowner Drives",
"Evening game drives ending on a panoramic ridge with homemade rusks and the setting sun painting the Lowveld.",
"thornveldexperiences",
"thornveld-experiences",
"py-20 bg-[#f7f9f4]",
"container mx-auto px-4",
"relative mb-12",
"font-heading text-3xl md:text-4xl text-[#1b210d] mb-4",
"Life in the Thornveld",
"font-body italic text-lg text-[#8b5a3c] max-w-2xl",
"Four ways to slow down and sink into the bush.",
"absolute -top-2 right-4 rotate-6 bg-[#6b8e23] text-white px-3 py-1 text-sm rounded-full shadow-md",
"Since 1998",
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",
"rounded-xl shadow-md border border-[#dee2d4] overflow-hidden bg-white",
"relative h-48 w-full overflow-hidden",
"object-cover hover:scale-105 transition-transform duration-500 ease-out",
"(max-width: 768px) 100vw, 25vw",
"font-heading text-xl text-[#1b210d]",
"font-body italic text-[#8b5a3c]"
]
},
{
"name": "OurFamilyRootsSection",
"importPath": "@/components/sections/OurFamilyRootsSection",
"position": 2,
"role": "unknown",
"hasImage": true,
"hasForm": false,
"itemCount": 8,
"layout": "grid",
"headings": [
"Built by Hand, Rooted in Love"
],
"buttonLabels": [],
"people": [],
"allText": [
"next/image",
"ourfamilyroots",
"family-roots",
"py-20 bg-white",
"container mx-auto px-4",
"grid grid-cols-1 lg:grid-cols-2 gap-12 items-center",
"font-heading text-3xl md:text-4xl text-[#1b210d] mb-6",
"Built by Hand, Rooted in Love",
"font-body text-base text-[#1b210d]/80 leading-relaxed space-y-4",
"Jan and Marietjie first saw this stretch of Limpopo bush in 2003. The knobthorn trees, the dawn chorus of hornbills, the way the light turned golden at dusk — they knew they had found home.",
"They built the first chalet with their own hands, timber by timber, while raising three children under canvas. By 2010, Thornveld opened its doors — eight self-catering chalets, each with a view of the wild.",
"Today, guests arrive as strangers and leave as family. Jan still leads the morning walks; Marietjie bakes the rusks for sundowners. This is not a hotel — it is their home, and you are welcome.",
"mt-8 space-y-3",
"2003",
"Discovered the land",
"2005",
"First chalet built",
"2010",
"Opened to guests",
"2020",
"Expanded to 8 chalets",
"flex gap-4 border-b border-[#dee2d4] pb-3",
"font-heading text-[#6b8e23] font-bold min-w-[60px]",
"font-body italic text-[#8b5a3c]",
"relative aspect-[4/3] lg:aspect-auto lg:h-[500px] w-full overflow-hidden rounded-xl shadow-md rotate-1",
"Jan and Marietjie on the main deck with the bushveld behind them",
"object-cover",
"(max-width: 1024px) 100vw, 50vw",
"absolute bottom-4 left-4 bg-[#f5f5dc]/90 text-[#1b210d] px-4 py-2 rounded-lg text-sm font-body italic shadow-md",
"The family deck, where stories are shared."
]
},
{
"name": "SeasonalSpecialsSection",
"importPath": "@/components/sections/SeasonalSpecialsSection",
"position": 3,
"role": "cms-campaigns",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [
"Baked before sunrise, gone by noon."
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"@/hooks/useEmDashContent",
"next/image",
"@/components/ui/Card",
"@/components/ui/Button",
"campaigns",
"flex justify-center py-16",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin",
"specials",
"seasonalspecials",
"py-20 bg-[#f7f9f4]",
"max-w-7xl mx-auto px-4",
"font-heading text-4xl md:text-5xl text-[#1b210d] mb-4 leading-tight",
"Baked before sunrise, gone by noon.",
"font-serif italic text-lg text-[#8b5a3c] max-w-2xl mb-12",
"Limited-time packages crafted for unhurried escapes.",
"grid grid-cols-1 md:grid-cols-3 gap-8",
"overflow-hidden rounded-2xl shadow-soft border-0 bg-[#f5f5dc] transition-all duration-200 ease-out hover:-translate-y-1 hover:shadow-lg",
"relative h-48 w-full overflow-hidden",
"Special offer",
"(max-width: 768px) 100vw, 33vw",
"object-cover hover:scale-105 transition-transform duration-500 ease-out",
"text-[#8b5a3c] text-sm font-medium uppercase tracking-wide mb-1",
"text-2xl text-[#1b210d] font-heading",
"Untitled",
"font-serif italic text-[#1b210d]/80 leading-relaxed",
"ghost",
"text-[#6b8e23] hover:text-[#4a6317] transition-colors duration-200",
"Enquire"
],
"cmsCollection": "campaigns"
},
{
"name": "BushGallerySection",
"importPath": "@/components/sections/BushGallerySection",
"position": 4,
"role": "gallery",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [
"Light through the leaves",
"{lightboxItem.title}"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"@/hooks/useEmDashContent",
"next/image",
"react",
"lucide-react",
"gallery",
"flex justify-center py-16",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin",
"bush-gallery",
"bushgallery",
"py-20 bg-[#f7f9f4]",
"max-w-7xl mx-auto px-4",
"font-heading text-4xl md:text-5xl text-[#1b210d] mb-4 leading-tight",
"Light through the leaves",
"font-serif italic text-lg text-[#8b5a3c] max-w-2xl mb-12",
"Moments that make the bush feel like home.",
"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6",
"group relative overflow-hidden rounded-2xl aspect-square cursor-pointer transition-all duration-200 ease-out hover:-translate-y-1 hover:shadow-lg",
"Gallery image",
"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 33vw",
"object-cover transition-transform duration-500 ease-out group-hover:scale-105",
"absolute inset-0 bg-black/20 opacity-0 group-hover:opacity-100 transition-opacity duration-200 ease-out",
"absolute bottom-0 left-0 right-0 p-4 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-200 ease-out",
"text-white font-semibold text-sm",
"text-white/80 text-xs mt-1",
"fixed inset-0 z-50 bg-black/80 flex items-center justify-center p-4",
"relative max-w-4xl w-full max-h-[90vh] bg-[#f7f9f4] rounded-2xl overflow-hidden",
"absolute top-4 right-4 z-10 p-2 bg-black/30 rounded-full text-white hover:bg-black/50 transition-colors",
"w-5 h-5",
"relative h-[60vh] w-full",
"Full view",
"100vw",
"object-contain",
"p-6 bg-[#f5f5dc]",
"text-2xl font-heading text-[#1b210d]",
"font-serif italic text-[#1b210d]/80 mt-2"
],
"cmsCollection": "gallery"
},
{
"name": "SightingsJournalSection",
"importPath": "@/components/sections/SightingsJournalSection",
"position": 5,
"role": "blog",
"hasImage": true,
"hasForm": false,
"itemCount": -1,
"layout": "grid",
"headings": [
"The ranger’s digital sightings book",
"{d.title}"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"@/hooks/useEmDashContent",
"next/image",
"@/components/ui/Badge",
"posts",
"flex justify-center py-16",
"w-8 h-8 rounded-full border-2 border-current border-t-transparent animate-spin",
"sightings-journal",
"sightingsjournal",
"py-20 bg-[#f5f5dc]",
"max-w-7xl mx-auto px-4",
"font-heading text-4xl md:text-5xl text-[#1b210d] mb-4 leading-tight",
"The ranger’s digital sightings book",
"font-serif italic text-lg text-[#8b5a3c] max-w-2xl mb-12",
"Fresh notes from the bush — track the wild heartbeat of Thornveld.",
"grid grid-cols-1 md:grid-cols-2 gap-8",
"bg-[#f7f9f4] rounded-2xl overflow-hidden shadow-soft border border-[#dee2d4] transition-all duration-200 ease-out hover:-translate-y-1 hover:shadow-lg",
"relative h-48 w-full overflow-hidden",
"Sighting image",
"(max-width: 768px) 100vw, 50vw",
"object-cover hover:scale-105 transition-transform duration-500 ease-out",
"p-6",
"flex items-center justify-between mb-3",
"bg-[#6b8e23] text-white text-xs px-3 py-1 rounded-full",
"text-xs text-[#8b5a3c] font-medium",
"font-heading text-2xl text-[#1b210d] mb-2",
"font-serif italic text-[#1b210d]/70 leading-relaxed",
"mt-4 h-px bg-[#dee2d4] w-12"
],
"cmsCollection": "posts"
},
{
"name": "GuestVoicesSection",
"importPath": "@/components/sections/GuestVoicesSection",
"position": 6,
"role": "unknown",
"hasImage": true,
"hasForm": false,
"itemCount": 3,
"layout": "grid",
"headings": [
"Entries from our veranda guestbook"
],
"buttonLabels": [],
"people": [
"The Dlamini Family"
],
"allText": [
"use client",
"next/image",
"Watching elephants drink from the waterhole at dusk — our children will never forget that quiet magic.",
"The Dlamini Family",
"Johannesburg",
"Marietjie's home-baked bread with apricot jam, fresh from the oven... pure Thornveld warmth.",
"Sarah & Tom",
"London, UK",
"Learning to track spoor with ranger Thabo — warthog, kudu, even a leopard's pugmark. Real bush school.",
"Jenna & Ryan",
"Cape Town",
"guest-voices",
"guestvoices",
"py-20 bg-[#f5f5dc]",
"max-w-7xl mx-auto px-4",
"font-heading text-3xl md:text-4xl text-[#1b210d] mb-12 text-center",
"Entries from our veranda guestbook",
"grid grid-cols-1 md:grid-cols-3 gap-8",
"bg-[#f7f9f4] rounded-2xl p-6 shadow-soft border border-[#dee2d4]",
"flex items-center mb-4",
"relative w-12 h-12 rounded-full overflow-hidden mr-3",
"48px",
"object-cover",
"font-semibold text-[#1b210d]",
"text-sm text-[#8b5a3c]",
"font-serif italic text-[#1b210d]/80 leading-relaxed",
"“",
"”",
"mt-4 h-px bg-[#dee2d4] w-16"
]
},
{
"name": "UnhurriedBookingCTASection",
"importPath": "@/components/sections/UnhurriedBookingCTASection",
"position": 7,
"role": "booking",
"hasImage": true,
"hasForm": false,
"itemCount": 2,
"layout": "unknown",
"headings": [
"Ready to trade city noise for the call of a fish eagle?"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"next/image",
"@/components/ui/Button",
"lucide-react",
"+27823456789",
"unhurriedbookingcta",
"book-now",
"relative py-24 overflow-hidden bg-[#f7f9f4]",
"absolute inset-0 z-0",
"Chalet veranda at dawn",
"100vw",
"object-cover opacity-30",
"relative z-10 max-w-3xl mx-auto px-6 text-center",
"text-3xl md:text-4xl font-bold text-[#1b210d] mb-4 leading-snug",
"Ready to trade city noise for the call of a fish eagle?",
"text-lg text-[#1b210d]/80 mb-8 font-light",
"A direct booking with us means no middleman, no pressure. Just the bushveld, a cold drink on the stoep, and the fireflies. Chat to us directly.",
"_blank",
"noopener noreferrer",
"inline-block",
"default",
"lg",
"gap-2 bg-[#6b8e23] hover:bg-[#5a7a1f] text-white",
"w-5 h-5",
"Enquire via WhatsApp"
]
},
{
"name": "LocationFindSection",
"importPath": "@/components/sections/LocationFindSection",
"position": 8,
"role": "unknown",
"hasImage": false,
"hasForm": false,
"itemCount": 12,
"layout": "grid",
"headings": [
"Find us in the wild"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"lucide-react",
"locationfind",
"find-us",
"py-20 bg-[#f7f9f4]",
"max-w-6xl mx-auto px-6 grid md:grid-cols-2 gap-10 items-center",
"_blank",
"noopener noreferrer",
"relative block aspect-video rounded-xl overflow-hidden shadow-md group bg-[#dee2d4]",
"absolute inset-0 bg-[url('https://www.openstreetmap.org/export/embed.html?bbox=30.9,-24.4,31.0,-24.3&layer=mapnik')] bg-cover bg-center opacity-70",
"absolute inset-0 bg-[#8b5a3c]/20 group-hover:bg-[#8b5a3c]/30 transition-colors",
"absolute bottom-4 left-4 right-4 bg-white/80 backdrop-blur p-3 rounded-lg text-sm text-[#1b210d]",
"inline w-4 h-4 text-[#6b8e23] mr-1",
"Thornveld Game Lodge • R40, Hoedspruit, Limpopo",
"text-3xl font-bold text-[#1b210d] mb-4",
"Find us in the wild",
"text-[#8b5a3c] mb-6",
"We are tucked just outside Hoedspruit, a short drive from Kruger's Orpen Gate, within the Big Five Balule Nature Reserve. The roads are good — any sedan makes it.",
"space-y-4 text-[#1b210d] text-sm",
"flex items-start gap-3",
"w-5 h-5 text-[#6b8e23] mt-0.5 shrink-0",
"font-semibold",
"Driving from Johannesburg",
"text-[#8b5a3c]",
"Take the N12 to eMalahleni, then the N4 towards Nelspruit. Turn north on the R40 past White River. About 5 hours, all tar.",
"Nearest airports",
"Kruger Mpumalanga International (KMIA) — 90 min drive. Hoedspruit Airport (HDS) — 30 min. We can arrange a shuttle.",
"Balule Nature Reserve",
"Part of the Greater Kruger ecosystem — no fences between us and the park. Expect elephant, lion, and leopard wandering through."
]
},
{
"name": "ContactEnquirySection",
"importPath": "@/components/sections/ContactEnquirySection",
"position": 9,
"role": "contact",
"hasImage": false,
"hasForm": true,
"itemCount": 9,
"layout": "grid",
"headings": [
"Drop us a line"
],
"buttonLabels": [
"WhatsApp: +27 82 345 6789",
"reservations@thornveld.co.za",
"Send enquiry"
],
"people": [],
"allText": [
"use client",
"react",
"lucide-react",
"@/components/ui/Button",
"@/components/ui/Input",
"Enquiry sent",
"contactenquiry",
"contact",
"py-20 bg-[#f5f5dc]",
"max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-10",
"text-3xl font-bold text-[#1b210d] mb-4",
"Drop us a line",
"text-[#8b5a3c] mb-8",
"Prefer to chat? We are easy to reach. While our hosts might be out on a game walk, they will reply as soon as they are back under the stoep.",
"space-y-4",
"flex items-center gap-3",
"w-5 h-5 text-[#6b8e23]",
"tel:+27823456789",
"text-[#1b210d] hover:text-[#6b8e23] transition-colors",
"+27 82 345 6789",
"_blank",
"noopener noreferrer",
"WhatsApp: +27 82 345 6789",
"mailto:reservations@thornveld.co.za",
"reservations@thornveld.co.za",
"bg-white rounded-xl p-6 shadow-md border border-[#dee2d4]",
"text-center py-8",
"text-xl font-semibold text-[#6b8e23]",
"Sent with care!",
"text-[#8b5a3c] mt-2",
"We will answer as soon as the fire is lit.",
"name",
"Your name",
"email",
"Your email",
"block text-sm text-[#1b210d] mb-1",
"Preferred travel dates",
"travelDates",
"date",
"message",
"Tell us about your stay group size, interests, any special requests...",
"w-full rounded-lg border border-[#dee2d4] bg-white p-3 text-sm text-[#1b210d] placeholder:text-[#8b5a3c]/50 focus:outline-none focus:ring-2 focus:ring-[#6b8e23] focus:border-transparent min-h-[100px]",
"submit",
"default",
"w-full bg-[#6b8e23] hover:bg-[#5a7a1f] text-white",
"Send enquiry"
]
},
{
"name": "KnowBeforeYouGoSection",
"importPath": "@/components/sections/KnowBeforeYouGoSection",
"position": 10,
"role": "unknown",
"hasImage": false,
"hasForm": false,
"itemCount": -1,
"layout": "flex-row",
"headings": [
"Know before you go"
],
"buttonLabels": [],
"people": [],
"allText": [
"use client",
"react",
"@/hooks/useEmDashContent",
"lucide-react",
"policies",
"flex justify-center py-16 bg-[#f7f9f4]",
"w-8 h-8 rounded-full border-2 border-[#6b8e23] border-t-transparent animate-spin",
"know-before-you-go",
"knowbeforeyougo",
"py-20 bg-[#f5f5dc]",
"max-w-4xl mx-auto px-6",
"text-3xl font-bold text-[#1b210d] mb-8 text-center",
"Know before you go",
"space-y-3",
"bg-white rounded-xl border border-[#dee2d4] overflow-hidden shadow-sm",
"w-full flex items-center justify-between p-4 text-left text-[#1b210d] font-medium hover:bg-[#f5f5dc] transition-colors",
"flex items-center gap-2",
"w-4 h-4 text-[#6b8e23]",
"Policy",
"w-4 h-4 text-[#8b5a3c]",
"px-4 pb-4 text-sm text-[#1b210d]/80 border-t border-[#dee2d4] pt-3",
"Details coming soon."
],
"cmsCollection": "policies"
}
],
"navigationLinks": [
"Thornveld Game Lodge",
"Home",
"Thornveld Experiences",
"Our Family Roots",
"Seasonal Specials",
"Bush Gallery",
"Contact Enquiry"
]
}