Portal pages import
Generates the documents imported by Configuration → Interview portal (or Consumer portal) → Import in the admin. A portal site is a set of pages. Each page has an address (its slug), an optional place in the menu, and per language a title, an SEO description and an ordered list of blocks — the same blocks the visual page editor builds. A site can also carry theme CSS that restyles the whole portal. One import can create a single page or rebuild a complete careers site, for example a copy of an existing corporate careers website with its sub-pages.This import writes pages to the database as drafts straight away (unlike the three configuration documents, which only fill a form). Nothing reaches candidates until the page is published — either with the Publish after import switch in the import dialog, or page by page afterwards.
Documents
Two document shapes. A file may hold one document or a JSON array of them; the dialog also takes several files at once.A whole site
One page
What an import does
- Matched by slug. A page whose slug already exists is replaced (all its languages, its menu flag and, when given, its sort order). Any other page is created. Pages that are not in the document are left alone — an import never deletes a page.
- Same slug twice — the last one in the document (or the last file) wins, with a warning.
- Draft or live. Everything is saved as a draft. With Publish after import switched on, pages and the theme are published in the same step.
- Theme. When the document has
theme.css, it replaces the portal’s theme draft (and is published with the switch on). - Checked before writing. The dialog lists every page it will create (
+) or replace (↻), with its languages and block count, and any errors and warnings. Errors drop the affected page; warnings drop only the part named (a block, a language). - Lenient about extra keys. Unknown fields are ignored and unknown block types skipped with a warning, so a document written for a newer editor still imports what this one understands.
Page
Language entry
Slugs
A custom slug is refused when:
- it is not lower-case words joined by dashes, with
/between levels (^[a-z0-9]+(-[a-z0-9]+)*(/[a-z0-9]+(-[a-z0-9]+)*)*$), or longer than 200 characters; - its first segment is an address the portal already uses:
jobs,blog,support,interview,position,login,profile,calendar,application-tracking,privacy_policy,terms_of_service,cookie_policy,home,catalogue,sessions,resume,pricing,faqand a few more; - its first segment is a language code (
de/…is the German version of a page, not a page called “de”).
_) and the home page cannot be moved or renamed; importing them only replaces their content.
Menu
- A top-level page with
show_in_menu: truegets a link in the portal header, labelled with its title in the visitor’s language. - Its direct sub-pages with
show_in_menu: trueform that link’s dropdown. Deeper levels never appear in the menu — link to them from blocks. sort_orderorders both levels.- Built-in pages that can be in the menu (
_jobs,_blog,_support,_tracking,_signed_in_home) follow their ownshow_in_menuonce published.
Blocks
Every block is an object with atype and a stable id (unique within its language; generated when missing or duplicated). All blocks also accept:
Fields marked markdown use the restricted renderer described in Format content with Markdown. Images and videos must be public https URLs; the importer uploads nothing.
Content blocks
Live blocks
These render data from the portal itself.
Links (
href, ctaHref) are portal paths (/jobs, /about/our-history, /about#values) or full https URLs.
Theme CSS
theme.css restyles the whole portal on top of the platform styles. It is saved per portal (Theme CSS in the pages list) and applies to every page, the header and the footer — and on the interview screens, to the header and footer only, so the interview itself keeps its own look.
Write every rule under .jm-site, the wrapper of the portal and of the editor canvas:
Use
var(--accent) for the brand colour instead of a hard-coded value, so Branding stays the source of truth. The tone variables --jm-tone-muted-bg, --jm-tone-dark-bg, --jm-tone-dark-fg, --jm-tone-accent-bg and --jm-tone-accent-fg recolour the sections without touching the blocks. @import of Google Fonts and @font-face are allowed.
If the header is dark, upload a light logo under Branding → Logo on dark backgrounds and show it from the theme:
Rules
- One language entry per portal language, with the same blocks in each (translated).
- Keep block
ids stable between imports of the same page; they are how the editor tracks blocks. - Never invent ids (
avatarId,discoverId) or links to pages the document does not create. - A page shown in the menu needs a short
title— it is the menu label. - Put the site footer on
_footer, not at the bottom of every page. - Import unpublished first, check the pages in the editor, then publish.