diff --git a/src/components/sections/HarvestPromoCampaignSection.tsx b/src/components/sections/HarvestPromoCampaignSection.tsx
new file mode 100644
index 0000000..3e56248
--- /dev/null
+++ b/src/components/sections/HarvestPromoCampaignSection.tsx
@@ -0,0 +1,72 @@
+'use client'
+
+import { useState } from 'react'
+import { useVulaContent } from '@/hooks/useVulaContent'
+import Image from 'next/image'
+import Link from 'next/link'
+import Button from '@/components/ui/Button'
+import Badge from '@/components/ui/Badge'
+
+export default function HarvestPromoCampaignSection() {
+ const { items, loading } = useVulaContent('campaigns')
+ const [activeIndex, setActiveIndex] = useState(0)
+
+ if (loading) return
+ if (items.length === 0) return null
+
+ // Ensure activeIndex is within bounds
+ const safeIndex = Math.min(activeIndex, items.length - 1)
+ const item = items[safeIndex]
+ const d = item.data as { title?: string; headline?: string; body?: string; cta_text?: string; image?: string }
+
+ return (
+
+
+
+
+
+ {d.headline && (
+
+ {d.headline}
+
+ )}
+ {d.title &&
{d.title}
}
+ {d.body &&
{d.body}
}
+ {d.cta_text && (
+
+
+
+ )}
+
+
+ Limited time offer
+
+
+ {d.image && (
+
+
+
+ )}
+
+ {/* Navigation dots for multiple campaigns */}
+ {items.length > 1 && (
+
+ {items.map((_, idx) => (
+
+ )}
+
+
+
+ )
+}
\ No newline at end of file