Skip to documentation
CERRA

Architecture / Cerra Cloud 2.0

Cerra Sites: one platform, independent applications

Where Cerra Cloud and Cerra Sites run, how accounts and data connect, and the staged plan to move Live Capture into independently deployed modules.

Verified November 4, 2026

Cerra Sites is the application layer of Cerra Cloud 2.0. The main platform provides a stable entry point, accounts and discovery; each site has its own release, URL and access policy. An agent can work through scoped APIs to edit, deploy and maintain an application without rebuilding the main platform for every customer change.

Two products with similar names appear in this guide: ChatGPT Sites is the managed hosting service used by the original Cerra Cloud application. Cerra Sites is our own modular application platform at sites.cerra.cloud. Both use Cloudflare technology, but their deployment control and databases are separate.

The current system architecture

Follow the solid connections below. The website, identity authority, deployment gateway, application data and capture processes are different parts of the system. A shared domain suffix does not mean a shared database or a shared browser session.

Readers, members and agents

Browser → main platform or site URL · Agent → authenticated Cerra Sites API / MCP tools

cerra.cloud · managed by ChatGPT Sites

Original Cerra Cloud

  1. Main website + application API

    Cloudflare Worker and built assets; CERRA accounts, documentation, marketplace entry and existing modules.

    Sites-managed cloud runtime
  2. Main D1 + private R2

    Accounts, sessions, traffic records and review history in D1; images and larger objects in R2.

    Resources bound to the original Site
sites.cerra.cloud · CERRA-operated

Cerra Sites control plane

  1. Cloudflare gateway Worker

    Console, site ownership, membership, scoped API credentials, deployment routing and publication.

    cerra-sites-staging
  2. Independent Sites D1

    Tenant/site registry, releases, audit, account links and small static bundles.

    Cloudflare · Eastern North America (current metadata)
Example: sha.sites.cerra.cloud

Managed application runtime

  1. Authenticated provider via Cloudflare Tunnel

    The gateway selects a reviewed release; a provider manages Docker on a CERRA-operated Linux host.

    Managed Linux host
  2. Isolated application container

    App-specific process and resource limits; stable site and account identity passed by the gateway.

  3. Persistent site volume

    SHA application SQLite data survives replacing the container. Source and build records are stored separately on the host.

Existing independent workstation services

Live Capture today

  1. Camera acquisition + local inference

    Capture, model inference and health monitoring run outside the website request runtime.

    Existing capture / GPU workstation
  2. Durable delivery spool

    Local SQLite retains unacknowledged observations and retries with stable IDs and original timestamps.

  3. Original traffic ingest API

    Authenticated delivery to cerra.cloud writes structured records to main D1 and evidence images to main R2.

  • Current
    Main platform connects to Sites console

    Marketplace link and shared-account authorization redirect

  • Current
    Sites gateway connects to Main account API

    Server-to-server code exchange and live session / permission validation

  • Current
    Site hostname → gateway connects to Static D1 bundle or container provider

    Resolve the active deployment; enforce its access policy

  • Current
    Capture workstation connects to Main traffic API → D1 / R2

    Authenticated, retryable ingestion; no direct browser database access

Current deployment — verified November 4, 2026. Migration proposals appear later in this guide. The container adapter uses our managed Docker host, not the Cloudflare Containers product. The original application is a managed Worker deployment, not a VM for each user. Sites and the main application communicate through authenticated APIs; they do not directly mount each other’s databases.

Where each part is deployed

The public URL identifies an entry point. Runtime ownership and release boundaries explain what actually changes when an application is published.

Entry / componentActual runtimeRelease boundary and current scope
cerra.cloudChatGPT Sites-managed Cloudflare Worker + assetsOriginal application, account authority and existing modules remain here. A release currently rebuilds this application.
sites.cerra.cloudCERRA-operated Cloudflare WorkerConsole and gateway remain on the staging-named Worker and independent staging D1. The brand domain does not imply a completed production-environment migration.
hello-cerra.sites.cerra.cloud · calendar.sites.cerra.cloudStatic content served by the Sites gatewayEach site has its own active release and hostname. Today: up to 20 text files / 512 KiB per bundle, sandboxed with external network access blocked.
sha.sites.cerra.cloudSites gateway → authenticated tunnel → managed Docker applicationPrivate container viewing, persistent application data, source revisions and builds are implemented. Editable assets and release metadata are allowed; the server and Dockerfile remain operator-managed.
Live Capture acquisition and inferenceIndependent Linux workstation servicesProcesses continue when a dashboard closes. Their capture/delivery health and local backlog are operational concerns distinct from website availability.
Future Worker / VM adaptersNot currently available as general customer runtimesWorkers for Platforms entitlement is not enabled in the current account. VM support and arbitrary user-code execution require a separate implementation and operating model.

One account authority, separate application permissions

The existing CERRA account is the identity source for both platforms. A successful sign-in proves who the visitor is; site ownership, editor membership and module permissions determine what that person can do.

