BigMarc 67ea5d48be Initial commit: Bunny Agency Italia (it-IT) marketing site
Italian-market site for the Bunny Agency network, built on the shared
Next.js App Router template with content driven from site-content.json.

- 50 routes: home, 5 services, pricing, FAQ, about/apply/contact,
  32 blog answers and guides, 5 legal pages
- Research-driven Italian copy citing ISTAT, INPS and Agenzia delle Entrate
  (forfettario 15%/5%, ATECO 73.11.03, INPS 26,07%, tassa etica, DAC7)
- 6 long-form guides targeting high-volume Italian creator searches
- "Milanese Editoriale" design system with stats band, editorial article
  layout, creator gallery and footer language switcher to 18 sibling sites
- Full SEO/AEO/GEO: JSON-LD entity graph, hreflang cluster, llms.txt,
  IndexNow, sitemap, AI-crawler-friendly robots
- validate-seo.mjs passes with 0 errors

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 09:00:28 +02:00

32 lines
1.5 KiB
TypeScript

import Link from "next/link";
import { content, pages, type SeoPage } from "@/lib/content";
export function breadcrumbPages(page: SeoPage): SeoPage[] {
if (page.path === "/") return [];
const parentPath = page.path.startsWith("/services/") ? "/services" : page.path.startsWith("/blog/") ? "/blog" : null;
const parent = parentPath ? pages.find((candidate) => candidate.path === parentPath) : undefined;
return [...(parent ? [parent] : []), page];
}
type LegacyItem = { label: string; href?: string };
export default function Breadcrumbs({ page, items }: { page?: SeoPage; items?: LegacyItem[] }) {
if (items) return <nav className="breadcrumbs" aria-label="Breadcrumb"><ol>
<li><Link href="/">{content.labels.home}</Link></li>
{items.filter((item) => item.href !== "/").map((item, index, list) => <li key={`${item.href ?? "current"}-${item.label}`} aria-current={index === list.length - 1 ? "page" : undefined}>
{item.href && index !== list.length - 1 ? <Link href={item.href}>{item.label}</Link> : <span>{item.label}</span>}
</li>)}
</ol></nav>;
if (!page) return null;
const crumbs = breadcrumbPages(page);
if (!crumbs.length) return null;
return <nav className="breadcrumbs" aria-label="Breadcrumb">
<ol>
<li><Link href="/">{content.labels.home}</Link></li>
{crumbs.map((crumb, index) => <li key={crumb.path} aria-current={index === crumbs.length - 1 ? "page" : undefined}>
{index === crumbs.length - 1 ? <span>{crumb.h1}</span> : <Link href={crumb.path}>{crumb.h1}</Link>}
</li>)}
</ol>
</nav>;
}