diff --git a/src/components/sections/CampaignLookbookSection.tsx b/src/components/sections/CampaignLookbookSection.tsx
new file mode 100644
index 0000000..8b4be70
--- /dev/null
+++ b/src/components/sections/CampaignLookbookSection.tsx
@@ -0,0 +1,56 @@
+'use client'
+
+import Image from 'next/image'
+import { useVulaContent } from '@/hooks/useVulaContent'
+import { ArrowRight } from 'lucide-react'
+
+interface CampaignItemData {
+ title?: string
+ headline?: string
+ body?: string
+ cta_text?: string
+ image?: string
+}
+
+export default function CampaignLookbookSection() {
+ const { items, loading } = useVulaContent('campaigns')
+
+ if (loading) {
+ return
+ }
+
+ if (items.length === 0) return null
+
+ return (
+
+
+
+
Lookbook / Durban
+
Shoots that hit different.
+
+
+ {items.slice(0, 4).map((item) => {
+ const d = (item.data ?? {}) as CampaignItemData
+ return (
+
+
+ {d.image ? (
+
+ ) : (
+
KD
+ )}
+
+
+ {d.headline ?
{d.headline}
: null}
+ {d.title ?
{d.title}
: null}
+ {d.body ?
{d.body}
: null}
+ {d.cta_text ?
{d.cta_text} : null}
+
+
+ )
+ })}
+
+
+
+ )
+}
\ No newline at end of file