Static Content

BusinessDash's marketing content system lets you define multi-page, multi-locale, multi-language content in the dashboard and serve it through the SDK. Your site renders exactly what you configure — no redeploys needed when copy changes.


Marketing Pages (Schema-Driven)

The recommended approach. Define pages with a schema in your dashboard, then fetch them as structured bundles:

import { defineSiteMarketingSchema, section } from '@businessdash/sdk'

// Define the page schema (in your bd.config.ts or setup)
export default defineSiteMarketingSchema({
  pages: {
    home: {
      hero: section('hero', { title: true, subtitle: true, cta: true }),
      features: section('features', { repeatable: true, fields: { title: true, description: true, icon: true } }),
    },
    about: {
      content: section('rich-text'),
      team: section('team', { repeatable: true, fields: { name: true, role: true, photo: true } }),
    },
  },
})

Then fetch and render on your site:

const bundle = await bd.marketing.getPageBundle({ pageKey: 'home', locale: 'en' })

// bundle.hero → { title, subtitle, cta }
// bundle.features → [{ title, description, icon }, ...]

Schema CLI

Sync your schema and content changes from the dashboard without a full deploy:

npx bd sync-schema
npx bd sync-content

React Hooks

import { useMarketingPageBundle, useMarketingSection } from '@businessdash/sdk/react'

function HomePage() {
  const bundle = useMarketingPageBundle({ pageKey: 'home', locale: 'en' })
  const hero = useMarketingSection(bundle, 'hero')
  // ...
}

Legacy Marketing Pages (0.7)

For accounts on the 0.7 content model:

const page = await client.site(siteId).marketingPages.get('home')
// page.title, page.sections, page.seo, ...

const pages = await client.site(siteId).marketingPages.list()

SEO Metadata

Every marketing page carries SEO metadata you can render into <head>:

import { useMarketingPageSeo } from '@businessdash/sdk/react'

function PageHead() {
  const seo = useMarketingPageSeo({ pageKey: 'home' })
  return (
    <>
      <title>{seo.title}</title>
      <meta name="description" content={seo.description} />
      <meta name="og:title" content={seo.ogTitle} />
      <meta name="og:image" content={seo.ogImage} />
    </>
  )
}

Parallel Pages (Programmatic SEO)

Generate pages at scale from structured data — ideal for location pages, service area pages, or any template-driven SEO strategy:

import { defineParallelPage } from '@businessdash/sdk'

// Define the page template in your dashboard
const pageDef = defineParallelPage({
  template: 'location',
  fields: ['city', 'state', 'service'],
})

// List all rendered variants
const variants = await client.site(siteId).parallelPages.listVariants('location')
// → [{ slug: '/plumbing/portland-or', title: 'Plumbing Portland OR', ... }, ...]

// Render on demand
const html = await client.site(siteId).parallelPages.render('location', 'portland-or')

These automatically generate sitemap entries so search engines discover every variant.