System Overview
The Refer-a-Friend Candescent implementation is a React CDX Widget deployed into the Candescent OLB via Module Federation. It replaces the Q2 Tecton server-side Python extension and all Q2 SDK dependencies with the Candescent CDX Widget SDK and Candescent DevEx REST APIs.High-Level Architecture

Component Architecture
End-to-End Member Flow
Q2 to Candescent Migration Map
This table maps every major Q2 SDK construct to its Candescent equivalent.Framework Layer
| Q2 (Tecton) | Candescent (CDX Widget) | Notes |
|---|---|---|
Q2TectonServerRequestHandler | PlatformSDK.getInstance() | Entry point for all SDK functionality |
| Python Tornado async handler | React functional component | Widget is a pure client-side SPA |
| Jinja2 HTML templates | React JSX + MUI components | Component-based rendering |
self.get_tecton_form() | React component return | No server-side rendering |
self.get_template() | React JSX component | Template → Component |
self.router dict | React Router / conditional renders | Route-based navigation |
self.form_fields | useState / form event handlers | Client-side state management |
self.session_cache | useState / useRef | React component state |
self.logger | console / logging service | Browser-based logging |
Authentication & User Context
| Q2 SDK | Candescent Equivalent | API / Hook |
|---|---|---|
self.context.online_user | useUserContext() | CDX SDK hook |
online_user.user_id | context.userId | From useUserContext() |
online_user.customer_id | context.customerId | From useUserContext() |
online_user.ssn | GET /ux-users/v1/customers/{id} | DevEx REST |
UserLogon.get(user_id) | context.loginName | From useUserContext() |
Account & Transaction Data
| Q2 SDK | Candescent Equivalent | Endpoint |
|---|---|---|
self.context.account_list | getHttpClient().get('/db-accounts/v1/accounts') | DevEx |
GetUserAccountList | GET /db-accounts/v1/accounts?userId={id} | DevEx |
HostAccount.get(id) | GET /db-accounts/v1/accounts/{hostAccountId} | DevEx |
GetAccountHistoryById | GET /banking-activity/v2/account-history/{hostAccountId} | DevEx |
GeneratedTransactions | Internal RAF DB query | Own backend |
Fund Transfers
| Q2 SDK | Candescent Equivalent | Endpoint |
|---|---|---|
FundsTransferFromUnassociatedAccountByUiWithPandIandAdditionalData | POST /db-transfers/v1/transfers | DevEx |
Customer Data
| Q2 SDK | Candescent Equivalent | Endpoint |
|---|---|---|
User.get(user_id) | GET /ux-users/v1/customers/{id} | DevEx |
User.get_many(user_ids) | Multiple GET /ux-users/v1/customers/{id} | DevEx |
Configuration
| Q2 (WedgeAddress) | Candescent Equivalent |
|---|---|
WedgeAddress.get("InviteFriend") | FI App Configuration JSON |
self.wedge_address_configs["KEY"] | config["KEY"] from loaded JSON |
WEDGE_ADDRESS_CONFIGS defaults dict | Default config in widget source |
Data Flow: Reward Payout
Deployment Model
The RAF CDX Widget is deployed as a Module Federation remote into the Candescent OLB host. Key build constraints:- React pinned to
18.2.0(matches OLB host) - MUI pinned to
7.3.4 - Axios pinned to
1.14.0 - SDK:
@cdx-extensions/di-sdk@1.1.2,@cdx-extensions/di-sdk-web@2.1.2
