Skip to main content

Web Playground

The Web Playground is a self-contained local environment that runs the online banking shell with mock data, so you can validate extensions without connecting to a live institution. You get three dedicated slots to mount and test your own widgets at runtime.

You can also load aspects through the Aspect Manager and exercise the theme branding to preview themes against the same shell.

Requirements: Docker Desktop and the playground image from the Candescent team.

home page with widget slots

Prerequisites

The steps below assume Docker Desktop is installed and running on your machine — it is mandatory for the Web Playground.

RequirementNotes
Docker Desktopdocs.docker.com/get-docker

Quick start

Follow these steps in order. The Web Playground docker-compose.yml is in playground/web directory within the cdx-extensibility-apps repository (no separate download).

  1. Clone and navigate — Clone the cdx-extensibility-apps repository, then open the playground/web directory. That folder contains the docker-compose.yml file for the Web Playground.

  2. Pull the image — You can run this from any directory. The image is hosted on the Candescent GitHub Packages registry; the first pull is larger and is then cached.

    Bash
    docker pull ghcr.io/candescent-dev/olb-playground:1.0.0
  3. Start the stack — Stay in the same directory as docker-compose.yml and run:

    Bash
    docker compose up
  4. Open the Playground — When the logs show [playground] Playground ready — open http://localhost:4200, open http://localhost:4200.

LabelDetails
Imageghcr.io/candescent-dev/olb-playground:1.0.0
Registrygithub.com/orgs/candescent-dev/packages/container/package/olb-playground

The image contains:

  • nginx serving the banking-platform shell and all internal widget MF remotes
  • Express mock BFF (internal, proxied through nginx — no extra port to manage)
  • Bundled offline images and mock banking data

Developing your widget

Serve your widget locally

From your cdx-extensibility-apps directory, serve the widget you are developing. For more information, see Widgets overview. Example sample widgets:

WidgetPort
agent-widgethttp://localhost:4101
qa-automation-widgethttp://localhost:4102
investmentportfolio-widgethttp://localhost:4302
Bash
nx serve agent-widget
# → http://localhost:4101

nx serve qa-automation-widget
# → http://localhost:4102

nx serve investmentportfolio-widget
# → http://localhost:4302

These commands use the Nx CLI. If nx is not installed globally, run npm install -g nx first.

Replacing a widget

On the home page (http://localhost:4200), you will see placeholder widget slots (Widget 01, Widget 02, Widget 03) with a + icon. Click + on a slot to open the Update widget modal.

Example — replacing Widget 01 with investmentportfolio-widget:

  1. Click + on Widget 01.
  2. Fill in the three fields using your widget’s module-federation.config.ts — for this example (investmentportfolio-widget), that file is samples/web/widgets/investmentportfolio-widget/module-federation.config.ts in cdx-extensibility-apps:
    • Urlhttp://localhost:4302
    • Widget nameinvestmentportfolio-widget
    • EntryInvestmentportfolioWidget
  3. Click Save.
  4. The page reloads — your widget appears in the Widget 01 slot.

Widget slot setup (screenshots)

  • Home page — empty slotsWidget 01, Widget 02, and Widget 03 show + placeholders where you attach a remote widget.

    Home page with widget slots

  • Update widget modal — Enter Url, Widget name, and Entry to match your module-federation.config.ts (remote URL, remote name, exposed module).

    Update widget modal

  • Slot after save — The page reloads and your widget renders in the chosen slot.

    Widget loaded in slot

Aspects

Aspects are JavaScript snippets executed by the shell at page load — for chatbots, analytics tags, or custom UI injections.

Aspect Manager

A Manage Aspects button appears on the home page (playground image only). Use it to open the Aspect Manager:

  • My Submissions — view, edit, or delete loaded aspects
  • New Submission — paste a name and JavaScript snippet, then Add & Reload

The chatbot-style flow shown below follows the reference implementation in samples/web/aspects/contextless_chat_bubble.js in the cdx-extensibility-apps repository. Copy the script into New Submission in the Aspect Manager, then Add & Reload to view newly added aspect.

Aspect Manager — add or manage aspects (example flow):

Aspect Manager — submissions

Aspect Manager — new submission

Chatbot UI injected by the sample aspect (bubble and panel). In the image below, it appears in the bottom-right corner.

Chatbot aspect on the home page

Theme Branding

The playground includes a runtime branding switcher with three pre-configured themes: Theme 1, Theme 2, and Theme 3. Click the palette icon in the top-right toolbar (next to Manage Aspects) to open the picker and choose one.

Select a theme and the page reloads with the new branding. A checkmark indicates the active theme. Switching only replaces the visual theme — widget replacements and aspect configurations are preserved.

Branding switcher (palette) in the toolbar:

Branding theme picker

Mock session data

In the Web Playground, window.dbk.sessionInfo() (from the browser console) returns mock session data your widget can use during development.

PropertyValue
userFullNameJohn Doe
diId00516
loginIdjohndoe

The greeting widget also calls /ui/v1/users, which returns firstName: 'John' and lastName: 'Doe'.

Port and widget reference

PortService
4200banking-platform — shell (open in browser)
3001Mock BFF — Express mock backend (proxied through 4200)
4201greeting-widgetcom.ncr.dbk.olb.widgets.greeting
4202messages-widgetcom.ncr.dbk.olb.widgets.message
4205purchase-rewards-widgetcom.ncr.dbk.olb.widgets.purchase-rewards
4209quick-actions-widgetcom.ncr.dbk.olb.widgets.quick-actions
4210billpay-widgetcom.ncr.dbk.olb.widgets.bill-pay
4216transfers-widgetcom.ncr.dbk.olb.widgets.transfers
4219widget-stackcom.ncr.dbk.olb.widgets.widget-stack
4220widget1com.ncr.dbk.olb.widgets.widget1
4223fdic-widgetcom.ncr.dbk.olb.widgets.fdic
4226my-accounts-widgetcom.ncr.dbk.olb.widgets.my-accounts
4101Your agent-widget (served from host)
4102Your qa-automation-widget (served from host)
4302Your investmentportfolio-widget (served from host)

widget2 and widget3 are also registered (same remote URL as widget1).

Troubleshooting

OLB loads but shows blank / no widgets

The container needs a few seconds to fully initialise. Wait for OLB Playground is running! in the logs, then refresh. Also check:

Bash
docker compose ps   # should be running

My widget doesn't appear after mounting

  • Confirm your widget is serving (check the terminal where you ran nx serve).
  • Confirm the name and entry fields match your module-federation.config.ts exactly.
  • Refresh http://localhost:4200 after clicking Submit.
  • Check the browser console for errors.

Restart:

Bash
docker compose down && docker compose up

Port already in use

Open Docker Desktop → check for other running containers using port 4200, or stop the conflicting process before starting the playground.