Operator runbook — Connections UX (Plan 128)¶
Plan 128 replaced the brief Plan 119 split-routing experiment with a
single connector entry-point: the inline vendor tile grid on
/connections. There is no longer a separate /connections/new /
/connections/new-legacy shell, and no connection_method_picker
tenant flag.
What ships¶
/connectionsrenders four sections of bigger vendor tiles (~200x140 desktop), grouped by category:- Cloud providers — Azure, AWS, Google Cloud
- Identity providers — Microsoft 365, Google Workspace (coming soon)
- Code platforms — GitHub
- LLM vendors — OpenAI, Anthropic, Databricks
- Each tile shows a monochrome vendor logo, name, one-line trust
posture summary, and small mini-badges for the methods available
from
MethodAvailability. - Clicking a tile opens that vendor's dialog as a modal. Multi-method dialogs (AWS, GCP, Azure, GitHub) render tabs above the form; single-method dialogs (M365, OpenAI, Anthropic, Databricks) skip the tab UI.
- Each (vendor × method) tab uses a 2-column layout: form fields on the left, step-by-step instructions on the right.
Disabled-tile semantics¶
Tiles render in three disabled states:
- Operator-disabled —
ProviderAvailability.available === false(the cp-api Container App is missing the OAuth client env vars). Tile renders at 60 % opacity, lock icon top-right, hover tooltip lists the missing env vars by name. - No active tenant — caller has no effective tenant (platform
admin not impersonating). Same visual treatment plus a tooltip
pointing at
/admin/tenants. - Coming soon — frontend-only marker (today: Google Workspace). Renders a “Coming soon” pill instead of the lock.
Removed surfaces¶
The following are gone after Plan 128 and should be pruned from any operator runbook screenshots:
/connections/new(Plan 119 picker shell)/connections/new-legacy(Plan 119 legacy fallback)- The "Add new connection" top-right button on
/connections tenants.settings.flags.connection_method_picker(writes via the admin flags UI are now rejected with a 422; pre-existing values in the JSONB block are harmlessly ignored by the reader)
Vendor logos¶
Logo assets live under
apps/frontend/components/connection-logos/. All eight current
vendors use the simpleicons.org CC0 SVGs, normalised to a 0 0 24 24
viewBox and fill="currentColor" so the tile theme switches with the
rest of the dashboard. The VendorLogo React component renders one
of the inlined paths per vendor key; unknown keys fall back to a
lucide Globe icon so the tile doesn't blow up if the vendor catalog
grows ahead of the component.
To add a new vendor logo:
- Drop the SVG file in
apps/frontend/components/connection-logos/with the source URL + license header. - Add a matching
LogoSpecentry to theLOGOSmap invendor-logo.tsx(the path data inlined, viewBox0 0 24 24,fill="currentColor"). - Add the new vendor key to the page tile list with a matching
VENDOR_SUMMARY+VENDOR_LABELentry onconnections/page.tsx.
Per-method instructions¶
Customer-facing walkthroughs live in
apps/frontend/components/connection-instructions/, one component per
(vendor × method) combo:
aws-assume-role.tsx— IAM role + trust policy walkthroughaws-eventbridge.tsx— CloudFormation snippet + bus ARN flowgcp-oauth-refresh.tsx— OAuth consent screen + scopesgcp-wif.tsx— gcloud setup commands (mirrorsdocs/customer/gcp-wif-onboarding.md)azure-oauth.tsx— corporate-domain caveat + admin consentazure-federated-identity.tsx— no customer-side setup; points at/admin/setupgithub-oauth.tsx— GitHub OAuth scopes + SSO notegithub-webhook.tsx— App install + webhook secret rotationm365-oauth.tsx— Microsoft Graph scopes + global-admin consent
When tweaking copy, edit the component directly — the docs page (in
docs/customer/) stays the source-of-truth for the runbook prose,
but the dialog component duplicates the gory snippets so a customer
mid-flow doesn't have to leave the dialog.