Sofondo
SofondoFrameworkDocs

Next.js Helpers

Server-side utilities for Next.js App Router including cookies, metadata, and structured data

These utilities are designed specifically for Next.js 13+ App Router and leverage Next.js server components. All async cookie utilities must be used in server components or server actions.

Installation

npm install @sofondo/next

Server Components Only

Cookie utilities use Next.js cookies() function and must be called in Server Components or Server Actions. They cannot be used in Client Components.

Cookie Utilities

Server-side cookie management utilities for Next.js App Router

getCookie

async getCookie(name: string): Promise<string | undefined>

Get a cookie value by name

Example

import { getCookie } from '@sofondo/next';

async function MyServerComponent() {
  const sessionToken = await getCookie('session');

  if (!sessionToken) {
    redirect('/login');
  }

  return <div>Welcome back!</div>;
}

setCookie

async setCookie(name: string, value: string, options?): Promise<void>

Set a cookie with optional configuration

Example

import { setCookie } from '@sofondo/next';

async function handleLogin() {
  await setCookie('session', 'abc123', {
    httpOnly: true,
    secure: true,
    sameSite: 'lax',
    maxAge: 60 * 60 * 24 * 7 // 7 days
  });
}

deleteCookie

async deleteCookie(name: string): Promise<void>

Delete a cookie by name

Example

import { deleteCookie } from '@sofondo/next';

async function handleLogout() {
  await deleteCookie('session');
  redirect('/login');
}

hasCookie

async hasCookie(name: string): Promise<boolean>

Check if a cookie exists

Example

import { hasCookie } from '@sofondo/next';

async function MyComponent() {
  const hasSession = await hasCookie('session');

  return (
    <div>
      {hasSession ? 'Logged in' : 'Guest'}
    </div>
  );
}

getAllCookies

async getAllCookies(): Promise<Map<string, string>>

Get all cookies as a Map

Example

import { getAllCookies } from '@sofondo/next';

async function DebugCookies() {
  const allCookies = await getAllCookies();

  return (
    <div>
      {Array.from(allCookies.entries()).map(([key, value]) => (
        <div key={key}>{key}: {value}</div>
      ))}
    </div>
  );
}

Metadata Utilities

SEO and metadata generation utilities for Next.js pages

generateMetadata

generateMetadata(options: MetadataOptions): Metadata

Generate complete metadata for a page including Open Graph and Twitter cards

Example

import { generateMetadata } from '@sofondo/next';

export const metadata = generateMetadata({
  title: 'My Page Title',
  description: 'This is my page description',
  keywords: ['nextjs', 'react', 'sofondo'],
  image: 'https://example.com/og-image.jpg',
  url: 'https://example.com/my-page',
  siteName: 'My Site',
  type: 'article',
  author: 'John Doe'
});

generatePageTitle

generatePageTitle(pageTitle: string, siteName: string, separator?: string): string

Generate formatted page title with site name

Example

import { generatePageTitle } from '@sofondo/next';

const title = generatePageTitle('About Us', 'My Site');
// Result: "About Us | My Site"

const customSeparator = generatePageTitle('Blog', 'My Site', '-');
// Result: "Blog - My Site"

generateBreadcrumbSchema

generateBreadcrumbSchema(items: Array<{ name: string; url: string }>): object

Generate breadcrumb structured data (JSON-LD) for SEO

Example

import { generateBreadcrumbSchema } from '@sofondo/next';

const schema = generateBreadcrumbSchema([
  { name: 'Home', url: 'https://example.com' },
  { name: 'Products', url: 'https://example.com/products' },
  { name: 'Laptops', url: 'https://example.com/products/laptops' }
]);

// Add to page:
<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>

generateArticleSchema

generateArticleSchema(article: ArticleOptions): object

Generate article structured data (JSON-LD) for blog posts and articles

Example

import { generateArticleSchema } from '@sofondo/next';

const schema = generateArticleSchema({
  headline: 'Getting Started with Next.js',
  description: 'A comprehensive guide to Next.js',
  image: 'https://example.com/article-image.jpg',
  datePublished: '2024-01-15T10:00:00Z',
  dateModified: '2024-01-20T15:30:00Z',
  author: 'Jane Doe',
  publisher: {
    name: 'My Blog',
    logo: 'https://example.com/logo.png'
  }
});

// Add to page:
<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>

generateOrganizationSchema

generateOrganizationSchema(org: OrganizationOptions): object

Generate organization structured data (JSON-LD) for company information

Example

import { generateOrganizationSchema } from '@sofondo/next';

const schema = generateOrganizationSchema({
  name: 'My Company',
  url: 'https://example.com',
  logo: 'https://example.com/logo.png',
  description: 'We build amazing software',
  email: 'contact@example.com',
  telephone: '+1-555-0100',
  address: {
    streetAddress: '123 Main St',
    addressLocality: 'San Francisco',
    addressRegion: 'CA',
    postalCode: '94102',
    addressCountry: 'US'
  }
});

// Add to page:
<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>

Learn More

These helpers work seamlessly with Sofondo components and hooks to build complete Next.js applications.