@bernierllc/site-builder-service
v0.1.1
Published
Orchestrator service resolving, rendering, and publishing config-driven website profiles via a SiteConfigStore adapter.
Readme
@bernierllc/site-builder-service
Orchestrator service that resolves, renders, and publishes config-driven website profiles from a SiteConfigStore adapter.
Status: scaffold — implementation pending.
Overview
SiteBuilder is the central orchestrator for the Website Builder cluster. It composes @bernierllc/site-config-core with a pluggable SiteConfigStore adapter, a SectionResolutionPipeline (injects live data readers), and a tenant resolver (slug/subdomain → tenantId). It exposes a publish lifecycle (draft → ready → published) and emits NeverHub events.
Installation
npm install @bernierllc/site-builder-serviceUsage
import { SiteBuilder, InMemorySiteConfigStore } from '@bernierllc/site-builder-service';
const builder = new SiteBuilder({
store: new InMemorySiteConfigStore(),
dataReaders: { services: myServicesReader },
storage: myS3StorageAdapter,
neverhub: { enabled: true },
});
await builder.initialize();
const model = await builder.loadBySlug('acme');
// model.cssVariables, model.completeness, model.resolvedSections
await builder.save({ tenantId: 'tenant-1', slug: 'acme', branding: { name: 'Acme Plumbing' } });
await builder.publish('tenant-1');Next.js Middleware Recipe
// middleware.ts (consumer's code)
export function middleware(request: NextRequest) {
const slug = request.headers.get('host')?.split('.')[0] ?? '';
const response = NextResponse.next();
response.headers.set('x-org-slug', slug);
return response;
}Error Classes
SiteBuilderError— base error withcodeand optionalcontext
Common error codes: NOT_FOUND, INCOMPLETE, NO_STORAGE, SITE_BUILDER_ERROR.
License
Copyright (c) 2025 Bernier LLC. Limited-use license — see LICENSE for details.
