const { Button, Badge, Breadcrumbs, Callout } = window.ZaviFxDesignSystem_f15c31; const CAT_ART = { SEO: 'radial-gradient(120% 100% at 78% 12%,#FFB870 0%,rgba(255,184,112,0) 58%),linear-gradient(150deg,#D93A12,#7A1F08)', Development: 'radial-gradient(110% 90% at 20% 20%,#8FB4FF 0%,rgba(143,180,255,0) 60%),linear-gradient(150deg,#1B2540,#0A0F1C)', 'Link Building': 'radial-gradient(110% 90% at 80% 80%,#FFD79A 0%,rgba(255,215,154,0) 55%),linear-gradient(150deg,#8A4A12,#2C1607)', 'UI/UX': 'radial-gradient(110% 90% at 30% 15%,#F2A0C4 0%,rgba(242,160,196,0) 60%),linear-gradient(150deg,#3B1230,#150612)', Branding: 'radial-gradient(120% 90% at 70% 20%,#FFC463 0%,rgba(255,196,99,0) 55%),linear-gradient(150deg,#4A2A08,#171008)', Performance: 'radial-gradient(110% 90% at 25% 80%,#7EE0C0 0%,rgba(126,224,192,0) 55%),linear-gradient(150deg,#0C3129,#04120F)', Content: 'radial-gradient(110% 90% at 75% 25%,#C9B6FF 0%,rgba(201,182,255,0) 58%),linear-gradient(150deg,#241A47,#0C0818)', 'E-commerce': 'radial-gradient(110% 90% at 20% 25%,#FF9E7A 0%,rgba(255,158,122,0) 58%),linear-gradient(150deg,#5A1B0C,#1C0805)', Social: 'radial-gradient(110% 90% at 80% 30%,#9AD6FF 0%,rgba(154,214,255,0) 58%),linear-gradient(150deg,#0E2A44,#050F1A)', Analytics: 'radial-gradient(110% 90% at 30% 75%,#B9F0A0 0%,rgba(185,240,160,0) 55%),linear-gradient(150deg,#1B3312,#080F05)', Strategy: 'radial-gradient(120% 100% at 50% 10%,#FFCF8A 0%,rgba(255,207,138,0) 60%),linear-gradient(150deg,#3A2A12,#120D06)', }; const art = (c) => CAT_ART[c] || CAT_ART.SEO; function Cover({ cat, tall }) { return (
); } function readSlug() { const h = location.hash.slice(1); return h.startsWith('insights/') ? h.slice(9) : null; } function ArticleView({ post, go, open }) { const related = window.POSTS.filter((p) => p.slug !== post.slug && p.cat === post.cat).slice(0, 2); const more = window.POSTS.filter((p) => p.slug !== post.slug && !related.includes(p)).slice(0, 3 - related.length); React.useEffect(() => { window.scrollTo(0, 0); }, [post.slug]); return (
{post.cat}

{post.title}

{post.excerpt}

{new Date(post.date).toLocaleDateString('en-GB', { day: 'numeric', month: 'long', year: 'numeric' })} {post.read} min read ZaviFx editorial team
{post.body.map((sec, i) => (

{sec[0]}

{sec.slice(1).map((para, j) =>

)} {i === 1 && Working through this yourself? We publish the same checklists we use internally — no gated PDFs.}

))}
Want this reviewed on your site?

A 30-minute consultation and a written summary of what we would prioritise.

Keep reading

{[...related, ...more].map((p) => )}
); } function PostCard({ post, open, feature }) { return ( { e.preventDefault(); open(post.slug); }} data-tilt>
{post.cat}

{post.title}

{post.excerpt}

{post.read} min read
); } function BlogPage({ go }) { const [slug, setSlug] = React.useState(readSlug()); const [cat, setCat] = React.useState('All'); React.useEffect(() => { const on = () => setSlug(readSlug()); window.addEventListener('hashchange', on); return () => window.removeEventListener('hashchange', on); }, []); const open = (s) => { location.hash = 'insights/' + s; setSlug(s); }; const post = slug && window.POSTS.find((p) => p.slug === slug); if (post) return ; const cats = ['All', ...Array.from(new Set(window.POSTS.map((p) => p.cat)))]; const list = cat === 'All' ? window.POSTS : window.POSTS.filter((p) => p.cat === cat); const [lead, ...rest] = list; return ( <>
Insights

Notes on search, websites and growth

Practical write-ups from live client work — technical SEO, WordPress performance, design systems and paid media. Written by the people doing the work, not gated behind a form.

{cats.map((c) => ( ))}
{lead && } {rest.map((p) => )}
); } Object.assign(window, { BlogPage, PostCard, Cover });