> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sympana.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sympana Connector Build Report — July 2026

> Reference report for the eight-platform provider expansion, picker rebuild, docs updates, Mission Control alignment, and SSO guard.

# Sympana Connector Build Report — July 2026

A reference handoff for the provider expansion, picker rebuild, documentation pass, Mission Control alignment, and SSO guard.

## At a glance

| Area               | Status       | Notes                                                                                                                         |
| ------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| Platform roster    | Live in app  | Retell, Vapi, AnyReach, Smallest.ai, SigmaMind, ElevenLabs, Grok, and Bland are represented in the provider console.          |
| Provider expansion | Shipped      | Grok was added as the seventh provider and Bland as the eighth provider. Bland also has messaging via pathway chat.           |
| Picker rebuild     | Shipped      | Search clear button, centered leftover rows, normal single-result sizing, favorites, and universal back-to-picker navigation. |
| Docs pass          | Updated      | Public docs now show branded signup links and a full eight-platform setup roster.                                             |
| Mission Control    | Updated      | Admin analytics now uses a canonical eight-provider catalog so zero-traffic platforms still appear instead of disappearing.   |
| Security           | Monitor mode | SSO guard is deployed in monitor mode. Flip enforcement only after telemetry is clean.                                        |

## Provider model

Every provider follows the same connector spine:

1. **Service class** — validates keys, lists agents, places calls, and runs chat where the vendor supports it.
2. **Backend wiring** — routes, dispatch, webhook handling, hosted tools, branding, and messaging orchestration.
3. **Database migration** — provider type constraints and persistence fields accept the new key.
4. **Frontend page set** — picker card, provider dashboard, add/edit connection pages, conversations pages, and switcher navigation.

The shared rule is that API-key validation must hit a vendor endpoint that is confirmed to exist. Grok uses the xAI models endpoint for auth validation. Bland uses Bland's account endpoint and handles Bland's raw authorization-header format.

## Platform deliverables

### 1. Starred provider favorites

Users can star multiple providers and the provider switcher only shows the starred set plus the current page. The minimum-one rule prevents the switcher from becoming empty, and preferences persist locally plus server-side in `ui_preferences.starred_providers`.

Key files:

* `frontend/src/lib/providerPreference.ts`
* `backend/connections/api.py`
* `backend/migrations/071_ui_preferences_starred.sql`

### 2. Grok (xAI)

Grok was added as a voice provider with key validation, provider routing, and a full frontend page set. Public xAI surfaces are used where confirmed; any final outbound path that needs a real key is left explicit rather than guessed.

Key files:

* `backend/voice_providers/grok/service.py`
* `frontend/src/app/grok/*`
* `backend/migrations/072_allow_grok_provider_type.sql`

### 3. Bland AI voice

Bland was added as a voice provider with API-key validation, pathways, phone numbers, outbound call wiring, inbound routing hooks, and an official logo treatment.

Key files:

* `backend/voice_providers/bland/service.py`
* `frontend/src/app/bland/*`
* `frontend/public/bland-logo.svg`
* `backend/migrations/073_allow_bland_provider_type.sql`

### 4. Bland AI messaging

Bland pathway chat is wired into the messaging orchestrator with chat creation, message turns, session persistence, stale-session retry, and frontend messaging pages.

Key files:

* `backend/voice_providers/bland/service.py`
* `backend/messaging/orchestrator.py`
* `frontend/src/app/bland/add-messaging/*`
* `frontend/src/app/bland/edit-messaging/*`
* `frontend/src/app/bland/conversations/*`

### 5. AnyReach messaging and picker coverage

AnyReach appears as a first-class voice and messaging provider in the console and build output, including add-messaging, edit-messaging, and conversations routes.

Key files:

* `backend/voice_providers/anyreach/service.py`
* `backend/tests/test_anyreach_messaging_service.py`
* `frontend/src/app/anyreach/add-messaging/*`
* `frontend/src/app/anyreach/edit-messaging/*`
* `frontend/src/app/anyreach/conversations/*`

## Picker and navigation polish

The provider picker now has:

* centered two-card leftover rows when the platform count is uneven;
* normal-width single search results;
* a clear search button;
* starred provider favorites;
* a persistent back button on provider pages that preserves `sub_account_id` and returns to `?choose=platforms`.

Main files:

* `frontend/src/app/page.tsx`
* `frontend/src/components/ProviderPageShell.tsx`
* provider page folders under `frontend/src/app/*`

## Signup-link behavior

Public docs and API-key surfaces use visible branded link labels for provider signup flows:

* Retell: Use this Retell link. Sign up through this link. [RetellAI.com](https://dashboard.retellai.com/?ref=EmanuelTemplates)
* Vapi: Use this Vapi link. Sign up through this link. [Vapi.ai](https://vapi.ai/?aff=Emanuel)

The rendered pages show the clean branded labels instead of exposing query parameters in the main text.

## Mission Control alignment

The admin console uses a canonical provider catalog so the analytics pages represent the full provider set even when a provider has zero traffic in the selected window.

Canonical providers:

* Retell AI
* Vapi
* AnyReach
* Smallest.ai
* SigmaMind
* ElevenLabs
* Grok (xAI)
* Bland AI

Updated Mission Control surfaces:

* Calls by provider
* Messaging by provider
* Function catalog grouping
* Calls daily classification
* Trigger success/failure/billing breakdown
* Messaging received/sent charts

Main files:

* `backend/admin_portal/api.py`
* `frontend/src/app/admin/components/ScaffoldSections.tsx`
* `frontend/src/app/admin/hooks/useAdminStore.ts`
* `frontend/src/app/admin/lib/types.ts`
* `backend/tests/test_mission_trigger_denials.py`

## SSO guard

The client-facing provider and connection APIs now have an SSO access guard in monitor mode. It validates the signed GoHighLevel SSO payload, compares the token location to the requested location, logs verdicts, and can be switched to enforcement after telemetry proves real traffic is clean.

Main files:

* `backend/auth/sso_guard.py`
* `frontend/src/lib/apiAuth.ts`
* `backend/app.py`
* `frontend/src/lib/ghlSSO.ts`

Open decision: flip `SSO_GUARD_ENFORCE=true` only after monitor telemetry shows legitimate iframe traffic is sending valid tokens with no location mismatches.

## Current verification gates

The latest local verification covered:

* Backend syntax compile for `backend/admin_portal/api.py`.
* Targeted Mission Control tests: `backend/tests/test_mission_trigger_denials.py`.
* Frontend typecheck: `npm exec tsc -- --noEmit`.
* Frontend production build: `npm run build`.

## Operator follow-up checklist

1. Watch `/api/auth/health/sso-guard` before enabling enforcement.
2. Rotate any provider key that was ever pasted into chat or a non-secret channel.
3. Re-test Bland and Grok outbound calling with real provider keys where the vendor API requires live-account confirmation.
4. Keep the Mission Control provider catalog in sync whenever a ninth provider is added.
5. Keep public docs split cleanly: deep setup guides for providers with full walkthroughs, plus a platform roster page for all provider tiles.
