Skip to content

SPA Config

The SPA Config page is where you tune the sportsbook's behaviour and look on your site, per brand — without rebuilding the front-end. Change a URL, flip a feature on, restyle the buttons in your brand colours, and players see it on their next page load.

You'll spend time here when:

  • Setting up the initial configuration after integration
  • Trying out a new visual theme or testing a feature flag
  • Updating the URLs that point at the back-end services your SPA talks to (rare, usually during environment moves)

Preview before you assign

SPA Config changes apply immediately on the next page load. For anything substantial — a new theme, a feature-flag flip, a Pages restructure — use Preview to verify before clicking Assign.


The configuration list

The main view lists every saved configuration, grouped by brand.

SPA Config list view

Each brand is a collapsible group. Inside the group:

  • Id — the unique identifier of a saved configuration. Click the ID to open and edit it.
  • Created At — when the configuration was saved.
  • Assigned — a green ✓ marks the version currently live. Every other row shows ✗.
  • Assign — promote a different configuration to live (a dialog confirms before applying).
  • Create config — at the right of the group header, starts a brand-new configuration.

How to switch the live configuration

  1. Expand your brand's group.
  2. Find the configuration version you want to go live.
  3. Click Assign on its row.
  4. Confirm in the dialog.

It's live immediately

The change takes effect on the next page load for new visitors. Players already inside the SPA may need to reload to see the change. Only one configuration can be assigned at any time.

How to roll back

There's no separate "rollback" button — to roll back, just Assign the previous configuration. Saved configurations are versioned, so older ones remain available indefinitely until you delete them. (Cleaning up very old versions is a manual operation; if you accumulate many unused versions, ask your integration manager.)


Creating or editing a configuration

Click + Create config for a new one, or click an existing config's ID to open its editor. All sections are on one page — scroll to find them.

SPA Config editor

The editor groups settings into a handful of areas, each with its own collapsible section. You don't have to fill in every field — sensible defaults are preserved from the configuration you opened.

Application settings

Two basic settings at the top of the form:

  • Root element — the id attribute of the HTML container where the SPA mounts into your page (e.g. betting__container). Set once during integration and rarely changed.
  • GTM ID — your Google Tag Manager container ID for analytics. Optional.

Betting URLs

The addresses of the back-end services the SPA talks to:

  • Gql url — GraphQL endpoint for sport events, markets, odds, and bets
  • Widgets static url — where the SPA loads its widget bundle from
  • Scoreboard GraphQL url — endpoint for live scores and stats

DATA.BET manages these for you

These point at DATA.BET-hosted services. We set them up and keep them current — you normally don't need to touch this section. If anything changes (an environment move, a new endpoint), your integration manager will tell you. Pasting wrong URLs here breaks the SPA, so leave them alone unless explicitly asked.

Feature flags

Toggles for SPA behaviours you might want to test or roll out gradually:

Flag What it does
Memory Router Navigation happens in-memory — the URL in the browser bar doesn't change as players move between pages. Useful when the SPA is embedded inside another page that owns the URL
Skip MaxBet autocorrection Affects what happens when a player enters a stake larger than the per-bet maximum. Off (default): the SPA silently lowers the stake to the max. On: the stake is left as-typed and the bet is rejected by the betting service with an error. Off is the kinder UX; on is useful when you want players to see explicit max-bet feedback
Use expandable tabs Market groups render as expandable accordion sections instead of fixed tabs
Hide predictions tab The Predictions tab in the SPA navigation is hidden

Default settings

The initial preferences a brand-new player sees, before they customise anything themselves:

  • Event StatusLive or Prematch (which tab opens first)
  • Sport TypeSports or Esports
  • Odd FormatDecimal, Fractional, or American
  • Odd Accept Strategy — what to do when odds shift between the player picking and confirming a bet:
    • Accept All — silently accept any odds change. Highest conversion, highest operator risk if odds dropped against you between selection and submission
    • Accept Higher — accept only when odds went up in the player's favour. The conventional default in most jurisdictions; a good starting point
    • Accept Ask — prompt the player to confirm before placing. Safest for the player; lowest conversion

Players can override these

These are just the defaults. Players can change them on the site, and their choices stick to their account.

Layout breakpoints

The screen widths (in pixels) at which the SPA switches between layouts. Each field is the minimum width at which that layout applies — so a value of 1040 for Tablet means "tablet layout kicks in at 1040 px and above" (until the desktop breakpoint takes over). Mobile defaults to 0 because the mobile layout applies from 0 upward.

If you don't have a strong reason to change these, the defaults are fine.

Pages

The Pages section is the routing map of the SPA — which URLs exist, what layout each page uses, and which widgets are placed where. Each tab on this row is one page.

SPA Config pages section

At the top of this section:

  • Add Page — add a new page to the routing map (dropdown of available page templates)
  • Copy / Paste — copy the entire Pages set from another configuration and paste it here (useful when migrating settings between configs)

Each page's tab can be expanded with the > arrow. Inside you'll see the page's route name (e.g. Root, Match, Sport) and its layout grid + widget placement, edited as JSON.

