From e41dafce9a6cd5e8cc13b500a1482ecad1bd29d6 Mon Sep 17 00:00:00 2001 From: Vula Builder Date: Tue, 15 Sep 2026 18:02:52 +0000 Subject: [PATCH] Deploy --- vula-index.json | 662 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 662 insertions(+) create mode 100644 vula-index.json diff --git a/vula-index.json b/vula-index.json new file mode 100644 index 0000000..a9c8dee --- /dev/null +++ b/vula-index.json @@ -0,0 +1,662 @@ +{ + "projectName": "The Bay Chiro", + "businessType": "chiropractic-clinic", + "industry": "healthcare", + "tone": "Professional yet warm and approachable, health-focused, reassuring, community-oriented", + "tier": 2, + "serviceType": "services", + "studioProfile": "clinic", + "design": { + "artDirection": "soft-organic", + "variant": "river", + "displayFont": "Sora", + "bodyFont": "DM_Sans", + "colorSource": "typed" + }, + "generatedAt": "2026-09-15T16:26:47.044Z", + "sections": [ + { + "name": "HeroSection", + "importPath": "@/components/sections/HeroSection", + "position": 0, + "role": "hero", + "hasImage": true, + "hasForm": false, + "itemCount": 4, + "layout": "flex-row", + "headings": [], + "buttonLabels": [], + "people": [ + "The Bay Chiro" + ], + "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", + "The Bay Chiro", + "object-cover", + "(max-width: 768px) 100vw, 50vw", + "absolute inset-0 bg-gradient-to-br from-primary to-secondary", + "w-full md:w-1/2 flex flex-col justify-center px-8 lg:px-16 py-14", + "#f2f4f5", + "#1f2a33", + "text-4xl lg:text-5xl font-semibold tracking-[-0.02em] leading-[1.12] mb-6 max-w-4xl", + "The Bay", + "text-accent", + "Chiro", + "text-base lg:text-lg mb-8 max-w-lg", + "#535d65", + "A specialised chiropractic practice led by Dr. K.P. Khumalo (M.TECH.CHIRO.S.A) offering tailored, evidence-based treatment plans for the whole family — from 6-week-old babies to pregnant mothers and athletes — addressing the root cause of musculoskeletal and nervous system disorders, not just symptoms.", + "w-fit", + "#contact", + "inline-block bg-primary text-primary-foreground px-9 py-4 text-[15px] font-semibold rounded-full shadow-xl hover:-translate-y-0.5 transition-all duration-200", + "Book an appointment" + ] + }, + { + "name": "AboutThePracticeSection", + "importPath": "@/components/sections/AboutThePracticeSection", + "position": 1, + "role": "about", + "hasImage": true, + "hasForm": false, + "itemCount": 9, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "next/image", + "next/link", + "@/components/ui/Button", + "Full case history and examination before a single adjustment", + "Manual adjustment, spinal decompression and soft-tissue work", + "Home exercises that hold the change between visits", + "One practice for the whole household — babies, moms, athletes, desk workers", + "aboutthepractice", + "about-the-practice", + "bg-primary py-20 text-primary-foreground lg:py-28", + "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", + "grid items-center gap-12 lg:grid-cols-2 lg:gap-16", + "text-sm font-semibold uppercase tracking-[0.18em] text-primary-foreground/70", + "Led by Dr. K.P. Khumalo · M.TECH.CHIRO.S.A", + "mt-4 text-3xl font-bold leading-tight sm:text-4xl", + "Care that starts with a", + "text-accent", + "diagnosis", + ", not a guess", + "mt-5 max-w-[44ch] text-base leading-relaxed text-primary-foreground/85", + "The Bay Chiro is a specialised, family-friendly chiropractic practice in Richards\n Bay. Every visit begins with finding out where the pain is actually coming from and\n why your body started compensating around it — then the treatment plan is built from\n that answer.", + "mt-4 max-w-[44ch] text-base leading-relaxed text-primary-foreground/85", + "That is the difference between chasing a symptom and treating a root cause.\n Adjustments, spinal decompression and soft-tissue work are matched to your age, your\n work and the sport you play — from a six-week-old baby with colic to a runner nursing\n a knee.", + "Ubuntu shapes how the practice runs. We treat the person and the household around\n them — the mom carrying a toddler, the father who drives long distances, the student\n hunched over a laptop since lockdown.", + "mt-8 divide-y divide-primary-foreground/20 border-y border-primary-foreground/20", + "py-3 text-sm text-primary-foreground/90", + "mt-8", + "lg", + "secondary", + "Book an appointment", + "relative", + "overflow-hidden", + "999px 999px 24px 24px", + "relative h-[360px] w-full sm:h-[460px] lg:h-[540px]", + "Chiropractor guiding a patient through spinal care at The Bay Chiro", + "(max-width: 1024px) 100vw, 45vw", + "object-cover", + "mt-4 rounded-lg bg-background p-6 text-foreground shadow-md sm:absolute sm:-bottom-8 sm:left-6 sm:mt-0 sm:max-w-xs", + "text-sm font-semibold", + "Dr. K.P. Khumalo", + "mt-1 text-sm text-muted-foreground", + "M.TECH.CHIRO.S.A — diagnosing, treating and preventing musculoskeletal and nervous\n system disorders." + ] + }, + { + "name": "ChiropracticServicesSection", + "importPath": "@/components/sections/ChiropracticServicesSection", + "position": 2, + "role": "services", + "hasImage": true, + "hasForm": false, + "itemCount": 17, + "layout": "grid", + "headings": [ + "{service.title}" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "next/image", + "next/link", + "lucide-react", + "@/hooks/useProducts", + "@/components/ui/Button", + "@/components/ui/Card", + "KSh", + "zar", + "Neck, back and joint pain", + "Headaches and migraines", + "Nerve impingement", + "Sports and accident recovery", + "Spinal decompression", + "Fibromyalgia and infant colic", + "one", + "two", + "three", + "four", + "chiropracticservices", + "chiropractic-services", + "bg-background py-20 text-foreground lg:py-28", + "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", + "max-w-3xl", + "text-sm font-semibold uppercase tracking-[0.18em] text-primary", + "Services", + "mt-4 text-3xl font-bold leading-tight sm:text-4xl", + "A plan shaped by", + "text-primary", + "your body", + ", not a queue", + "mt-4 max-w-[44ch] text-lg text-muted-foreground", + "Book the appointment that fits. Every session opens with a proper diagnosis and closes\n with something you can do at home before the next visit.", + "mt-8 flex flex-wrap items-center gap-x-6 gap-y-2 text-sm text-muted-foreground", + "flex items-center gap-2", + "h-1.5 w-1.5 rounded-full bg-secondary", + "mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-4", + "overflow-hidden rounded-lg bg-card shadow-md", + "aspect-video w-full animate-pulse bg-muted", + "space-y-3 p-6", + "h-4 w-2/3 animate-pulse rounded bg-muted", + "h-3 w-full animate-pulse rounded bg-muted", + "h-3 w-4/5 animate-pulse rounded bg-muted", + "group overflow-hidden rounded-lg shadow-md transition-all duration-200 ease-out hover:-translate-y-1 hover:shadow-xl", + "block cursor-pointer", + "relative aspect-video w-full overflow-hidden bg-muted", + "(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 25vw", + "object-cover transition-transform duration-500 ease-out group-hover:scale-105", + "flex h-full w-full items-center justify-center text-muted-foreground", + "h-8 w-8" + ] + }, + { + "name": "MeetTheTeamSection", + "importPath": "@/components/sections/MeetTheTeamSection", + "position": 3, + "role": "team", + "hasImage": true, + "hasForm": false, + "itemCount": 11, + "layout": "grid", + "headings": [ + "{person.name}" + ], + "buttonLabels": [], + "people": [ + "Sister Nomvula Mthembu", + "Thandi Zulu" + ], + "allText": [ + "next/image", + "next/link", + "@/components/ui/Badge", + "@/components/ui/Button", + "Dr. K.P. Khumalo", + "Lead Chiropractor — M.TECH.CHIRO.S.A", + "Registered with the Allied Health Professions Council of South Africa. Dr Khumalo works the whole spine, not only the spot that hurts: paediatric adjustments for babies from six weeks, the Webster technique for pregnant moms, spinal decompression for disc injuries, and dry needling for shoulders that tighten over long desk hours.", + "Paediatric adjustments", + "Pregnancy and Webster", + "Spinal decompression", + "Sister Nomvula Mthembu", + "Practice nurse", + "Runs the vitals screen and intake checks, and keeps each treatment room turning over on time.", + "Thandi Zulu", + "Reception and scheduling", + "Books appointments, handles medical aid paperwork, and calls the day before a first adjustment.", + "meettheteam", + "meet-the-team", + "bg-muted text-foreground py-20 sm:py-24", + "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + "max-w-[44ch]", + "text-sm font-medium uppercase tracking-wide text-primary", + "Meet the team", + "mt-3 text-3xl sm:text-4xl font-bold tracking-tight", + "One chiropractor,", + "text-primary", + "one unhurried room", + "mt-12 grid grid-cols-1 lg:grid-cols-2 gap-6", + "lg:col-span-2 grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12 items-center bg-card rounded-3xl shadow-md hover:shadow-xl transition-all duration-200 hover:-translate-y-1 p-6 sm:p-8", + "lg:col-span-5 relative aspect-[4/5] w-full overflow-hidden", + "999px 999px 28px 28px", + "Portrait of", + "(max-width: 1024px) 100vw, 40vw", + "object-cover", + "lg:col-span-7", + "text-2xl sm:text-3xl font-bold", + "mt-2 text-sm font-medium text-primary", + "mt-4 max-w-[44ch] leading-relaxed text-muted-foreground", + "mt-6 flex flex-wrap gap-2", + "secondary", + "bg-card rounded-3xl shadow-md hover:shadow-xl transition-all duration-200 hover:-translate-y-1 p-6 flex items-start gap-5", + "relative h-20 w-20 shrink-0 overflow-hidden rounded-full", + "80px", + "text-lg font-semibold", + "text-sm font-medium text-primary", + "mt-2 text-sm leading-relaxed text-muted-foreground", + "mt-10 flex flex-col sm:flex-row sm:items-center gap-4", + "Book with Dr Khumalo", + "text-sm text-muted-foreground", + "Medical aid and private patients · Babies welcome from six weeks" + ] + }, + { + "name": "ClinicGallerySection", + "importPath": "@/components/sections/ClinicGallerySection", + "position": 4, + "role": "gallery", + "hasImage": true, + "hasForm": false, + "itemCount": 4, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "next/image", + "Chiropractic treatment room with an adjustment table in natural daylight", + "Babies welcome from six weeks", + "col-span-2 row-span-2 lg:col-span-2 lg:row-span-2", + "rounded-[120px_120px_28px_28px]", + "Quiet waiting area with seating and soft light", + "Reception and waiting area", + "col-span-2 lg:col-span-2", + "rounded-3xl", + "Practitioner reading patient notes before a consultation", + "Assessment before treatment", + "col-span-1 lg:col-span-1", + "Hands-on chiropractic adjustment in the treatment room", + "Adjustment room", + "Athlete stretching during recovery work", + "Sports injury and recovery", + "rounded-[28px_120px_28px_120px]", + "Parent with a young child in a family-friendly clinic space", + "Family appointments", + "Babies from six weeks", + "Pregnancy-friendly tables", + "clinicgallery", + "clinic-gallery", + "bg-background text-foreground py-20 sm:py-24", + "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + "max-w-[44ch]", + "text-sm font-medium uppercase tracking-wide text-primary", + "Clinic gallery", + "mt-3 text-3xl sm:text-4xl font-bold tracking-tight", + "Built for", + "text-primary", + "whole families", + ", not only sore backs.", + "mt-4 leading-relaxed text-muted-foreground", + "Adjustment rooms, a waiting area that copes with prams, and tables that adjust for pregnancy. Every surface is cleaned down between patients.", + "mt-12 grid grid-cols-2 lg:grid-cols-4 auto-rows-[150px] sm:auto-rows-[195px] gap-4 sm:gap-6", + "relative overflow-hidden group", + "(max-width: 768px) 100vw, 50vw", + "object-cover transition-transform duration-500 ease-out group-hover:scale-105", + "absolute bottom-3 left-3 rounded-full bg-background/95 px-3 py-1.5 text-xs font-medium text-foreground shadow-md", + "mt-8 flex flex-wrap items-center gap-x-6 gap-y-3 text-sm text-muted-foreground", + "flex items-center gap-2", + "h-1.5 w-1.5 rounded-full bg-primary" + ] + }, + { + "name": "PatientStoriesSection", + "importPath": "@/components/sections/PatientStoriesSection", + "position": 5, + "role": "unknown", + "hasImage": false, + "hasForm": false, + "itemCount": 3, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "next/link", + "@/components/ui/Button", + "Our daughter was four months old and cried every evening with colic. After two adjustments the evenings went quiet, and Dr Khumalo explained every movement before he made it.", + "Nokwanda D.", + "Mom of a four-month-old, Richards Bay", + "I ran a qualifier three weeks after my last lower-back flare-up. The plan was specific: adjustments in the room, then the exercises he wrote out for me by hand.", + "Sipho M.", + "Club runner and shift worker", + "At thirty-one weeks pregnant I could not sleep for hip pain. The table adjusts for your bump, and I walked out standing straighter. I still come in every second week.", + "Ayesha K.", + "Third pregnancy", + "patientstories", + "patient-stories", + "bg-primary text-primary-foreground py-20 sm:py-24", + "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + "max-w-[44ch]", + "text-sm font-medium uppercase tracking-wide text-primary-foreground/70", + "From Richards Bay families, athletes and parents", + "mt-3 text-3xl sm:text-4xl font-bold tracking-tight", + "Relief that", + "text-accent", + "holds", + ", in their own words.", + "mt-12 grid grid-cols-1 md:grid-cols-3 gap-6", + "bg-background text-foreground rounded-3xl shadow-lg hover:shadow-xl transition-all duration-200 hover:-translate-y-1 p-6 flex flex-col", + "text-lg tracking-widest text-primary", + "true", + "★★★★★", + "mt-4 leading-relaxed", + "mt-6 border-t border-border/60 pt-4", + "font-semibold", + "text-sm text-muted-foreground", + "mt-12 flex flex-col sm:flex-row sm:items-center justify-between gap-6 rounded-3xl bg-background text-foreground shadow-lg p-6 sm:p-8", + "text-lg font-semibold", + "Not sure whether chiropractic is right for you?", + "mt-1 text-sm text-muted-foreground", + "A first consultation covers your history, an examination, and an explanation of what we found — before anything is adjusted.", + "Book an appointment" + ] + }, + { + "name": "ChiropracticFaqSection", + "importPath": "@/components/sections/ChiropracticFaqSection", + "position": 6, + "role": "faq", + "hasImage": false, + "hasForm": false, + "itemCount": 6, + "layout": "grid", + "headings": [], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "react", + "next/link", + "lucide-react", + "@/components/ui/Button", + "What actually happens on a first visit?", + "Dr Khumalo starts with a full case history, then examines how your spine, joints and nerves are moving. You get a plain-language explanation of what he found before anything is adjusted, and you decide whether to go ahead with the plan.", + "Is chiropractic safe for babies and during pregnancy?", + "Babies from six weeks are welcome. On an infant the pressure used is barely firmer than testing a ripe tomato: no cracking, no twisting. Pregnant moms are treated side-lying with pillows, avoiding the positions that get uncomfortable in the second and third trimester.", + "Can you help with a sports injury?", + "Yes. Sports care runs in two stages: restore the range the joint lost, then load it so the fix holds. A rugby shoulder, a runner’s knee or a stiff ankle all get the same question asked first — which joint stopped moving properly?", + "How is this different from painkillers and rest?", + "Painkillers turn the signal down. Chiropractic looks for the joint that stopped moving properly, which is often why the signal started. It is also why the same lower-back flare returns a few weeks after you stop resting.", + "What conditions can chiropractic care help with?", + "Neck, back and joint pain. Headaches and migraines. Extremity pain and nerve impingement. Sports injuries and auto-accident recovery. Spinal decompression, plus supportive care for fibromyalgia and infant colic.", + "Do I need a referral, and how does booking work?", + "No referral needed. Book straight from the services page: choose a time that suits you and the practice confirms it with you directly. Bring your medical aid card and you will get a fully coded receipt to submit with your claim.", + "chiropracticfaq", + "chiropractic-faq", + "bg-background text-foreground py-20 sm:py-24", + "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", + "grid gap-12 lg:grid-cols-12", + "lg:col-span-5 lg:sticky lg:top-28 lg:self-start", + "text-xs font-semibold uppercase tracking-[0.18em] text-primary", + "Chiropractic care", + "mt-3 text-3xl font-bold leading-tight sm:text-4xl", + "The questions people ask", + "text-primary", + "before", + "their first adjustment.", + "mt-4 max-w-[44ch] text-base text-muted-foreground", + "Straight answers on what a visit involves, who we treat, and how booking works. If yours is not on this list, send it through rather than putting the visit off.", + "outline", + "mt-6", + "See services and book", + "ml-2 h-4 w-4", + "space-y-4 lg:col-span-7", + "rounded-lg bg-card shadow-md transition-all duration-200 ease-out hover:-translate-y-1 hover:shadow-xl", + "button", + "w-full cursor-pointer p-6 text-left", + "flex items-center justify-between gap-4", + "text-base font-semibold text-foreground sm:text-lg", + "rotate-180", + "px-6 pb-6 text-sm leading-relaxed text-muted-foreground" + ] + }, + { + "name": "VisitTheClinicSection", + "importPath": "@/components/sections/VisitTheClinicSection", + "position": 7, + "role": "unknown", + "hasImage": false, + "hasForm": true, + "itemCount": 15, + "layout": "grid", + "headings": [ + "Come in for an adjustment, or send us a message first.", + "Where to find us", + "Clinic hours" + ], + "buttonLabels": [], + "people": [], + "allText": [ + "use client", + "react", + "next/link", + "lucide-react", + "@/components/ui/Button", + "@/components/ui/Input", + "@/components/ui/Card", + "@/components/BusinessContact", + "@/components/BusinessHours", + "@/components/BusinessMap", + "@/hooks/useEnquiry", + "visittheclinic", + "visit-the-clinic", + "bg-muted text-foreground py-20 sm:py-24", + "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", + "grid gap-12 lg:grid-cols-12", + "lg:col-span-7", + "text-xs font-semibold uppercase tracking-[0.18em] text-primary", + "Visit the clinic", + "mt-3 text-3xl font-bold leading-tight sm:text-4xl", + "Come in for an adjustment, or send us a message first.", + "mt-4 max-w-[44ch] text-base text-muted-foreground", + "The practice is set up for families: a pram fits through the door, there is room for kids in the waiting area, and a newborn check does not need a full adult appointment slot.", + "mt-8 space-y-6", + "text-sm font-semibold uppercase tracking-wide text-muted-foreground", + "Where to find us", + "mt-2 text-sm text-muted-foreground", + "Clinic hours", + "mt-8", + "lg:col-span-5", + "Send a message", + "text-sm leading-relaxed text-foreground", + "space-y-4", + "Your name", + "name", + "Phone or WhatsApp number", + "phone", + "Email (optional)", + "email", + "visit-message", + "mb-1 block text-sm font-medium text-foreground", + "What would you like help with?", + "message", + "w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground outline-none transition-all duration-200 ease-out focus:border-primary focus:ring-2 focus:ring-primary/30", + "text-sm font-medium text-foreground", + "flex flex-col gap-3 pt-2", + "button", + "whatsapp", + "default", + "outline" + ] + } + ], + "navigationLinks": [ + "Chiro", + "Home", + "About", + "Services", + "Team", + "Gallery", + "Contact", + "Book Appointment" + ], + "cmsCollections": [ + { + "slug": "business_hours", + "label": "Opening Hours", + "icon": "Clock", + "aiEnabled": false, + "seedCount": 3, + "fields": [ + { + "name": "open", + "type": "text", + "label": "Opens" + }, + { + "name": "close", + "type": "text", + "label": "Closes" + } + ] + }, + { + "slug": "meet_the_team", + "label": "Meet The Team", + "icon": "LayoutGrid", + "aiEnabled": true, + "seedCount": 3, + "fields": [ + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "role", + "type": "text", + "label": "Role" + }, + { + "name": "bio", + "type": "textarea", + "label": "Bio" + }, + { + "name": "image", + "type": "image", + "label": "Image" + }, + { + "name": "tags", + "type": "list", + "label": "Tags" + } + ], + "promoted": true + }, + { + "slug": "clinic_gallery", + "label": "Clinic Gallery", + "icon": "LayoutGrid", + "aiEnabled": true, + "seedCount": 3, + "fields": [ + { + "name": "src", + "type": "image", + "label": "Src" + }, + { + "name": "alt", + "type": "text", + "label": "Alt" + }, + { + "name": "caption", + "type": "text", + "label": "Caption" + } + ], + "promoted": true + }, + { + "slug": "patient_stories", + "label": "Patient Stories", + "icon": "LayoutGrid", + "aiEnabled": true, + "seedCount": 3, + "fields": [ + { + "name": "quote", + "type": "textarea", + "label": "Quote" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "detail", + "type": "text", + "label": "Detail" + } + ], + "promoted": true + }, + { + "slug": "chiropractic_faq", + "label": "Chiropractic Faq", + "icon": "LayoutGrid", + "aiEnabled": true, + "seedCount": 3, + "fields": [ + { + "name": "q", + "type": "text", + "label": "Q" + }, + { + "name": "a", + "type": "textarea", + "label": "A" + } + ], + "promoted": true + } + ], + "platformAuthored": [ + "src/components/ui/Button.tsx", + "src/components/ui/Input.tsx", + "src/app/icon.svg", + "package.json", + "tsconfig.json", + "components.json", + "next.config.js", + "postcss.config.js", + "tailwind.config.js", + "src/lib/utils.ts", + "src/components/BusinessContact.tsx", + "src/components/BusinessMap.tsx", + "src/hooks/useEnquiry.ts", + "src/components/BusinessSchema.tsx", + "src/components/BusinessSocials.tsx", + "src/lib/siteMeta.ts", + "src/app/sitemap.ts", + "src/app/robots.ts", + "src/components/layout/Navigation.tsx", + ".env.local", + "src/hooks/useProducts.ts", + "src/app/api/products/route.ts", + "src/app/services/page.tsx", + "src/app/booking/[productId]/page.tsx", + "src/app/services/layout.tsx", + "src/app/booking/layout.tsx", + "src/app/b/[code]/page.tsx", + "src/app/b/layout.tsx", + "src/lib/cms.ts", + "src/app/api/content/[collection]/route.ts", + "src/hooks/useVulaContent.ts", + "src/components/BusinessHours.tsx" + ] +} \ No newline at end of file