Developers & APIs

Building a headless front end

Render TejRank content in Next.js App Router, Astro, Remix, Vue, or SvelteKit.

Integrate TejRank into modern web frameworks:

Next.js (App Router Example)

// app/blog/[slug]/page.tsx
import { Metadata } from 'next';

type Props = { params: { slug: string } };

async function getPost(slug: string) {
  const res = await fetch(`https://tejrank.com/api/v1/public/posts/${slug}`, {
    headers: { 'X-API-Key': process.env.BLOG_API_KEY! },
    next: { revalidate: 3600 },
  });
  const data = await res.json();
  return data.data?.post;
}

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const post = await getPost(params.slug);
  if (!post) return {};
  return {
    title: post.seo.metaTitle,
    description: post.seo.metaDescription,
    alternates: { canonical: post.seo.canonical },
    openGraph: post.seo.openGraph,
    twitter: post.seo.twitter,
  };
}

export default async function BlogPostPage({ params }: Props) {
  const post = await getPost(params.slug);
  if (!post) return <div>Post not found</div>;

  return (
    <article>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(post.jsonLd) }}
      />
      <h1>{post.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: post.body.html }} />
    </article>
  );
}