Create a SaaS product
Name the app, choose Blank or an exact published template version, and provision its isolated database trio.
Shown to your tenants.
Blank is available now. Template concepts stay disabled until an immutable published version verifies.
field_service_platform · no published version
groupware_platform · no published version
crm_sales_platform · no published version
ai_helpdesk_platform · no published version
franchise_command_center · no published version
online_training_platform · no published version
What gets created
Assigns SaaSAppId + SaasAppIdInt.
Core, logs, AI/vector shards.
Blank shell, or exact pinned template-version members.
App appears in your portfolio.
Creates a product in two supported modes: Blank, which is always available, or an exact published immutable template-pack version. Registration first issues both app identifiers and routing/storage records; workers then create the core, logging, and AI databases, stamp identity, create the tenant root and bridges, activate the app, and build the starting shell.
Either way, what gets created is real infrastructure: its own three databases (day-to-day data, a tamper-proof activity log, and an AI memory), storage allocations, and a runtime — shared with no other product.
Behind this page/apps/new · CanCreateSaaS
Retrieve
Load pooled headroom plus template-pack versions that are actually installable: Status=Published, ArtifactSchemaVersion=2, valid manifest and member-set fingerprints, verified member payloads, and at least one Page member. Catalog-only packs render disabled. Blank is always enabled.
Save
Register the control-plane app first so SaaSAppId, SaasAppIdInt, domain, route, allocation and usage-meter IDs exist before workers start. Provision physical databases, stamp SaasAppIdentityMap, create a separate tenant AppAccountId and owner UserId, create log/AI bridges, then activate. For Blank, create the shell and empty Home page. For Template, install the exact TemplatePackVersionId—never “latest.”
Success
- Control-plane and tenant IDs are never conflated.
- App stays
Provisioninguntil database identity, tenant root, security role, and bridges verify. - Custom domain can remain
Pendingafter the app becomesActive. - BuilderOnly apps do not require a container.
CLI handoff
Implement this scaffold from the structured contract, then remove hard-coded preview rows. The source of truth is CLI Handoff and admin-cli-manifest.json.
Server-inject identity and scope values; never trust browser-supplied account, app, tenant, user, entitlement, price, or permission identifiers. Preserve the loading, empty, forbidden, failed, retrying, and completed states shown by the preview.