{
  parent: '',  // 'self' = this BEM is the parent (newsletter-sources provider); a URL = external parent; '' = no parent
  brand: {
    id: 'my-app',
    name: 'My Brand',
    description: '',
    url: 'https://example.com',
    contact: {
      email: 'support@example.com',
    },
    // Physical postal address — required by CAN-SPAM in commercial email footers.
    // Rendered in the newsletter footer + transactional email footers.
    // Structured so the renderer can format it consistently across locales
    // and break onto multiple lines if needed. line2/region/postalCode are optional.
    address: {
      line1: '123 Main St',
      line2: 'Suite 100',
      city: 'City',
      region: 'ST',
      postalCode: '12345',
      country: 'United States',
    },
    images: {
      wordmark: 'https://example.com/wordmark.png',
      brandmark: 'https://example.com/wordmark.png',
      combomark: 'https://example.com/combomark.png',
    },
  },
  github: {
    user: 'username',
    repo_website: 'https://github.com/username/backend-manager',
  },
  parent: '',  // URL of the parent BEM instance (e.g., 'https://api.itwcreativeworks.com') — used by newsletter generator to pull sources
  sentry: {
    dsn: 'https://d965557418748jd749d837asf00552f@o777489.ingest.sentry.io/8789941',
  },
  analytics: {
    providers: {
      google: {
        id: null,
      },
      meta: {
        id: null,
      },
      tiktok: {
        id: null,
      },
    },
  },
  oauth2: {},
  payment: {
    processors: {
      stripe: {
        publishableKey: null,
      },
      paypal: {
        clientId: null,
      },
      chargebee: {
        site: null,
      },
      coinbase: {
        enabled: false,
      },
    },
    products: [
      {
        id: 'basic',
        name: 'Basic',
        type: 'subscription',
        limits: {
          requests: 100,
        },
      },
      {
        id: 'premium',
        name: 'Premium',
        type: 'subscription',
        limits: {
          requests: 1000,
        },
        trial: {
          days: 14,
        },
        prices: {
          monthly: 4.99,
          annually: 49.99,
        },
        stripe: {
          productId: null,
        },
        paypal: {
          productId: null,
        },
        chargebee: {
          itemId: null,
          legacyPlanIds: [],
        },
      },
      {
        id: 'ultimate',
        name: 'Ultimate',
        type: 'subscription',
        limits: {
          requests: 10000,
        },
        prices: {
          monthly: 19.99,
          annually: 199.99,
        },
        stripe: {
          productId: null,
        },
        paypal: {
          productId: null,
        },
        chargebee: {
          itemId: null,
          legacyPlanIds: [],
        },
      },
      {
        id: 'credits-100',
        name: '100 Credits',
        type: 'one-time',
        prices: {
          once: 9.99,
        },
        stripe: {
          productId: null,
        },
        chargebee: {
          itemId: null,
        },
      },
      // Add more products/tiers here
    ],
  },
  marketing: {
    campaigns: {
      enabled: true,
      platform: 'sendgrid',
      listId: '',  // SendGrid Marketing list UUID. Populated by OMEGA's sendgrid/ensure/list.js. Skips runtime list-discovery API call.
    },
    newsletter: {
      enabled: false,
      platform: 'beehiiv',
      publicationId: '',  // Beehiiv publication ID (e.g., 'pub_xxxxx'). Populated by OMEGA's beehiiv/ensure/publication.js. Required for marketing sync to Beehiiv.
      // Content: single object or array (matches blog config shape). Generator uses the first entry.
      content: [
        {
          sources: ['$parent'],    // '$parent' | '$feed:https://...' | '$brand'
          categories: [],          // e.g., ['social-media', 'marketing'] — topic constraints + AI categorization
          links: [],               // links to inject into generated content
          instructions: '',        // free-form text passed to the AI
          tone: 'professional',    // 'professional' | 'casual' | 'actionable' | 'witty' | etc.
          keywords: [],            // SEO keywords to weave in
          template: 'clean',       // 'clean' | 'editorial' | 'field-report' — layout template
          article: {
            enabled: false,        // expand lead section into a full blog post via Ghostii
            author: null,
          },
          theme: {
            primaryColor: '#5B5BFF',
            secondaryColor: '#1E1E2A',
            accentColor: '#F6F7FB',
            font: 'Inter, system-ui, sans-serif',
          },
          sponsorships: [],
        },
      ],
    },
    prune: {
      enabled: true,
    },
  },
  firebaseConfig: {
    apiKey: '123-456',
    authDomain: 'PROJECT-ID.firebaseapp.com',
    projectId: 'PROJECT-ID',
    storageBucket: 'PROJECT-ID.appspot.com',
    messagingSenderId: '123',
    appId: '1:123:web:456',
    measurementId: 'G-0123456789',
  },
  // Standalone blog auto-publisher (daily cron). OPT-IN: disabled by default.
  // Set enabled: true and quantity >= 1 to auto-publish independent blog posts.
  // For newsletter-linked articles, use marketing.newsletter.content.article.enabled instead.
  //
  // `platform` selects the article-generation provider (only 'ghostii' for now).
  //
  // Source types:
  //   '$brand'                          — generic brand-topic generation
  //   '$feed:https://example.com/feed'  — RSS/Atom/JSON feed: pick one unprocessed article per run
  //   '$parent'                         — fetch sources from parent server's source pool (without claiming)
  //   'https://example.com/page'        — fetch URL content as prompt seed
  //   'Write about topic X'             — text: use directly as prompt seed
  //
  // All feed/parent sources are tracked in Firestore (`content-sources`) so the same
  // article is never reprocessed. When a feed is unreachable or exhausted, falls back to $brand.
  blog: {
    enabled: false,
    platform: 'ghostii',
    content: [
      {
        sources: [             // '$brand' | '$feed:https://...' | '$parent'
          '$brand',
          // '$feed:https://techcrunch.com/feed/',
          // '$parent',
        ],
        categories: [],        // topic constraints + output tags
        links: [],             // links to inject into generated content
        instructions: '',      // free-form text passed to the AI
        tone: 'professional',  // 'professional' | 'casual' | 'actionable' | 'witty' | etc.
        keywords: [],          // SEO keywords to weave in
        quantity: 0,           // number of articles to generate per run
        chance: 1.0,
        author: null,
        postPath: 'ghostii',  // defaults to platform name; sub-folder under _posts/{year}/
        // Per-entry Ghostii API overrides (all optional, fall back to framework defaults)
        overrides: {
          // keywords: ['AI', 'technology'],
          // length: 'long',              // short | medium | long | comprehensive
          // research: true,              // web search for real external links
          // insertImages: true,          // section images from Unsplash
          // headerImageUrl: 'unsplash',  // disabled | unsplash | generate
          // maxLinks: 6,
          // sectionQuantity: 5,
          // feedUrl: '',                 // brand blog feed for title dedup
        },
        // brand: 'other-app-id',                // Optional: target a different brand
        // brandUrl: 'https://api.otherapp.com',  // Required if brand is set
      },
    ],
  },
  reviews: {
    enabled: true,
    sites: [
      'trustpilot.com',
    ],
  },
  dataRequest: {
    // Additional queries to include in GDPR data exports
    // BEM always exports: users, auth record, data-requests, payments-intents, payments-orders
    // Single doc: { path: 'collection/{uid}', redact: ['field.to.redact'] }
    // Collection query: { collection: 'my-data', where: [['ownerField', '==', '{uid}']] }
    queries: [],
  },
}
