Groundfloor Docs

Shell Integration

Build and run shell_federated apps on Groundfloor with Keycloak auth and Control Plane APIs.

Audience: Shell host team and federated remote app developers
Last updated: 2026-05-29 · Phase 3 (complete)

These guides explain how to build and run shell_federated apps on Groundfloor: bootstrap the Shell host, authenticate with Keycloak, and call Control Plane pillar APIs (vault, files, secrets, LLM, and more).


Architecture (one page)

Account (billing org)
  └── Workspace (UUID — your tenant boundary)
        └── App (slug, manifest, releases)
              └── Federated remote (remoteEntry.js in object store)
LayerOwnerApp developer calls it?
Shell host (Next.js + Module Federation)Shell repoLoads bootstrap + remote
App manifest + publish metadataControl Plane PostgresVia public bootstrap API
Built UI (remoteEntry.js)Object store (S3/MinIO)Browser loads manifest.remoteUrl
Customer data (collections, queries)DataplaneNo — use Control Plane /vault proxy
Secrets, files, LLM keysControl Plane + Infisical / LiteLLMYes — workspace-scoped APIs

Rule: Federated apps call Control Plane at /v1/workspaces/{workspace_id}/…. Do not call Dataplane directly from the browser.


Reading order

New here? Start with 01-getting-started.md.

#DocumentWhoPurpose
01Getting startedBothEnd-to-end tutorial: register → build → publish → load
02Shell bootstrap (quick reference)Shell hostEnv vars, bootstrap URL, MF wiring
Shell bootstrap (full guide)Shell hostComplete integration reference
03Authentication (Keycloak)BothPlatform JWT, permissions, wiring in Shell/remote
08Shell auth modesShell hostEnd-user sign-in: none / groundfloor / external discovery + wiring
13Workspace site auth (agent prompt)Shell teamCopy-paste Cursor task for workspace OIDC + D-045 tokens
14Groundfloor E2E — CP sideShell + opsPrerequisites, curl test plan, troubleshooting
04Data VaultAppCollections, query, CRUD via Control Plane
05FilesAppPresigned upload/download lifecycle
06SecretsApp / backendList, reveal, upsert workspace secrets
07LLM GatewayAppVirtual keys, LiteLLM, model catalog
09Manifest and routesBothManifest contract, slug vs appId, publish
10API reference indexBothOpenAPI, tags, @groundfloor/api-client
11Local dev recipesBothCopy-paste curl and fetch examples
12TroubleshootingBothCommon errors and fixes
Shell agent promptShell teamCopy-paste task for Cursor agent in groundfloor-v2.5

Machine-readable API contract

ResourceLocation
OpenAPI (running server){CONTROLPLANE_URL}/docs
OpenAPI JSON (committed)apps/customer/openapi.json (regenerate: uv run python scripts/sync_openapi.py)
TypeScript client@groundfloor/api-client (orval + TanStack Query hooks)

See 10-api-reference.md for codegen workflow.


Identity provider

Control Plane and the Customer Portal use Keycloak (IDP_PROVIDER=keycloak). Clerk is legacy only.

Shell and federated remotes should obtain a platform Keycloak access token and send Authorization: Bearer {token} on authenticated Control Plane calls. See 03-authentication.md.


Syncing docs to the Shell repo

From the Control Plane repo root:

./scripts/sync_shell_federated_docs.sh

Set SHELL_REPO to override the default (../groundfloor-v2.5). The script copies this folder plus the full bootstrap guide into the Shell monorepo (and starter-kit bundle when that directory exists).

Shell agent kickoff

Open groundfloor-v2.5 in Cursor and paste:

Implement the Control Plane federated app integration task in docs/controlplane/SHELL_AGENT_PROMPT.md (Phase A through D). Read the linked controlplane docs first. My workspace UUID is {WORKSPACE_ID} and my app slug is {APP_SLUG}. Control Plane is at http://localhost:8088. Do not remove legacy BaaS/COI paths; gate them when CP env is set.

Replace {WORKSPACE_ID} and {APP_SLUG} with your values.


Support references

TopicControl Plane location
Phase 1 federated plandocs/plans/federated-shell-apps-phase1.md
Manifest validationapp/domain/entities/shell_manifest.py
Bootstrap routesapp/api/routers/app_shell.py
Portal bootstrap UIapps/customer/src/components/apps/shell-bootstrap-card.tsx
Phase 2 deps (MinIO, Infisical, LiteLLM)Phase 2 deps runbook

On this page