Current behavior

  • Password, Google and email sign-in resolve through the original CERRA account system. Sites links the stable account ID to its own tenant records; it does not copy passwords.
  • Enabled accounts can authenticate. Creation and broader management depend on deployment/admin capability; explicitly assigned site editors receive their scoped rights. A login alone never grants every site or every module.
  • Private container viewing uses a separate site-view authorization purpose and host-only session. The current SHA policy checks its module entitlement, site ownership or editor membership. Private static-site browsing is not yet implemented.
  • Agents use expiring, revocable credentials scoped to a site and permitted operations. They do not receive Cloudflare account credentials, the main session cookie or unrestricted host access.

How shared sign-in works

  1. Start from Sites

    Sites creates a random state and S256 PKCE challenge, then redirects the browser to the main platform’s authorization endpoint.

  2. Use the existing CERRA login

    The main platform checks the enabled account and live session, then returns a short-lived, single-use authorization code to the fixed Sites callback.

  3. Exchange on the server

    Sites validates state and exchanges the code with its verifier over an authenticated backchannel. The browser receives a Sites-specific Secure, HttpOnly, host-only cookie.

  4. Check authorization on each request

    The gateway revalidates the grant with the main service and applies the current site policy. Account disablement, session expiry and changed permissions take effect without sharing a parent-domain cookie.

Signing out of the Sites console revokes its grant; signing out of the main CERRA session invalidates grants tied to that session. If the identity service cannot validate a protected request, access fails closed. Independent releases therefore still have an explicit availability dependency on the shared account service.

Where the databases and files live

Account sharing is an API relationship, not a database merge. These stores have separate owners, backup needs and recovery procedures. Cloudflare’s edge network does not make every database globally replicated.

DataCurrent storageOwnership / recovery boundary
Original platform accounts and business recordsChatGPT Sites-managed Cloudflare D1, bound as DBUsers, sessions, shared-login grants, traffic observations and review history remain in the original Site. Its precise physical region is not exposed by the verified deployment interface.
Original evidence media and larger objectsChatGPT Sites-managed private Cloudflare R2, bound as BUCKETOriginal images and object data stay with the main platform. Moving a webpage does not copy these files or make them public.
Sites management records and static releasesSeparate CERRA-owned Cloudflare D1Current database: cerra-sites-staging, region ENAM; read replication disabled. Ownership, membership, releases, token digests and audit are separate from main D1.
Managed container application statePer-site persistent Docker volume on the managed Linux hostThe SHA app uses SQLite in its volume, with site/account-aware records. Code rollback preserves that volume; it does not roll back user data.
Source revisions and provider/build stateSQLite registries and content-addressed files on the managed hostWorking source, build state and deployed releases are distinct. Host metadata and site volumes need coordinated backup and restore checks.
Capture backlog and other local servicesWorkstation SQLite spool; separate service-owned local storagePending camera observations remain local until acknowledged. The existing research service also owns private SQLite history; a cloud D1/R2 export does not include these stores.

Why take this route?

Managed ChatGPT Sites made the original product quick to build and publish, including server APIs and durable storage. The pressure now comes from CERRA’s growing mix of applications: frequent customer changes, persistent capture jobs, native dependencies and independent data lifecycles. The limitations below describe this deployment and workload fit, not every application built with ChatGPT.

What this makes possible

Smaller, independent releases

A customer dashboard can be built, checked and rolled back within its own site. The main platform changes when shared product contracts change, rather than every time a customer edits a page.

An operating model that fits the workload

Small presentation sites can stay static; approved Python services can use containers; future GPU or stronger isolation requirements can select a dedicated runtime. A VM offers broader operating-system control, but it is an optional runtime, not the definition of a site.

A stable interface for agents

Scoped APIs, source revisions, build status and audit give different agents a consistent way to work. The current SHA workflow detects conflicting edits and supports idempotent build requests instead of giving an agent the host’s shell or Docker socket.

Data and access with clear owners

A site has an owner, collaborators and an explicit audience. Separating high-volume capture records from shared identity data can support targeted retention, backup and scaling without forcing every module into the same release cycle.

A directory that grows with the applications

Stable links let owners demonstrate or distribute their work. A public site and marketplace listing are separate choices; private applications stay protected while the platform can promote approved public projects.

Boundaries and tradeoffs

The current shared application couples changes

Many original modules share one application build and D1/R2 lifecycle. A small module change requires application-level release checks, and a full migration must reconcile accounts, reviews, objects and external services together.

A request runtime is not a continuous capture host

The original Worker has bounded CPU and memory. Continuous camera acquisition, a durable upload queue and native Python inference already run elsewhere; GPU use depends on the configured host and model. Merely moving the frontend to another Worker would not move those processes.

More control brings operational work

CERRA now operates the gateway and container host, including images, patches, capacity, monitoring, backup and recovery. The current managed host and tunnel are availability dependencies; this adapter is not yet a high-availability compute fleet.

