import type { FeaturePage } from "@/lib/feature-pages"; type FeaturePageProps = { page: FeaturePage; }; export function FeaturePageTemplate({ page }: FeaturePageProps) { return (

{page.eyebrow}

{page.title}

{page.description}

Try OpenSEO

What you can do

    {page.workflows.map((workflow, index) => (
  1. {String(index + 1).padStart(2, "0")}

    {workflow.title}

    {workflow.description}

  2. ))}
{page.showMetrics ? : null}
{page.guides ? : null}

Related features

{page.related.map((item) => ( {item.label} ))}

FAQ

{page.faqs.map((faq) => (

{faq.question}

{faq.answer}

))}

Try OpenSEO

The open source alternative to bloated, expensive, legacy SEO tools.

); } function FeatureImage({ page }: FeaturePageProps) { return (
{page.imageAlt}
{page.eyebrow} in OpenSEO.
); } function MetricsSection({ page }: FeaturePageProps) { return (

Data you can act on

{page.metrics.map((metric, index) => (
0 && "border-t border-[var(--color-border-subtle)]", index % 2 === 1 && "sm:border-l sm:border-[var(--color-border-subtle)]", index > 1 && "sm:border-t", index > 0 && "md:border-l md:border-t-0 md:border-[var(--color-border-subtle)]", ] .filter(Boolean) .join(" ")} >
{metric.label}
{metric.value}
))}
); } function GuidesSection({ guides, }: { guides: NonNullable; }) { return (

{guides.title}

{guides.description}

{guides.items.map((item) => (

{item.label}

{item.description}

))}
{guides.cta.label}
); } function ListSection({ title, items }: { title: string; items: string[] }) { return (

{title}

); }