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

# Branding

> The branding document: portal name, style, colours, logos, e-mail sender name and speech term boosting.

## Branding configuration

Generates the document imported by **Portal customisation → Branding → Import configuration**.

Output a single JSON object. Every field is optional: whatever you omit keeps its current value in the portal. Nothing is written to the database on import — the operator reviews the result in the form and presses **Save**.

## Document

```json theme={null}
{
  "kind": "branding",
  "version": 1,

  "portal_name": "Northgate Nursing Simulation",
  "business_description": "Clinical simulation training for undergraduate nursing students.",

  "style": "minimal",
  "report_template": "modern",

  "colors": {
    "primary": "212 84% 38%",
    "primary_opposite": "0 0% 100%",
    "secondary": "18 92% 60%",
    "background": "210 33% 98%",
    "font_black": "0 0% 17%",
    "font_grey": "0 0% 48%"
  },

  "logo_url": "https://cdn.example.org/northgate/logo.svg",
  "icon_url": "https://cdn.example.org/northgate/icon.png",
  "logo_external_url": "https://northgate.example.org",

  "email_sender_name": "Northgate Simulation",
  "show_demo_data": false,

  "speech_term_boosting": [
    "auscultation",
    "tachycardia",
    "Northgate Nursing",
    "myocardial infarction"
  ]
}
```

`kind` is optional, but when present it must be `"branding"`: a document declaring another kind is refused, so a coaching document pasted into the branding tab fails loudly instead of half-applying. Without `kind` the import still runs, with a warning that the type could not be verified.

## Fields

| Field                  | Type                                       | Notes                                                                                                                                      |
| ---------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `portal_name`          | string                                     | Shown as the portal's name; used in page titles and e-mail.                                                                                |
| `business_description` | string                                     | Internal description of the organisation. Not shown to learners or candidates.                                                             |
| `style`                | `"bold"` \| `"minimal"`                    | Rejected if any other value. See below.                                                                                                    |
| `report_template`      | `"classic"` \| `"modern"` \| `"one_pager"` | Default layout of exported interview reports. Rejected if any other value; omitted keeps the current choice (`modern` when none was made). |
| `spatius_enabled`      | boolean                                    | Offers the experimental 3D avatar template type in the admin. Off by default; leave it out unless asked.                                   |
| `colors.*`             | string                                     | HSL channels without the `hsl()` wrapper — see below.                                                                                      |
| `logo_url`             | url                                        | The regular logo, for light backgrounds. Must already be hosted: the importer does not upload files.                                       |
| `icon_url`             | url                                        | Favicon / app icon.                                                                                                                        |
| `logo_external_url`    | url                                        | Where the logo links to on the home page. Omit to keep the logo linking to the portal.                                                     |
| `email_sender_name`    | string                                     | From-name on automated e-mail.                                                                                                             |
| `show_demo_data`       | boolean                                    | Demo data in the admin. Normally `false` for a real portal.                                                                                |
| `speech_term_boosting` | string\[]                                  | Terms the speech-to-text engine should favour. See below.                                                                                  |

### style

* **bold** — serif display headings, large type, gradient accents, dark position posters.
* **minimal** — headings drop to the body font at reduced sizes, gradients collapse to flat colour, white cards instead of dark posters.

This is a single switch across the whole portal; there is no per-page override. A portal with its own [theme CSS](/cookbooks/portal-customisation/portal-pages#theme-css) usually wants `minimal`, so the theme is not fighting the gradients.

### Colour format

Colours are space-separated HSL channels, not hex and not `hsl(...)`:

```text theme={null}
"212 84% 38%"        correct
"#1565c0"            WRONG — stored as is and renders as an invalid colour
"hsl(212 84% 38%)"   WRONG
```

Convert hex to HSL before writing the document (round each channel to a whole number). The values are injected straight into CSS custom properties, so an invalid string produces an unstyled portal rather than an error.

| Key                | Used for                                                                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `primary`          | Buttons, links, accents (`--accent` / `--primary`). The brand colour.                                                                                        |
| `primary_opposite` | Text placed on top of `primary` — it must contrast with it, normally white or near-black. Getting this wrong is the most common cause of unreadable buttons. |
| `secondary`        | Secondary accents and gradients.                                                                                                                             |
| `background`       | Page background of every portal screen, including the interview and application screens.                                                                     |
| `font_black`       | Main text colour.                                                                                                                                            |
| `font_grey`        | Secondary text colour.                                                                                                                                       |

A portal theme ([theme CSS](/cookbooks/portal-customisation/portal-pages#theme-css)) reads these through `var(--accent)`, so the brand colour set here stays the single source of truth even when the pages are restyled.

### Speech term boosting

Domain vocabulary that speech-to-text would otherwise mishear. Supply the words a learner or candidate will actually say out loud that a general-purpose recogniser gets wrong: clinical terms, drug names, product names, the organisation's own name.

Constraints, enforced on import exactly as the form enforces them:

* **5 to 50 characters per term.** Shorter or longer terms are dropped and reported. This rules out most short abbreviations — `ECG` is too short to qualify, `electrocardiogram` is fine.
* **Maximum 100 terms.** Beyond that the first 100 are kept and the rest reported.
* **Only supported in some speech languages.** The branding tab lists which; a term set for an unsupported language is simply inert.

Quality matters more than quantity. A long list of common words dilutes the boost and can make recognition worse, so prefer 10–40 genuinely domain-specific terms over a hundred generic ones. Write each term as it is spoken, in normal capitalisation.

## Not in this document

These are set in the admin by hand; the import neither reads nor changes them:

| Setting                                                                                                         | Where                                                                            |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Logo on dark backgrounds** — a white or light version of the logo that a portal theme shows in a dark header  | Branding, under the regular logo. Upload the file there.                         |
| **Scheduling** (meeting steps and the recruiter calendar) and **Portal type** (interview portal or career page) | Portal customisation → Interview portal.                                         |
| Pages, the site footer and the theme CSS                                                                        | [Portal pages](/cookbooks/portal-customisation/portal-pages), a separate import. |

## Rules

* Reject the document rather than guess if `style` or `report_template` is not one of its values.
* Do not invent colours to fill the palette. Supply only what the brand defines and let the rest keep their current values.
* Check contrast between `primary` and `primary_opposite` before emitting.
* Only reference logos that are already hosted at a public https URL.