The Remove button next to optional pages deletes that page from the configuration. Four pages — Root, Match, Sport, and Tournament — are the always-present core; the UI doesn't expose a Remove control next to them and they can't be deleted.

Don't be intimidated by the JSON

Page contents are stored as JSON, but you almost never need to write it from scratch. Most operators copy an existing page and tweak. If you need a brand-new page (one not in any existing config), ask your integration manager — they'll provide the JSON template and the list of available widgets.

Override Theme

The Override Theme section is where you make the SPA match your brand's colours, fonts, and corner styles — without touching the front-end build. There are two ways to edit it, switchable via the Builder / JSON toggle at the top right of the section:

  • Builder (default) — visual editor with colour swatches, text fields per token, and a per-token clear button. Recommended for day-to-day work.
  • JSON — raw JSON view if you'd rather paste a complete theme object (e.g. a brand kit you've assembled offline).

The Reset all button next to the toggle reverts unsaved theme changes back to the values stored on the config you opened.

Builder

SPA Config theme builder

Builder mode groups the theme into four collapsible sections:

Section Tokens
Font Font Sans (the font-family string, e.g. Roboto, sans-serif) and Base Font Size (e.g. 16px)
Palette The full set of brand colours — see the palette table below
Radius Six corner-radius tokens (Rounded 2 / 4 / 6 / 8 / 12 / 24) for buttons, cards, inputs
Offset Offset Top — pixel offset to leave room for a fixed header on the surrounding page

Each token row is:

  • The token name
  • A colour swatch (clickable — opens the colour picker)
  • A text input — you can paste a hex string (#00ebaa) directly
  • A small × button — clears the override and falls back to the theme default

Tokens marked Not set in the text input mean "no override; uses the theme default."

Palette tokens

Each token in the Palette section, in the order it appears:

Token What it controls
Primary 1 The main background of the SPA
Primary 2 The contrast against the primary background (text, dividers)
Secondary 1 / 2 / 3 Card and panel backgrounds, from darkest to lightest
Accent 1 The main action colour — buttons, links, "place bet" CTAs
Accent 2 / 3 Secondary accents — used for alerts and highlights
Sport Icons Tint applied to sport icons (leave Not set to use Accent 1)
Text Button Text colour rendered on top of Accent 1 buttons
Text Primary Default text colour
Text Secondary Muted text — labels, subtitles
Text Odd Text colour inside odds buttons (leave Not set to use Text Primary)
Notification Blocked Disabled/blocked state colour
Notification Error Error toasts/banners
Notification Info Informational toasts/banners
Notification Success Success confirmations
Notification Warning Warning toasts/banners
Betslip CTA Btn Bg Background for the betslip's primary CTA button (override only; leave Not set to use Accent 1)
Betslip CTA Btn Text Text on the betslip's primary CTA button (override only; leave Not set to use Text Button)

JSON

Switching to JSON shows the same data as a JSON object. Useful if you want to paste a full theme exported from elsewhere or diff against another configuration.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
  "font": {
    "fontSans": "Roboto, sans-serif",
    "baseFontSize": "16px"
  },
  "palette": {
    "colorsPrimary1": "#ffffff",
    "colorsPrimary2": "#000000",
    "colorsSecondary1": "#111111",
    "colorsSecondary2": "#212121",
    "colorsSecondary3": "#797979",
    "colorsAccent1": "#00ebaa",
    "colorsAccent2": "#f6262e",
    "colorsAccent3": "#fff500",
    "textButton": "#000000",
    "textPrimary": "#ffffff",
    "textSecondary": "#bcbcbc",
    "notificationBlocked": "#797979",
    "notificationError": "#f6262e",
    "notificationInfo": "#0852FF",
    "notificationSuccess": "#00EB81",
    "notificationWarning": "#fff500"
  },
  "radius": {
    "rounded2": "2px",
    "rounded4": "4px",
    "rounded6": "6px",
    "rounded8": "8px",
    "rounded12": "12px",
    "rounded24": "24px"
  },
  "offsetTop": 0
}

Always Preview before Save

Builder mode prevents most input errors (the colour picker only emits valid hex), but JSON mode doesn't — Invalid JSON or non-hex values are flagged when you Save. Either way, click Preview before Save to confirm the result on a real page.


Previewing and saving

At the bottom right of the editor you have two buttons:

  • Preview — opens a live preview of the SPA using your unsaved changes layered on top of the data the currently-assigned config sees. Great for checking layout and colours before committing. Preview runs against the same back-ends as your real SPA, so be mindful when previewing during peak hours
  • Save — saves the configuration as a new version in the list. Does not activate it — return to the list and click Assign to make it live

Saving never overwrites

Saving always creates a new version. You can experiment freely without breaking the version that's live.

Rolling out a change end-to-end

  1. Open SPA Config in the left navigation.
  2. Expand your brand's group.
  3. Click + Create config for a new version (or click an existing ID to open and tweak a copy).
  4. Make your changes in the editor sections.
  5. Click Preview to verify it looks right.
  6. Click Save to create a new configuration version.
  7. Back on the list, find the new version (it sits at the top) and click Assign.
  8. Confirm the dialog. The new configuration is live on your site.
  9. If something looks wrong, return to the list and Assign the previous version — that's your rollback.