diff --git a/apps/logicsrc-web/src/app/blog/[slug]/page.tsx b/apps/logicsrc-web/src/app/blog/[slug]/page.tsx index 0f1d922..fb140c2 100644 --- a/apps/logicsrc-web/src/app/blog/[slug]/page.tsx +++ b/apps/logicsrc-web/src/app/blog/[slug]/page.tsx @@ -4,6 +4,7 @@ import type { ReactNode } from "react"; import type { Metadata } from "next"; import { publicClient } from "@/lib/supabase"; import { SiteShell } from "@/components/site-shell"; +import { AdUnit } from "@/components/ad-unit"; import { sanitizeRenderedHtml } from "@/lib/html"; export const dynamic = "force-dynamic"; @@ -118,6 +119,9 @@ export default async function BlogPostPage({ style={{ lineHeight: 1.7 }} dangerouslySetInnerHTML={{ __html: html }} /> +
+ +
); diff --git a/apps/logicsrc-web/src/app/blog/page.tsx b/apps/logicsrc-web/src/app/blog/page.tsx index a92e048..77c6362 100644 --- a/apps/logicsrc-web/src/app/blog/page.tsx +++ b/apps/logicsrc-web/src/app/blog/page.tsx @@ -3,6 +3,7 @@ import type { ReactNode } from "react"; import type { Metadata } from "next"; import { publicClient } from "@/lib/supabase"; import { SiteShell } from "@/components/site-shell"; +import { AdUnit } from "@/components/ad-unit"; export const dynamic = "force-dynamic"; @@ -123,6 +124,10 @@ export default async function BlogIndex(): Promise { })} )} + +
+ +
); diff --git a/apps/logicsrc-web/src/components/ad-unit.tsx b/apps/logicsrc-web/src/components/ad-unit.tsx new file mode 100644 index 0000000..bdcd344 --- /dev/null +++ b/apps/logicsrc-web/src/components/ad-unit.tsx @@ -0,0 +1,20 @@ +import type { ReactNode } from "react"; +import Script from "next/script"; + +// CrawlProof ad unit, scoped to the pages that render it (currently /blog/*). +// The loader is deduped by src, so mounting on multiple routes only +// injects one https://crawlproof.com/ad.js. +export function AdUnit({ + slot, + format = "banner_300x250", +}: { + slot: string; + format?: string; +}): ReactNode { + return ( + <> +
+