Skip to main content

Purpose

Use the CMS site contract for new CMS-backed websites. It is the global version 1 schema, not an external-project adapter or project-specific implementation. External apps retain their own adapter identity and carry this contract through workspace-scoped template metadata and collection schema/profile metadata. Backend routes and database objects retain their existing external-project* names for compatibility. Normal CMS UI should use editor-facing site and content language.

Standard Collections

The v1 contract starts with site-settings, navigation, pages, posts, taxonomies, landing-sections, redirects, and media-assets. Apps may add fields and collections through the manifest schema without creating another adapter. The optional template object is versioned independently:
Template metadata is persisted on the workspace binding. It is returned in sync snapshots and public delivery, but it does not create content diff operations or destructive changes.

Public Consumption

The Tuturuuu SDK exports buildCmsSiteManifest and normalizeCmsSiteDelivery. The builder creates the standard schema. The delivery normalizer indexes collections by slug and resolves relative asset URLs against the public platform origin supplied by the consumer. Public sites should consume read-only delivery and keep a static fallback for availability during migration. Do not place site control secrets in public runtime configuration.

Migration Safety

Keep the existing site, administration routes, and realtime endpoints authoritative while mirroring is introduced. Validate imports, reverse replies, idempotency, retry after platform outage, and health checks on preview or local canaries first. Production authority or routing must not switch until the operator explicitly approves cutover after deployed verification. A healthy bridge is a prerequisite, not cutover approval. Rollback must restore direct legacy routing without a database migration. Visitor context such as route history or network information belongs in access-controlled dynamic JSON metadata. Do not add fixed columns that reveal or imply a particular category of confidential data.