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
Provider model
Every provider follows the same connector spine:- Service class — validates keys, lists agents, places calls, and runs chat where the vendor supports it.
- Backend wiring — routes, dispatch, webhook handling, hosted tools, branding, and messaging orchestration.
- Database migration — provider type constraints and persistence fields accept the new key.
- Frontend page set — picker card, provider dashboard, add/edit connection pages, conversations pages, and switcher navigation.
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 inui_preferences.starred_providers.
Key files:
frontend/src/lib/providerPreference.tsbackend/connections/api.pybackend/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.pyfrontend/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.pyfrontend/src/app/bland/*frontend/public/bland-logo.svgbackend/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.pybackend/messaging/orchestrator.pyfrontend/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.pybackend/tests/test_anyreach_messaging_service.pyfrontend/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_idand returns to?choose=platforms.
frontend/src/app/page.tsxfrontend/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
- Vapi: Use this Vapi link. Sign up through this link. Vapi.ai
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
- Calls by provider
- Messaging by provider
- Function catalog grouping
- Calls daily classification
- Trigger success/failure/billing breakdown
- Messaging received/sent charts
backend/admin_portal/api.pyfrontend/src/app/admin/components/ScaffoldSections.tsxfrontend/src/app/admin/hooks/useAdminStore.tsfrontend/src/app/admin/lib/types.tsbackend/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.pyfrontend/src/lib/apiAuth.tsbackend/app.pyfrontend/src/lib/ghlSSO.ts
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
- Watch
/api/auth/health/sso-guardbefore enabling enforcement. - Rotate any provider key that was ever pasted into chat or a non-secret channel.
- Re-test Bland and Grok outbound calling with real provider keys where the vendor API requires live-account confirmation.
- Keep the Mission Control provider catalog in sync whenever a ninth provider is added.
- Keep public docs split cleanly: deep setup guides for providers with full walkthroughs, plus a platform roster page for all provider tiles.