Containers and VMs have different boundaries

Containers share a host kernel; VMs can provide a separate guest kernel and wider configuration freedom. Either requires quotas, network policy and secrets isolation. The current provider accepts reviewed releases, not arbitrary images, shell commands or privileged customer workloads.

Code rollback is only one part of recovery

A release pointer can be reverted while database writes remain. Cross-store migration and schema changes need their own restore plan; a new hostname or a successful container start is not proof of data equivalence.

The Live Capture migration roadmap

This is the proposed next-stage plan, not a claim that Live Capture has moved. Keep the original path available while extracting one boundary at a time. Each step has an observable completion condition before the next ownership switch.

  1. FoundationImplemented

    Shared identity and an independent application path

    Use the existing Sites gateway, scoped credentials, separate releases and private container example as the starting point. SHA demonstrates the hosting path; it is not the Live Capture replacement.

    • Keep main CERRA as the account authority; distinguish console management from private viewing.
    • Preserve hostname routing, tenant checks and source/build audit. SHA text assistance is available; photo/video detection remains disabled.
  2. 01Planned

    Define the Live Capture module contract

    Document capture sources, ingest payloads, observation IDs, image hashes, review revisions, model versions, health signals and ownership. Separate collection, delivery, inference, storage and UI responsibilities.

    • Versioned ingest/read/review API; stable site and account IDs; local observation/receipt time versus cloud ingestion time; the camera clock is not verified.
    • Inventory all writers, local spools, cloud tables/objects and external services before migration.
  3. 02Planned

    Move the dashboard behind a scoped service adapter

    Build the Live Capture dashboard as its own site first. A server-side adapter can read the existing service with explicit authorization while the original store remains authoritative. Browser code receives neither the main database binding nor service secrets.

    • Compare existing and new dashboard results, image access, history and revoked-user behavior.
    • Keep the original entry available and link to the new module through the main marketplace.
  4. 03Planned

    Extract ingest, review and data storage

    Provision a dedicated module database and private object store after sizing. Cloudflare D1 plus R2 is one candidate; high-volume ingestion may require another database. Preserve IDs and attributed review history rather than rebuilding them from screenshots or aggregates.

    • Copy in bounded, resumable batches; verify schema, typed values, row counts, image hashes, references and review revisions.
    • Use a fenced capture or a validated change journal and replay process. D1 and R2 do not form one shared transaction; two ordinary exports are not automatically one consistent snapshot.
    • Produce a private, access-controlled backup and successfully restore it into isolated target storage before changing the authoritative writer. Verify the restored records, objects and permissions without activating live integrations.
    • A stopped collector does not prove all admitted cloud requests have finished. Require a verified drain, a storage write fence, or a consistent snapshot covering every writer.
    • Run shadow reads before switching the single authoritative writer. Avoid uncontrolled dual writes; replay failures idempotently.
  5. 04Planned

    Package collection and inference as managed jobs

    Keep collectors on the existing workstation initially. Then package supported acquisition/inference services for an appropriate Linux or GPU runtime. Extend the current reviewed-app provider with worker supervision and job contracts before onboarding continuous capture.

    • Preserve the durable spool, stable delivery IDs, original timestamps, bounded retries and explicit coverage gaps.
    • Plan historical import for long pauses: current delivery archives observations older than 23 hours locally, while ordinary ingest rejects observations older than one day. Those archives are not automatically replayed; never rewrite their times to bypass validation.
    • Verify cancellation, concurrency limits, restart recovery, model availability and advancing capture plus delivery health.
    • Use queues and scheduled workflows for bounded tasks; use supervised services for continuous capture. A request callback is not a permanent background process.
  6. 05Planned

    Cut over, observe and reuse the module pattern

    Switch a small, agreed scope first, monitor completeness and lag, and retain the old path for the defined recovery period. Reuse the same contracts for other dashboards and collection modules only after Live Capture meets its checks.

    • Acceptance covers ingestion lag, missing/duplicate observations, image integrity, review history, revoked access and recovery after restart.
    • Routing rollback and data rollback have separate procedures; replay any post-cutover writes before reverting storage authority.
    • Define backups, restore exercises, retention and capacity budgets. Broader VM access, per-customer runtime allocation and automatic domains remain later platform work.

Try it and read further

  1. Cerra Sites console

    Live console and marketplace. Sign in with a CERRA account; actions depend on your permissions.

  2. Public example site

    A small independently versioned static site.

  3. SHA container application

    Private application; CERRA identity and site authorization are required.

  4. Cloudflare Workers limits

    Request-runtime resource limits; relevant when separating web APIs from continuous processes.

  5. Workers for Platforms

    A possible future adapter for isolated customer Workers; not enabled in the current account.

  6. D1 database transactions

    Transactional batches within D1; these do not include R2 object operations.

  7. R2 consistency

    Object-operation guarantees to consider in cross-store migration and recovery.