diff --git a/src/components/sections/CampaignSection.tsx b/src/components/sections/CampaignSection.tsx
new file mode 100644
index 0000000..206a3dd
--- /dev/null
+++ b/src/components/sections/CampaignSection.tsx
@@ -0,0 +1,47 @@
+'use client'
+import { useVulaContent } from '@/hooks/useVulaContent'
+import Image from 'next/image'
+
+export default function CampaignSection() {
+ const { items, loading } = useVulaContent('campaigns')
+
+ if (loading) {
+ return
+ }
+ if (items.length === 0) return null
+
+ return (
+
+
+
+
Seasonal collections
+
Limited runs from the Ukaya workshop
+
Small-batch campaigns drop throughout the year. When a collection is gone, it is gone.
+
+
+ {items.map((item) => {
+ const d = item.data as { title?: string; headline?: string; body?: string; cta_text?: string; image?: string }
+ return (
+
+
+ {d.image ? (
+
+ ) : (
+
+ )}
+
+
+ {d.title ?
{d.title}
: null}
+ {d.headline ?
{d.headline}
: null}
+ {d.body ?
{d.body}
: null}
+ {d.cta_text ?
{d.cta_text} : null}
+
+
+
+ )
+ })}
+
+
+
+ )
+}
\ No newline at end of file