Customer app

AIRCITE app shell

The customer-facing product entry point for onboarding, live engine status, and launch readiness. Tenant-specific command-center data is now bounded by an auth and product-membership gate before customer workspaces can open.

Live command center

Engine status, launch readiness, and tenant boundaries, directly inside the app entry

The first customer app screen renders public sanitized engine aggregates, live-readiness blockers, and the protected tenant-summary contract side by side. Tenant names, domains, payloads, PHI, and secret values remain outside this route.

LIVE

Engine status

Sanitized aggregate status from the growth engine. No tenant names, domains, PHI, payloads, or secret values are returned to this surface.

Active tenantsConfigured and enabled in the engine
...
Engine runsLast 7 days
...
SEO pagesGenerated page records
...
GEO observationsLast 7 days
...
Social eventsLast 7 days
...
Audit leadsAIRCITE audit queue
...
Latest runWaiting for engine data
Pending
Evidence boundaryNo runs yet
No PHI
LIVE

Launch readiness

Sanitized customer-live checklist from /api/health. This panel shows what is ready and what is still blocked without returning secret values, tenant records, domains from private data, or PHI.

Customer-live gateAll launch checks must be ready before customer-use sign-off
Blocked
Health response/api/health runtime contract
...
Evidence boundaryNo PHI and no secret values returned
Pending
Production domainNeeds app.aircite.ai/aircite.ai production alias proof before customer-live sign-off.
Blocked
Environment configRequired public and server env keys are present. Secret values are never returned.
Ready
Tenant accessNeeds Supabase public anon config plus tenant-gate runtime proof with a browser session.
Blocked
Analytics loopNeeds live PostHog pageview capture after config/deploy.
Blocked
Checkout pricesNeeds Stripe secret and price IDs for: No missing items reported.
Blocked
TENANT

Tenant command summary

Protected tenant-scoped command-center data from /api/aircite/tenant-summary. Counts render only after Supabase Auth and AIRCITE product membership pass.

Access stateWaiting for protected summary response
Checking
Browser sessionStored Supabase bearer token sent only to the AIRCITE tenant summary API
Missing
HTTP statusGate response from tenant summary API
...
Evidence boundaryNo tenant names, domains, raw payloads, PHI, or secret values
Pending
Tenant configsAuthorized tenant scope only
-
Engine runsLast 7 days
-
SEO pagesTenant-owned generated page records
-
Attribution recordsTenant-owned attribution rollups
-
GATE

Tenant workspace gate

AIRCITE now has a server-side access gate that verifies Supabase Auth and checks shared platform product grants before any tenant workspace can open.

Customer dataRequires session plus AIRCITE product membership
Protected
Gate endpoint/api/aircite/tenant-gate returns sanitized status only
View
Launch evidenceStill needs domain/env/checkout proof before customer-live sign-off
Pending
App surface

What is live in this shell

This route separates the real product entry point from the marketing homepage while keeping every unfinished launch gate explicit.

INT

Onboarding intake

Collects business, domain, plan, channels, and growth goals into the Supabase onboarding queue without PHI or secret values.

LIVE

Command-center status

Reads sanitized aggregate counts from the growth engine: active tenants, runs, SEO pages, GEO observations, social events, and audit leads.

GATE

Tenant access gate

Enforces Supabase Auth plus AIRCITE product membership before any tenant-specific workspace can open. The gate returns booleans only, not tenant records.

Launch path

Customer-use readiness

1

Request onboarding

Create the review item that prepares a tenant for provisioning.

2

Sign in

Create a Supabase Auth browser session that can be sent to protected AIRCITE APIs.

3

Pass tenant gate

Authenticated customer workspace access requires a Supabase session and an AIRCITE product grant.

4

Confirm commerce readiness

Checkout remains unavailable unless Stripe price IDs and a valid secret are configured.