Custom Content Provider
For dynamic content from a database, CMS, or API, implement the ContentProvider interface.
ContentProvider interface
typescript
import { type ContentProvider } from 'geo-ai-nest';
class MyProvider implements ContentProvider {
async getSections(options?: { locale?: string }) {
return [
{
name: 'Products',
type: 'product',
resources: [
{ title: 'Widget', url: '/products/widget', description: 'A great widget' },
],
},
];
}
}Database example
typescript
import { GeoAIModule, type ContentProvider } from 'geo-ai-nest';
class DatabaseProvider implements ContentProvider {
constructor(private readonly productRepo: ProductRepository) {}
async getSections(options?: { locale?: string }) {
const products = await this.productRepo.findAll(options?.locale);
const posts = await this.blogRepo.findPublished();
return [
{
name: 'Products',
type: 'product',
resources: products.map(p => ({
title: p.name,
url: `/products/${p.slug}`,
description: p.shortDescription,
content: p.fullDescription,
price: p.price,
})),
},
{
name: 'Blog',
type: 'page',
resources: posts.map(p => ({
title: p.title,
url: `/blog/${p.slug}`,
description: p.excerpt,
content: p.body,
})),
},
];
}
}
// In your module:
GeoAIModule.forRootAsync({
imports: [DatabaseModule],
useFactory: (productRepo: ProductRepository) => ({
siteName: 'My Store',
siteUrl: 'https://mystore.com',
provider: new DatabaseProvider(productRepo),
}),
inject: [ProductRepository],
})