Skip to main content
Glama
brilliantdirectories

brilliant-directories-mcp

Official

createWebPage

Create a live SEO page for static content, member search results, or post search pages, with auto-generated slugs, SEO meta, hero sections, and automatic cache refresh.

Instructions

Create a page - Create a list_seo page record. Writes live data.

Cache refresh is automatic. Response includes auto_cache_refreshed: true after successful writes; no manual refreshSiteCache call needed. If auto_cache_refreshed: false, check auto_cache_refresh_error and retry refreshSiteCache once.

Required fields: seo_type. filename is required for every seo_type EXCEPT data_category (the WRAPPER generates a 10-char lowercase alphanumeric placeholder slug for that type and auto-creates a 301 redirect to the canonical post-type URL; the public URL routes via the post type's data_filename, not list_seo.filename). When seo_type=data_category, linked_post_type is also required (auto-validated at runtime).

Filename uniqueness — enforced by the wrapper, no exceptions. BD does NOT enforce unique filename server-side, but duplicates break the platform (two pages at the same URL render non-deterministically). The wrapper auto-pre-checks listWebPages for an existing slug before forwarding the create. If a row exists, the create is rejected with the existing seo_id so the agent can updateWebPage instead, or pick a unique slug. There is no agent-facing bypass; for seo_type=data_category the wrapper generates the slug itself (10-char lowercase alphanumeric — statistically unique across 36^10, no pre-check needed).

Thin-content warning: if no title, h1, meta_desc, or content is set on a seo_type=content create, a _thin_content_warning field is attached to the response. The page is still created and is publicly live — Google may index it as thin content. Fix: provide at least one of those fields on the create call, or updateWebPage immediately after, or deleteWebPage if the create was premature.

Asset field routing (mandatory - Froala strips mismatched content silently):

  • content - body HTML. No <style>/<script> tags. Supports [widget=Name] shortcodes + %%%token%%%.

  • content_css - raw CSS rules. NO <style> wrapper. Scope to a unique page class; never target .container/.froala-table/.image-placeholder (reserved). Do NOT use @import (causes FOUC/CLS - use content_head <link> tag instead).

  • content_footer_html - JavaScript, pixels, analytics embeds (<script> tags OK here). IIFE-wrap + scope.

  • content_head - head-only deps (<link>, <meta>, JSON-LD, external stylesheets, fonts).

  • content_footer - MISLEADING NAME. NOT footer HTML. Page-access gate enum: "" (public), "members_only", "digital_products".

  • Hero banner -> enable_hero_section + hero_* + h1_*/h2_* fields.

All asset fields accept raw content verbatim. No CDATA, no <parameter>/<invoke>/<function_calls> scaffolding, no entity-escaped HTML — forbidden anywhere in the value, not just as wrappers. Server strips these as a safety net; do not rely on it.

SVG/canvas prohibited in content - Froala strips them. Charts/diagrams go in a custom Widget, embedded via [widget=Name] shortcode.

seo_type values: home (system-seeded; cannot CREATE homepage, only updateWebPage), content (generic static page), profile_search_results (member search override — apply Rule: Member search SEO pages), data_category (post search), custom_widget_page, password_retrieval_page, unsubscribed.

Hero section - when enable_hero_section = 1 or 2, apply Rule: Hero readability bundle (atomic — all listed values must be sent together). Notes:

  • All color fields RGB ONLY (rgb(0, 0, 0)) - hex not accepted.

  • Hero h1_*/h2_* fields style ONLY the hero banner; H1/H2 TEXT comes from the record's top-level h1/h2 fields.

  • Hero image: content-relevant Pexels stock photo (free license, no attribution). See Rule: Image URLs (imported field — bare URL, no query string). Never picsum.photos/lorempixel/placekitten.

  • Hero gap-fix CSS (seo_type=content ONLY): add .hero_section_container + div.clearfix-lg {display:none} to content_css to close BD's 40px clearfix gap. Never add this rule on any other seo_type - on profile_search_results / data_category the clearfix provides needed spacing before live search-results; hiding it causes results to butt-join the hero.

  • Hero is cache-gated — but createWebPage/updateWebPage auto-refresh handles it; no separate call needed.

  • Homepage hero is BENIGN: seo_id=1 stores hero fields but the homepage template does NOT render them. Skip hero fields on homepage unless user explicitly asks.

profile_search_results SEO pages - thin-content remedy workflow:

Used to override BD's auto-generated dynamic search URLs (e.g. california/beverly-hills/plumbers) with static custom SEO copy. Creating a list_seo row with a matching filename takes over the public URL.

CRITICAL - filename MUST be a real slug BD's dynamic router recognizes. Arbitrary slugs render HTTP 404 publicly even when the record is created successfully. See Rule: Member search SEO pages for the canonical slug hierarchy (country/state/city/top/sub, strict order, any subset valid) and the live-lookup endpoints for each segment. Wrapper validates segments at runtime — country slug is derived from country_name (lowercase + spaces→hyphens). For arbitrary-URL static pages use seo_type=content.

Workflow for "add SEO to [category] in [location]":

  1. Resolve each human name to its slug via the relevant list* endpoint (exact-match =).

  2. For ambiguous inputs (e.g. "Beverly Hills plumbers" - could be beverly-hills/plumbers or california/beverly-hills/plumbers), ask user which variant.

  3. Pre-check: listWebPages property=filename property_value=<slug> property_operator==. Exists -> updateWebPage. Missing -> createWebPage with the required defaults listed in step 4.

  4. Required defaults on create and every update (unless user overrides):

    • seo_type=profile_search_results

    • custom_html_placement=4 (Below Body Content - safest for boilerplate intro without disrupting live results)

    • form_name="Member Search Result" (sidebar - Master Default; do NOT use Member Profile Page, that's for profile pages)

    • menu_layout=3 (Left Slim sidebar position)

    • enable_hero_section=1 + content-relevant Pexels hero_image + the readability safe-defaults from Rule: Hero readability bundle (atomic — all listed values must be sent together). Most end-users don't know to ask for a hero; thin-SEO pages underperform without one. User can opt out with enable_hero_section=0. (Cache flush is automatic post-write.)

  5. Auto-generate SEO meta for the specific combo - don't leave blank:

    • title - 50-60 chars ideal, <=70 max. Pattern: "[Category] in [City], [State] | [Site Name]".

    • meta_desc - 150-160 chars ideal, <=170 max. 1-2 sentence pitch with location + CTA.

    • meta_keywords - ~200 chars, comma-separated (no spaces).

    • facebook_title - 55-60 chars, differ from title (more conversational).

    • facebook_desc - 110-125 chars, punchier than meta_desc.

    • Do NOT auto-set facebook_image (needs uploaded asset).

  6. H1/H2 double-render trap: if hero enabled AND content contains <h1>/<h2>, both render. Either set h1/h2 fields and omit from content, or put in content and leave fields blank. Never both.

  7. No max-width wrappers in content or content_css on profile_search_results pages. BD's layout already provides the outer container; adding max-width: 960px; margin: auto double-constrains to a narrow strip. Let content flow at natural container width.

  8. custom_html_placement is only meaningful on profile_search_results (and data_category). Ignored on content pages.

SEO content for categories: route to createWebPage seo_type=profile_search_results (NOT updateTopCategory.desc / updateSubCategory.desc - those are internal labels, not rendered).

list_seo EAV fields — auto-routed by the wrapper, no special handling. Pass any field on createWebPage / updateWebPage directly; if it's an EAV-stored field (e.g. hero_*, h1_*, h2_*, linked_post_category, disable_*), the wrapper routes the write through users_meta automatically. Response includes an eav_results array confirming which EAV fields were written. Reads merge automatically via getWebPage/listWebPages. On deleteWebPage: BD does NOT cascade — run orphan cleanup per Rule: users_meta orphans (listUserMeta filtered by database=list_seo+database_id=<deleted seo_id>, then deleteUserMeta each match).

See also: listWebPages, updateWebPage, createRedirect (preserve SEO on slug changes).

Returns: { status: "success", message: {...createdRecord}, auto_cache_refreshed: true|false, auto_cache_refresh_error?: "...", _admin_edit_url: "..." } including seo_id. auto_cache_refreshed reports whether the automatic cache flush succeeded; if false, auto_cache_refresh_error explains why and the agent should retry refreshSiteCache manually once. _admin_edit_url is a centralized-admin deep-link to the WebPage editor for this seo_id — surface it to the user so they can jump straight to the admin edit screen for the page just created.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
h1No**H1 Heading** - Supports template tokens. Rendered as the page's main heading. H1 heading - supports template tokens
h2No**H2 Heading** - Supports template tokens. H2 heading - supports template tokens
titleNo**Page Meta Title** - Supports template tokens: `%%%website_name%%%`, `%industry%`, `%profession%`, etc. ~30-60 chars recommended. HTML title tag - supports template tokens like %%%website_name%%%
contentNoMain page body - Froala rich-text editor. **Shortcodes:** `[form=<form_name>]` embeds a BD form; `[widget=<widget_name>]` embeds a widget; `%%%template_tokens%%%` for site vars. **HTML only** - Froala strips `<style>`, `<script>`, `<form>`, `<input>`, `<select>`, `<textarea>`, `contenteditable=`, AND inline `style="..."` attributes on save. Route all non-body assets to their dedicated fields: CSS -> `content_css` (target classes, not inline styles), JS -> `content_footer_html`, head deps (`<link>`, fonts, `<meta>`, JSON-LD) -> `content_head`. SVG/canvas also stripped; for charts/diagrams use a custom Widget embedded via `[widget=Name]` shortcode.
filenameNoURL slug (e.g. home, about-us). Must be unique across web pages, top categories, sub categories, plan public URLs, and member profile slugs — wrapper auto-rejects collisions. Either pick a unique slug or `updateWebPage` the existing record. **OPTIONAL on `seo_type=data_category`** — the WRAPPER generates a 10-char lowercase alphanumeric placeholder slug if omitted (or rewrites a non-conforming agent-supplied value), and auto-creates a 301 redirect from that slug to the canonical post-type URL. The public URL routes via the post type's `data_filename` + category, not `list_seo.filename`. REQUIRED on every other seo_type.
nicknameNoHuman-readable label shown in admin panel
seo_textNo**Wildcard URL Rewrite.** `1` = any URL within this directory routes to this web page (catch-all behavior). Misnamed field - NOT SEO copy; SEO copy goes in `content` + meta fields.
seo_typeYesPage type identifier. User-selectable values: - `content` = Single Web Page (USE for custom/landing/static/about/contact - the default) - `data_category` = Post Search Results - `profile_search_results` = Member Search Results - `custom_widget_page` = Custom Widget as Web Page - `password_retrieval_page` = Password Retrieval Page - `unsubscribed` = Unsubscribed Page For "landing page", "static page", "about page", "contact page", any generic custom page -> always `content`. BD has additional internal values (`home`, `profile`, `payment`, etc.) that are system-seeded - do NOT create via API.
form_nameNo**SIDEBAR name** for this page - BD's field is misnamed; controls sidebar slot, NOT a contact form. NOT for rendering forms on this page — to embed a form in the body, use `[form=<form_name>]` inside `content`. Pass exact sidebar `name` string. `""` = no sidebar. Valid values: a Master Default Sidebar OR a custom sidebar `name` from `listSidebars`. See **Rule: Sidebars** for the canonical Master Default list and selection workflow. `menu_layout` controls position when `form_name` is set. **Default on `profile_search_results` pages:** `Member Search Result` (NOT `Member Profile Page` - that's for profile/detail pages, not search results).
meta_descNo**Meta Description** - Supports template tokens. ~150-160 chars recommended for search snippets. Meta description - supports template tokens
show_formNo**Apply NoIndex,NoFollow.** `1` = adds `<meta name="robots" content="noindex,nofollow">` to the page. Auto-applied to protected pages. **NOT a form-render toggle** despite the field name — BD repurposed this column. To render a form in the body, use `[form=<form_name>]` inside `content`.
breadcrumbNo**OMIT** — BD auto-generates the breadcrumb trail. Never set this yourself; a manual value overrides BD's generated trail and breaks the page.
hero_imageNoHero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) — external URLs render hotlinked on WebPages, no `auto_image_import` needed. **LANDSCAPE only — verify orientation via `getImageDimensions` per **Rule: Image dimensions** before commit; bare URL, no `?query`, must end in `.jpg`/`.jpeg`/`.png` (WebP/GIF/AVIF skipped pre-tool per the same rule) — see **Rule: Image URLs**.** Query strings get truncated/mangled in BD's form-urlencoded parsing and the stored URL becomes invalid. Recommended dimensions: 1800 × 600 px.
content_cssNoCustom CSS for this page. Paste raw CSS rules directly - NO `<style>` wrapper. Renders in page `<head>` at load. Scope every selector to a unique page class/ID (e.g. `.my-about-page h2 { ... }`) - bare `body`/`h1`/`p` affect the whole site. Never target reserved BD classes: `.container`, `.froala-table`, `.image-placeholder`. Never `@import` (FOUC/CLS) - load external stylesheets/fonts via `<link>` tag in `content_head`. **Admin Froala editor gotcha** - editor applies `content_css` but does NOT run `content_footer_html` JS. Hide-by-default CSS (scroll reveals, tab panels, accordion collapsed, modal hidden, slider non-active slides) will permanently hide content in the editor. Gate such rules behind a `.js-ready` class that `content_footer_html` JS adds on load: `.my-page.js-ready .reveal { opacity:0 }` NOT `.my-page .reveal { opacity:0 }`. The paired JS rule lives in the `content_footer_html` field.
hide_footerNo**Hide Footer** - 1 = hides the site footer on this page.
hide_headerNo**Hide Header** - 1 = hides the full site header on this page.
menu_layoutNoSidebar position + width (integer). Only effective when the page has a sidebar set via `form_name` - ignored without sidebar. NOT a navigation menu layout despite the field name. - `1` = Left Wide (BD default when unspecified) - `2` = Right Wide - `3` = Left Slim - `4` = Right Slim Ordering is NOT sequential by side - left positions are `1` and `3`, right are `2` and `4`. **Default on `profile_search_results` pages:** `3` (Left Slim). On `content` pages, omit unless user specifies (BD defaults to `1`).
content_headNoPage-scoped `<head>` dependencies - rendered inside `<head>`. Use for: `<link>` tags (external stylesheets, preconnect hints, canonical overrides, Google Fonts), `<meta>` tags beyond standard SEO fields, verification tags, JSON-LD structured data (`<script type="application/ld+json">`), head-required third-party scripts (rare - prefer `content_footer_html` for most JS).
content_menuNoMenu section this page belongs to
h1_font_sizeNoMain title (H1) font size in pixels. Accepts integer values from `30` to `80`. OMIT to inherit BD's per-`seo_type` default.
h2_font_sizeNoSub-title (H2) font size in pixels. Accepts integer values from `20` to `60`. OMIT to inherit BD's per-`seo_type` default.
org_templateNo**OMIT** — internal layout reference. No public lookup endpoint; setting an arbitrary value can render the page against a nonexistent layout.
content_groupNoAdmin-panel grouping label
content_orderNoSort order within menu/section
facebook_descNo**Social Media Description (Open Graph)** - Description shown on social shares. Open Graph description
h1_font_colorNoMain title (H1) font color in the hero. RGB format ONLY - e.g. `rgb(255, 255, 255)`. The H1 text itself comes from the page's `h1` field - these `h1_*` fields control ONLY the hero's H1 styling. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of **Rule: Hero readability bundle**).
h2_font_colorNoSub-title (H2) font color in the hero. RGB format ONLY - e.g. `rgb(255, 255, 255)`. The H2 text itself comes from the page's `h2` field. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of **Rule: Hero readability bundle**).
hero_link_urlNoHero call-to-action (CTA) button link URL. If empty, no CTA button is rendered. For internal links, a relative path is fine (e.g. `/signup`); for external, full URL with `http://` or `https://`.
meta_keywordsNo**Meta Keywords** - Supports template tokens (comma-separated). Meta keywords - supports template tokens
content_footerNo**MISLEADING NAME - NOT page footer HTML.** Misnamed relic column; BD repurposed as the **page-access gate**: - `""` (default) = Public For Everyone - `"members_only"` = Logged-in members only (non-members hit login/signup wall) - `"digital_products"` = Only buyers of digital-product items Finer rules (which members, which plans) live in other fields. Do NOT put HTML here. Page body -> `content`; scripts -> `content_footer_html`. No dedicated "below-body HTML" field - put below-body markup inside `content` itself.
content_layoutNo**Full Screen Page Width override.** OMIT for normal pages (BD's default container width). Set to `1` for full-bleed pages — individual sections in `content` can then break edge-to-edge (background bands, hero strips, viewport-wide images). **For full-bleed sections, set `content_layout=1` FIRST.** Do NOT fake full-bleed with negative-margin/9999px-padding tricks in `content_css` — breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes. Anti-pattern. Pattern with `content_layout=1`: scoped CSS in `content_css` gives each section its own edge-to-edge background; inner `<div class="container">` (or page-scoped max-width wrapper) keeps readable copy centered.
facebook_imageNo**Social Media Shared Image** - URL/filename of the OG image. BD recommends at least 200×200px. Open Graph image URL
facebook_titleNo**Social Media Title (Open Graph)** - Title shown when the page is shared on Facebook/LinkedIn/etc. Open Graph title for social sharing
h1_font_weightNoMain title (H1) font weight. `300`=Light, `400`=Normal (default), `600`=Bold, `800`=Extra Bold.
h2_font_weightNoSub-title (H2) font weight. `300`=Light, `400`=Normal, `600`=Bold (default), `800`=Extra Bold.
hero_alignmentNoHorizontal alignment of the hero title/subtitle/content text block within its column. Default `center`.
hero_link_sizeNoCTA button size. MUST be exactly one of: `""` (empty = Normal), `btn-lg` (Large), `btn-xl` (Extra Large). Any other value (e.g. a font-size number like `16`) is stored verbatim and rendered as a broken class — BD does not validate server-side.
hero_link_textNoHero CTA button label. Required (non-empty) for the button to render - `hero_link_url` alone without text will not produce a button.
hide_top_rightNo**Hide Top Header Menu** - 1 = hides the top-right nav cluster (account/login links).
content_sidebarNoSidebar configuration or widget shortcode
hero_link_colorNoCTA button color variant — attention level, not literal color. MUST be exactly one of: `primary`, `info`, `success`, `warning`, `danger`, `default`, `secondary`. Any other value (e.g. a hex `#ffffff`) is stored verbatim and rendered as a broken class like `btn-#ffffff` — BD does not validate server-side. Choose by attention level needed: `primary` (main CTA), `danger` (urgent/can't-miss), `warning` (attention), `success` (positive action), `info` (neutral-blue), `secondary` (theme secondary), `default` (low-emphasis gray). Actual rendered color comes from the site's theme palette.
allowed_productsNoComma-separated plan/product IDs (empty = all plans)
hero_top_paddingNoTop padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200`. BD field default `70` — wrapper auto-fills `100` on hero off→on transition (part of **Rule: Hero readability bundle**).
linked_post_typeNoPost type's `data_id` (from `listPostTypes`). REQUIRED when `seo_type=data_category`; ignored on other seo_types. See **Rule: Resource disambiguation** when the user names a post type by description rather than `data_id`.
hero_column_widthNoHero text-content column width as Bootstrap 12-col span. `3`=25%, `4`=30%, `5`=40%, `6`=50%, `7`=60%, `8`=70%, `9`=75%, `10`=80%, `11`=90%, `12`=100%. Narrower = more side padding around the text block. BD field default `8` — wrapper auto-fills `5` on hero off→on transition (part of **Rule: Hero readability bundle**).
hide_header_linksNo**Hide Main Menu** - 1 = hides the main navigation menu on this page.
page_render_widgetNo**OMIT** — internal widget reference for `seo_type=custom_widget_page` only. No public widget-ID lookup; setting on other page types breaks rendering.
content_footer_htmlNoPage-scoped JavaScript + script embeds - rendered before `</body>`. `<script>` tags accepted here (unlike `content`). jQuery loaded globally. Wrap JS in an IIFE `(function($){ ... })(jQuery);` and scope selectors to a unique page class. Also for third-party script embeds (analytics pixels, chat widgets, schema markup). NOT for extra body HTML - `content` is the body field. **If `content_css` uses a `.js-ready` gate for hide-by-default effects** (scroll reveals, tab panels, accordion collapse, modal hidden, slider non-active), JS MUST add that class to the page wrapper as the FIRST line (before any other init code): `document.querySelector('.my-page')?.classList.add('js-ready');`. The admin Froala editor applies CSS but does NOT run this field's JS, so without the gate, hide-rules make content permanently invisible in the editor.
enable_hero_sectionNoHero banner master switch: - `0` = disabled (all other `hero_*`/`h1_font_*`/`h2_font_*` ignored at render; stored values preserved for later toggle-back) - `1` = enabled all devices - `2` = enabled desktop, hidden mobile **On hero off→on transition (`0`/unset → `1`/`2`), wrapper auto-fills the hero readability bundle** — `hero_top_padding=100`, `hero_bottom_padding=100`, `hero_column_width=5`, `hero_content_overlay_color=rgb(0, 0, 0)`, `hero_content_overlay_opacity=0.5`, `hero_content_font_color=rgb(255, 255, 255)`, `hero_content_font_size=18`, `h1_font_color=rgb(255, 255, 255)`, `h2_font_color=rgb(255, 255, 255)` — for any of those 9 fields you OMITTED. BD's per-field defaults render an unreadable hero (10px content text on a 0.4-opacity overlay, default top/bottom padding 70/60 — visually too cramped for most banner imagery); the bundle is the canonical readable recipe. User-supplied values pass through untouched. Filled fields are echoed in `_hero_bundle_autofilled`. **`hero_image` is required** on transition — wrapper rejects if missing (no safe default; walk the image-sourcing ladder). On no-transition updates (hero already on), no auto-fill fires. **Homepage benign** - `seo_type=home` ignores hero fields entirely regardless of value. BD stores but never renders on homepage; skip all `hero_*` fields on homepage updates.
hero_bottom_paddingNoBottom padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200`. BD field default `60` — wrapper auto-fills `100` on hero off→on transition (part of **Rule: Hero readability bundle**).
hero_hide_banner_adNoWhen `1`, suppresses the site-wide "Below Header Banner Ad" on THIS page only (useful when the hero visually replaces that slot). `0` (default) keeps the banner ad in its normal position.
private_page_selectNoAccess control setting
hero_section_contentNoAdditional text / HTML / widget shortcode rendered BELOW H1 and H2 in the hero section. Supports `[widget=Name]` shortcodes. EAV-routed by the wrapper — pass on `createWebPage` / `updateWebPage` directly, no manual `updateUserMeta` needed.
linked_post_categoryNoEither the literal `post_main_page` (pins to the post type's main search-results page) OR an exact category name from the linked post type's `feature_categories` (e.g. `"Category 1"`, case-sensitive). Optional on `seo_type=data_category` — wrapper auto-defaults to `post_main_page` when omitted on a fresh data_category create or content→data_category switch. Ignored on other seo_types. Wrapper enforces pair-uniqueness on `(linked_post_type, linked_post_category)`.
custom_html_placementNoRender position of `content` HTML relative to dynamic search results. Only meaningful on `seo_type=profile_search_results` (and `data_category`); ignored on `content` pages. - `0` = Inside Tab (content + members in separate nav tabs) - `1` = Above Member Results (within results container, sidebar-width) - `2` = Below Member Results (within results container) - `3` = Above Body Content (full page width, spans sidebar+results) - `4` = Below Body Content (full page width, below sidebar+results) <- **recommended default for AI-generated SEO pages** For boilerplate SEO intro/FAQ/local copy bolstering thin pages, `4` renders full-width below the live results without disrupting member-facing UX.
hero_content_font_sizeNoFont size in pixels for the additional hero content block (`hero_section_content`). Accepts integer values from `10` to `30`. BD field default `10` is too small for hero paragraph copy — wrapper auto-fills `18` on hero off→on transition (part of **Rule: Hero readability bundle**).
hero_link_target_blankNoWhen `1`, opens the CTA link in a new tab (`target="_blank"`). `0` (default) opens in the same tab.
disable_css_stylesheetsNoDisable BD's site stylesheets on this page (frontend only). `1` = page renders without BD's global CSS (use when embedding a fully self-styled custom page or iframe target). `0` (default) = normal BD styling. EAV-stored — agent passes directly; wrapper handles routing on update.
hero_content_font_colorNoFont color for the additional hero content block rendered below H1/H2 (the `hero_section_content` field). RGB format ONLY - e.g. `rgb(0, 0, 0)`. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of **Rule: Hero readability bundle**).
hero_background_image_sizeNoControls how the hero background image scales/crops across devices. `mobile-ready` (recommended) = responsive behavior tuned for mobile, `standard` = fixed-ratio behavior.
hero_content_overlay_colorNoSemi-transparent color layer between hero background image and text, for legibility over busy images. **RGB format ONLY** - `rgb(0, 0, 0)` or `rgb(255, 255, 255)`. Hex (`#000000`) NOT accepted. Combine with `hero_content_overlay_opacity` to control strength. Wrapper auto-fills `rgb(0, 0, 0)` on hero off→on transition (part of **Rule: Hero readability bundle**).
hero_content_overlay_opacityNoOpacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. BD field default `0.4` is too transparent — wrapper auto-fills `0.5` on hero off→on transition (part of **Rule: Hero readability bundle**). EAV-routed by the wrapper — pass on `updateWebPage` directly, no manual `updateUserMeta` needed.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Addedv6.55.39
  2. Removedv6.55.19
  3. Addedv6.49.4
  4. Removedv6.48.1
  5. Addedv6.0.19
  6. Removedv6.0.18
  7. Changed6 schema fields changedv6.0.16
    • changedInput schema / properties / breadcrumb / description
      Previous value: -"OMIT — BD auto-generates the breadcrumb trail. Never set this yourself; a manual value overrides BD's generated trail and breaks the page."New value: +"**OMIT** — BD auto-generates the breadcrumb trail. Never set this yourself; a manual value overrides BD's generated trail and breaks the page."
    • removedInput schema / properties / date_updated
      Removed value: -{
      -  "description": "Last-update timestamp driving admin-UI \"Last Update\" display. Format: `YYYYMMDDHHmmss` (14-digit, no separators - e.g. `20260214232533`).\n\n**Required on every `createWebPage` / `updateWebPage` call** - always set to CURRENT timestamp at call time (unless backfilling historical migration data). BD does NOT auto-populate; omitting it leaves the admin UI showing blank/stale.",
      -  "type": "string"
      -}
    • changedInput schema / properties / hero_image / description
      Previous value: -"Hero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) — external URLs render hotlinked on WebPages, no `auto_image_import` needed. **LANDSCAPE only — never portrait/vertical. Bare URL — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get truncated/mangled in BD's form-urlencoded parsing and the stored URL becomes invalid. Recommended dimensions: 1800 × 600 px."New value: +"Hero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) — external URLs render hotlinked on WebPages, no `auto_image_import` needed. **LANDSCAPE only — never portrait/vertical; source via `https://www.pexels.com/search/<term>/?orientation=landscape`; bare URL, no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp` — see image URL rule.** Query strings get truncated/mangled in BD's form-urlencoded parsing and the stored URL becomes invalid. Recommended dimensions: 1800 × 600 px."
    • changedInput schema / properties / org_template / description
      Previous value: -"OMIT — internal layout reference. No public lookup endpoint; setting an arbitrary value can render the page against a nonexistent layout."New value: +"**OMIT** — internal layout reference. No public lookup endpoint; setting an arbitrary value can render the page against a nonexistent layout."
    • changedInput schema / properties / page_render_widget / description
      Previous value: -"OMIT — internal widget reference for `seo_type=custom_widget_page` only. No public widget-ID lookup; setting on other page types breaks rendering."New value: +"**OMIT** — internal widget reference for `seo_type=custom_widget_page` only. No public widget-ID lookup; setting on other page types breaks rendering."
    • changedInput schema / required
      Previous value: -[
      -  "seo_type",
      -  "filename",
      -  "date_updated"
      -]New value: +[
      +  "seo_type",
      +  "filename"
      +]
  8. Changed11 schema fields changedv6.0.15
    • changedInput schema / properties / enable_hero_section / description
      Previous value: -"Hero banner master switch:\n\n- `0` = disabled (all other `hero_*`/`h1_font_*`/`h2_font_*` ignored at render; stored values preserved for later toggle-back)\n\n- `1` = enabled all devices\n\n- `2` = enabled desktop, hidden mobile\n\n**Homepage benign** - `seo_type=home` ignores hero fields entirely regardless of value. BD stores but never renders on homepage; skip all `hero_*` fields on homepage updates."New value: +"Hero banner master switch:\n\n- `0` = disabled (all other `hero_*`/`h1_font_*`/`h2_font_*` ignored at render; stored values preserved for later toggle-back)\n\n- `1` = enabled all devices\n\n- `2` = enabled desktop, hidden mobile\n\n**On hero off→on transition (`0`/unset → `1`/`2`), wrapper auto-fills the hero readability bundle** — `hero_top_padding=100`, `hero_bottom_padding=100`, `hero_column_width=5`, `hero_content_overlay_color=rgb(0, 0, 0)`, `hero_content_overlay_opacity=0.5`, `hero_content_font_color=rgb(255, 255, 255)`, `hero_content_font_size=18`, `h1_font_color=rgb(255, 255, 255)`, `h2_font_color=rgb(255, 255, 255)` — for any of those 9 fields you OMITTED. BD's per-field defaults render an unreadable hero (10px text, 0.4 transparent overlay, 0px padding); the bundle is the canonical readable recipe. User-supplied values pass through untouched. Filled fields are echoed in `_hero_bundle_autofilled`. **`hero_image` is required** on transition — wrapper rejects if missing (no safe default; walk the image-sourcing ladder). On no-transition updates (hero already on), no auto-fill fires.\n\n**Homepage benign** - `seo_type=home` ignores hero fields entirely regardless of value. BD stores but never renders on homepage; skip all `hero_*` fields on homepage updates."
    • changedInput schema / properties / form_name / description
      Previous value: -"**SIDEBAR name** for this page - BD's field is misnamed; controls sidebar slot, NOT a contact form. Pass exact sidebar `name` string. `\"\"` = no sidebar.\n\n**Master Default Sidebars** (always available, NOT in `listSidebars` - hardcoded in BD core): `Global Website Search`, `Member Profile Page`, `Member Search Result`, `Personal Post Feed`, `Post Search Result`, `Post Single Page`. Custom sidebars via `listSidebars` (returns site-local only). Unknown name -> no sidebar rendered; ask user to pick from available.\n\n`menu_layout` controls position when `form_name` is set. **Default on `profile_search_results` pages:** `Member Search Result` (NOT `Member Profile Page` - that's for profile/detail pages, not search results)."New value: +"**SIDEBAR name** for this page - BD's field is misnamed; controls sidebar slot, NOT a contact form. Pass exact sidebar `name` string. `\"\"` = no sidebar. Valid values: a Master Default Sidebar OR a custom sidebar `name` from `listSidebars`. See the **Sidebars** rule in the corpus for the canonical Master Default list and selection workflow.\n\n`menu_layout` controls position when `form_name` is set. **Default on `profile_search_results` pages:** `Member Search Result` (NOT `Member Profile Page` - that's for profile/detail pages, not search results)."
    • changedInput schema / properties / h1_font_color / description
      Previous value: -"Main title (H1) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H1 text itself comes from the page's `h1` field - these `h1_*` fields control ONLY the hero's H1 styling."New value: +"Main title (H1) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H1 text itself comes from the page's `h1` field - these `h1_*` fields control ONLY the hero's H1 styling. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / h2_font_color / description
      Previous value: -"Sub-title (H2) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H2 text itself comes from the page's `h2` field."New value: +"Sub-title (H2) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H2 text itself comes from the page's `h2` field. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_bottom_padding / description
      Previous value: -"Bottom padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200`. Default `60`."New value: +"Bottom padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200`. BD field default `60` — wrapper auto-fills `100` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_column_width / description
      Previous value: -"Hero text-content column width as Bootstrap 12-col span. `3`=25%, `4`=30%, `5`=40%, `6`=50%, `7`=60%, `8`=70% (default), `9`=75%, `10`=80%, `11`=90%, `12`=100%. Narrower = more side padding around the text block."New value: +"Hero text-content column width as Bootstrap 12-col span. `3`=25%, `4`=30%, `5`=40%, `6`=50%, `7`=60%, `8`=70%, `9`=75%, `10`=80%, `11`=90%, `12`=100%. Narrower = more side padding around the text block. BD field default `8` — wrapper auto-fills `5` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_content_font_color / description
      Previous value: -"Font color for the additional hero content block rendered below H1/H2 (the `hero_section_content` field). RGB format ONLY - e.g. `rgb(0,0,0)`."New value: +"Font color for the additional hero content block rendered below H1/H2 (the `hero_section_content` field). RGB format ONLY - e.g. `rgb(0,0,0)`. Wrapper auto-fills `rgb(255, 255, 255)` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_content_font_size / description
      Previous value: -"Font size in pixels for the additional hero content block (`hero_section_content`). Accepts integer values from `10` to `30`. `10` is BD's default but renders too small for hero paragraph copy; use `15`-`18`."New value: +"Font size in pixels for the additional hero content block (`hero_section_content`). Accepts integer values from `10` to `30`. BD field default `10` is too small for hero paragraph copy — wrapper auto-fills `18` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_content_overlay_color / description
      Previous value: -"Semi-transparent color layer between hero background image and text, for legibility over busy images. **RGB format ONLY** - `rgb(0,0,0)` or `rgb(255,255,255)`. Hex (`#000000`) NOT accepted. Combine with `hero_content_overlay_opacity` to control strength."New value: +"Semi-transparent color layer between hero background image and text, for legibility over busy images. **RGB format ONLY** - `rgb(0,0,0)` or `rgb(255,255,255)`. Hex (`#000000`) NOT accepted. Combine with `hero_content_overlay_opacity` to control strength. Wrapper auto-fills `rgb(0, 0, 0)` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
    • changedInput schema / properties / hero_content_overlay_opacity / description
      Previous value: -"Opacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. Default `0.4`. EAV-routed by the wrapper — pass on `updateWebPage` directly, no manual `updateUserMeta` needed."New value: +"Opacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. BD field default `0.4` is too transparent — wrapper auto-fills `0.5` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`). EAV-routed by the wrapper — pass on `updateWebPage` directly, no manual `updateUserMeta` needed."
    • changedInput schema / properties / hero_top_padding / description
      Previous value: -"Top padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200` (i.e. `0`, `10`, `20`, ..., `200`). Default `70`."New value: +"Top padding inside the hero banner, in pixels. Accepts multiples of 10 from `0` to `200`. BD field default `70` — wrapper auto-fills `100` on hero off→on transition (part of the hero readability bundle — see `enable_hero_section`)."
  9. Changed12 schema fields changedv6.0.14
    • changedInput schema / properties / breadcrumb / description
      Previous value: -"OMIT — do not set unless user explicitly requests it. BD auto-generates the breadcrumb trail; manual override locks it to a static string that breaks when page context changes."New value: +"OMIT — BD auto-generates the breadcrumb trail. Never set this yourself; a manual value overrides BD's generated trail and breaks the page."
    • removedInput schema / properties / content_active
      Removed value: -{
      -  "description": "1 = active, 0 = hidden",
      -  "enum": [
      -    0,
      -    1
      -  ],
      -  "type": "integer"
      -}
    • changedInput schema / properties / content_layout / description
      Previous value: -"**Full Screen Page Width.** `0` (default) = content stays inside BD's normal max-width container. `1` = full-screen width; individual sections in `content` can break edge-to-edge (full-bleed background bands, hero-style strips, viewport-wide images).\n\n**For full-bleed sections, set `content_layout=1` FIRST.** Do NOT fake it with negative-margin/9999px-padding tricks in `content_css` - breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes. Anti-pattern.\n\nPattern with `content_layout=1`: scoped CSS in `content_css` gives each section its own edge-to-edge background; inner `<div class=\"container\">` (or page-scoped max-width wrapper) keeps readable copy centered. Only use when the page has sections DESIGNED edge-to-edge; plain content pages don't need it."New value: +"**Full Screen Page Width override.** OMIT for normal pages (BD's default container width). Set to `1` for full-bleed pages — individual sections in `content` can then break edge-to-edge (background bands, hero strips, viewport-wide images).\n\n**For full-bleed sections, set `content_layout=1` FIRST.** Do NOT fake full-bleed with negative-margin/9999px-padding tricks in `content_css` — breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes. Anti-pattern.\n\nPattern with `content_layout=1`: scoped CSS in `content_css` gives each section its own edge-to-edge background; inner `<div class=\"container\">` (or page-scoped max-width wrapper) keeps readable copy centered."
    • changedInput schema / properties / content_layout / enum
      Previous value: -[
      -  0,
      -  1
      -]New value: +[
      +  1
      +]
    • changedInput schema / properties / filename / description
      Previous value: -"URL slug (e.g. home, about-us)"New value: +"URL slug (e.g. home, about-us). Must be unique across all pages — duplicates break BD's router (two pages competing for the same URL render non-deterministically). The wrapper auto-rejects creates that collide with an existing `filename`; the agent must either pick a unique slug or `updateWebPage` the existing record."
    • changedInput schema / properties / h1_font_size / description
      Previous value: -"Main title (H1) font size in pixels. Accepts integer values from `30` to `80`. Default `30`."New value: +"Main title (H1) font size in pixels. Accepts integer values from `30` to `80`. OMIT to inherit BD's per-`seo_type` default."
    • changedInput schema / properties / h2_font_size / description
      Previous value: -"Sub-title (H2) font size in pixels. Accepts integer values from `20` to `60`. Default `56`."New value: +"Sub-title (H2) font size in pixels. Accepts integer values from `20` to `60`. OMIT to inherit BD's per-`seo_type` default."
    • changedInput schema / properties / hero_content_font_size / description
      Previous value: -"Font size in pixels for the additional hero content block (`hero_section_content`). Accepts integer values from `10` to `30`. Default `10`."New value: +"Font size in pixels for the additional hero content block (`hero_section_content`). Accepts integer values from `10` to `30`. `10` is BD's default but renders too small for hero paragraph copy; use `15`-`18`."
    • changedInput schema / properties / hero_content_overlay_opacity / description
      Previous value: -"Opacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. Default `0.4`.\n\n**EAV-STORED** (one of 18 `list_seo` fields stored in `users_meta`, not a direct column) - `createWebPage` writes correctly, but `updateWebPage` silently drops. On updates, write via `updateUserMeta`/`createUserMeta` with `database=list_seo`, `database_id=<seo_id>`, `key=hero_content_overlay_opacity`, then `refreshSiteCache`. Per top-level users_meta compound-identity rule, all meta calls require `database` + `database_id` together."New value: +"Opacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. Default `0.4`. EAV-routed by the wrapper — pass on `updateWebPage` directly, no manual `updateUserMeta` needed."
    • changedInput schema / properties / hero_section_content / description
      Previous value: -"Additional text / HTML / widget shortcode rendered BELOW H1 and H2 in the hero section. Supports `[widget=Name]` shortcodes.\n\n**EAV-stored** - `createWebPage` seeds correctly, `updateWebPage` silently drops. On update, write via `updateUserMeta` with `database=list_seo`."New value: +"Additional text / HTML / widget shortcode rendered BELOW H1 and H2 in the hero section. Supports `[widget=Name]` shortcodes. EAV-routed by the wrapper — pass on `createWebPage` / `updateWebPage` directly, no manual `updateUserMeta` needed."
    • changedInput schema / properties / org_template / description
      Previous value: -"Template/layout ID"New value: +"OMIT — internal layout reference. No public lookup endpoint; setting an arbitrary value can render the page against a nonexistent layout."
    • changedInput schema / properties / page_render_widget / description
      Previous value: -"Widget ID to render as page content"New value: +"OMIT — internal widget reference for `seo_type=custom_widget_page` only. No public widget-ID lookup; setting on other page types breaks rendering."
  10. Changed4 schema fields changedv6.0.13
    • changedInput schema / properties / breadcrumb / description
      Previous value: -"Breadcrumb label"New value: +"OMIT — do not set unless user explicitly requests it. BD auto-generates the breadcrumb trail; manual override locks it to a static string that breaks when page context changes."
    • changedInput schema / properties / hero_image / description
      Previous value: -"Hero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) - external URLs work natively on WebPages, no `auto_image_import` needed. Recommended dimensions: 1800 × 600 px."New value: +"Hero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) — external URLs render hotlinked on WebPages, no `auto_image_import` needed. **LANDSCAPE only — never portrait/vertical. Bare URL — no `?query`, must end in `.jpg`/`.jpeg`/`.png`/`.webp`.** Query strings get truncated/mangled in BD's form-urlencoded parsing and the stored URL becomes invalid. Recommended dimensions: 1800 × 600 px."
    • changedInput schema / properties / hero_link_color / description
      Previous value: -"CTA button color variant. Maps to Bootstrap button classes, rendered per the site's theme palette (not literal colors):\n\n- `primary` (default theme color)\n\n- `info` (blue)\n\n- `success` (green)\n\n- `warning` (yellow)\n\n- `danger` (red)\n\n- `default` (neutral gray)\n\n- `secondary` (theme secondary)"New value: +"CTA button color variant — attention level, not literal color. MUST be exactly one of: `primary`, `info`, `success`, `warning`, `danger`, `default`, `secondary`. Any other value (e.g. a hex `#ffffff`) is stored verbatim and rendered as a broken class like `btn-#ffffff` — BD does not validate server-side.\n\nChoose by attention level needed: `primary` (main CTA), `danger` (urgent/can't-miss), `warning` (attention), `success` (positive action), `info` (neutral-blue), `secondary` (theme secondary), `default` (low-emphasis gray). Actual rendered color comes from the site's theme palette."
    • changedInput schema / properties / hero_link_size / description
      Previous value: -"CTA button size. `\"\"` (empty string, default) = Normal, `btn-lg` = Large, `btn-xl` = Extra Large. These are Bootstrap button-size classes applied verbatim."New value: +"CTA button size. MUST be exactly one of: `\"\"` (empty = Normal), `btn-lg` (Large), `btn-xl` (Extra Large). Any other value (e.g. a font-size number like `16`) is stored verbatim and rendered as a broken class — BD does not validate server-side."
  11. Changed37 schema fields changed
    • changedInput schema / properties / content / description
      Previous value: -"Main page body — rendered by a Froala rich text editor. **HTML only, no `<style>` or `<script>` tags** (Froala strips them). Also strips `<form>`, `<input>`, `<select>`, `<textarea>`, and `contenteditable` attributes. **Do NOT put CSS or JS here** — route them to the dedicated fields: CSS → `content_css`, JS/scripts → `content_footer_html`, head-only dependencies → `content_head`. For one-off styling, inline `style=\"...\"` attributes on elements work fine. Supports `[widget=Name]` / `[form=Name]` shortcodes and `%%%template_tokens%%%`. Pass raw HTML — do NOT wrap in `<![CDATA[...]]>`, do NOT escape as `&lt;` / `&gt;`. BD stores the value verbatim."New value: +"Main page body - Froala rich-text editor. **HTML only** - Froala strips `<style>`, `<script>`, `<form>`, `<input>`, `<select>`, `<textarea>`, `contenteditable=`, AND inline `style=\"...\"` attributes on save.\n\nRoute all non-body assets to their dedicated fields: CSS -> `content_css` (target classes, not inline styles), JS -> `content_footer_html`, head deps (`<link>`, fonts, `<meta>`, JSON-LD) -> `content_head`. SVG/canvas also stripped; for charts/diagrams use a custom Widget embedded via `[widget=Name]` shortcode.\n\nSupports `[widget=Name]` / `[form=Name]` shortcodes and `%%%template_tokens%%%`."
    • changedInput schema / properties / content_css / description
      Previous value: -"Custom CSS for this page. **Paste raw CSS rules directly — do NOT wrap in `<style>` tags.** Renders in the page `<head>` at load time. **Scope every selector** under a unique page-specific class or ID (e.g. `.my-about-page h2 { ... }`) — unscoped selectors like `body`, `h1`, `p` affect the entire site. Never target reserved platform classes: `.container`, `.froala-table`, `.image-placeholder` — these are BD utilities, not styling targets.\n\n**⚠️ Admin Froala editor gotcha** — the admin editor applies `content_css` but does NOT execute `content_footer_html` scripts. Any hide-by-default rule that JS is meant to un-hide (scroll reveals, tab panels, accordion collapsed, modal hidden, slider non-active slides) will permanently hide that content in the admin editor, making it un-editable. Gate such rules behind a `.js-ready` class on a page-scoped wrapper that your `content_footer_html` script adds on load — e.g. `.my-page.js-ready .reveal { opacity:0 }` NOT `.my-page .reveal { opacity:0 }`. See `content_footer_html`."New value: +"Custom CSS for this page. Paste raw CSS rules directly - NO `<style>` wrapper. Renders in page `<head>` at load. Scope every selector to a unique page class/ID (e.g. `.my-about-page h2 { ... }`) - bare `body`/`h1`/`p` affect the whole site. Never target reserved BD classes: `.container`, `.froala-table`, `.image-placeholder`. Never `@import` (FOUC/CLS) - load external stylesheets/fonts via `<link>` tag in `content_head`.\n\n**Admin Froala editor gotcha** - editor applies `content_css` but does NOT run `content_footer_html` JS. Hide-by-default CSS (scroll reveals, tab panels, accordion collapsed, modal hidden, slider non-active slides) will permanently hide content in the editor. Gate such rules behind a `.js-ready` class that `content_footer_html` JS adds on load: `.my-page.js-ready .reveal { opacity:0 }` NOT `.my-page .reveal { opacity:0 }`. See `content_footer_html` for the paired JS rule."
    • changedInput schema / properties / content_footer / description
      Previous value: -"⚠️ **MISLEADING NAME — this is NOT page footer HTML.** Misnamed relic column; BD repurposed it as the **page-access gate**. Controls who can view the rendered public URL:\n- `\"\"` (empty, default) — **Public For Everyone**\n- `\"members_only\"` — **Only Allow Members** (logged-in members only; non-members hit a login/signup wall)\n- `\"digital_products\"` — **Only Allow Digital Products Buyers** (only buyers of digital-product items on the site)\n\nFiner-grained rules (which members, which plans, etc.) are handled by other related fields BD exposes separately; this column is just the top-level gate. Do NOT put HTML in this field — for page body use `content`, for scripts/JS use `content_footer_html`, there is no dedicated 'extra HTML below the body' field — put below-body markup inside `content` itself (the body field)."New value: +"**MISLEADING NAME - NOT page footer HTML.** Misnamed relic column; BD repurposed as the **page-access gate**:\n\n- `\"\"` (default) = Public For Everyone\n\n- `\"members_only\"` = Logged-in members only (non-members hit login/signup wall)\n\n- `\"digital_products\"` = Only buyers of digital-product items\n\nFiner rules (which members, which plans) live in other fields. Do NOT put HTML here. Page body -> `content`; scripts -> `content_footer_html`. No dedicated \"below-body HTML\" field - put below-body markup inside `content` itself."
    • changedInput schema / properties / content_footer_html / description
      Previous value: -"Page-scoped **JavaScript and other scripts** — rendered just before the closing `</body>` tag. Wrap JS in `<script>` tags here (unlike `content`, this field accepts them). jQuery is already loaded globally on BD sites. Best practice: wrap custom JS in an IIFE `(function($){ /* ... */ })(jQuery);` and scope all selectors to a unique page class so JS doesn't leak to other pages. Also the right place for third-party script embeds scoped to this page only (analytics pixels, chat widgets, schema, etc.). **Not for extra body HTML** — `content` is the body. This field is strictly for script / dependency tags.\n\n**⚠️ If your `content_css` uses a `.js-ready` gate for hide-by-default effects** (scroll reveals, tab panels, accordion collapse, modal hidden, slider non-active) — the JS MUST add that class to the page wrapper as its first line: `document.querySelector('.my-page')?.classList.add('js-ready');`. This makes the hide-CSS activate only on the live site (where JS runs), not in the admin Froala editor (where `content_footer_html` does not execute), so the admin can still edit the content. See `content_css`."New value: +"Page-scoped JavaScript + script embeds - rendered before `</body>`. `<script>` tags accepted here (unlike `content`). jQuery loaded globally. Wrap JS in an IIFE `(function($){ ... })(jQuery);` and scope selectors to a unique page class. Also for third-party script embeds (analytics pixels, chat widgets, schema markup). NOT for extra body HTML - `content` is the body field.\n\n**If `content_css` uses a `.js-ready` gate for hide-by-default effects** (scroll reveals, tab panels, accordion collapse, modal hidden, slider non-active), JS MUST add that class to the page wrapper as the FIRST line (before any other init code): `document.querySelector('.my-page')?.classList.add('js-ready');`. The admin Froala editor applies CSS but does NOT run this field's JS, so without the gate, hide-rules make content permanently invisible in the editor."
    • changedInput schema / properties / content_head / description
      Previous value: -"Page-scoped `<head>` dependencies — rendered inside the `<head>` tag. Use for `<link>` tags (external stylesheets, preconnect hints, canonical overrides), `<meta>` tags beyond what the standard SEO fields cover, verification tags, structured-data `<script type=\"application/ld+json\">`, and third-party `<script>` tags that MUST load in the head (rare — prefer `content_footer_html` for most JS)."New value: +"Page-scoped `<head>` dependencies - rendered inside `<head>`. Use for: `<link>` tags (external stylesheets, preconnect hints, canonical overrides, Google Fonts), `<meta>` tags beyond standard SEO fields, verification tags, JSON-LD structured data (`<script type=\"application/ld+json\">`), head-required third-party scripts (rare - prefer `content_footer_html` for most JS)."
    • changedInput schema / properties / content_layout / description
      Previous value: -"**Full Screen Page Width** — layout flag that enables edge-to-edge sections on this page. `0` (default) = content stays inside the site's normal max-width container (the contained layout used for most static pages). `1` = full-screen width, so individual rows/sections inside `content` can break out to the browser edges (useful for full-bleed background colors, hero-style bands, or image backgrounds that need to span the viewport). **When a user wants full-bleed sections, set `content_layout=1` FIRST — do NOT fake it with negative-margin / 9999px-padding CSS tricks in `content_css` (anti-pattern: breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes).** With `content_layout=1`, give each section its own background via a scoped CSS rule in `content_css`, and wrap the readable text in a `<div class=\"container\">` or a page-scoped inner wrapper with a `max-width` so copy stays centered while the background goes edge-to-edge. Only set to `1` if the page HAS sections designed to go edge-to-edge; plain text/content pages don't need it."New value: +"**Full Screen Page Width.** `0` (default) = content stays inside BD's normal max-width container. `1` = full-screen width; individual sections in `content` can break edge-to-edge (full-bleed background bands, hero-style strips, viewport-wide images).\n\n**For full-bleed sections, set `content_layout=1` FIRST.** Do NOT fake it with negative-margin/9999px-padding tricks in `content_css` - breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes. Anti-pattern.\n\nPattern with `content_layout=1`: scoped CSS in `content_css` gives each section its own edge-to-edge background; inner `<div class=\"container\">` (or page-scoped max-width wrapper) keeps readable copy centered. Only use when the page has sections DESIGNED edge-to-edge; plain content pages don't need it."
    • changedInput schema / properties / custom_html_placement / description
      Previous value: -"Where to render the page's custom SEO content (`content` HTML) in relation to the dynamic search results, on `seo_type=profile_search_results` pages. Only meaningful for search-result static pages (and later `seo_type=data_category`) — ignored on regular `content` pages.\n  0 = Inside Tab                (content + member results render in separate nav tabs)\n  1 = Above Member Results      (within the results container; respects sidebar width)\n  2 = Below Member Results      (within the results container)\n  3 = Above Body Content        (full page container width — spans above sidebar + results)\n  4 = Below Body Content        (full page container width — below sidebar + results) ← **recommended default for AI-generated SEO pages**\nFor boilerplate SEO intro paragraphs / FAQ / local copy aimed at bolstering thin pages, `4` is the safest default because it renders full-width below the live results without disrupting the primary member-facing UX."New value: +"Render position of `content` HTML relative to dynamic search results. Only meaningful on `seo_type=profile_search_results` (and `data_category`); ignored on `content` pages.\n\n- `0` = Inside Tab (content + members in separate nav tabs)\n\n- `1` = Above Member Results (within results container, sidebar-width)\n\n- `2` = Below Member Results (within results container)\n\n- `3` = Above Body Content (full page width, spans sidebar+results)\n\n- `4` = Below Body Content (full page width, below sidebar+results) <- **recommended default for AI-generated SEO pages**\n\nFor boilerplate SEO intro/FAQ/local copy bolstering thin pages, `4` renders full-width below the live results without disrupting member-facing UX."
    • changedInput schema / properties / date_updated / description
      Previous value: -"Last-update timestamp on the page record (drives the admin-UI \"Last Update\" display). Format: `YYYYMMDDHHmmss` (14-digit, no separators — e.g. `20260214232533`). **Required on every `createWebPage` and `updateWebPage` call** — always set to the CURRENT timestamp at call time (unless backfilling historical data from a migration, in which case pass the historical value). BD does NOT auto-populate this field; if you omit it, the admin UI shows a blank/stale date."New value: +"Last-update timestamp driving admin-UI \"Last Update\" display. Format: `YYYYMMDDHHmmss` (14-digit, no separators - e.g. `20260214232533`).\n\n**Required on every `createWebPage` / `updateWebPage` call** - always set to CURRENT timestamp at call time (unless backfilling historical migration data). BD does NOT auto-populate; omitting it leaves the admin UI showing blank/stale."
    • changedInput schema / properties / enable_hero_section / description
      Previous value: -"Master switch for the page's hero banner (the full-width header section rendered ABOVE the main page content). `0` = disabled (no hero renders, regardless of other hero_* values), `1` = enabled on all devices, `2` = enabled on desktop but hidden on mobile. When `0`, all other `hero_*` / `h1_font_*` / `h2_font_*` fields are ignored at render time but their stored values are preserved — toggling back to `1` or `2` restores the previous config without having to re-enter it. Does NOT apply to the homepage (`seo_type=home`) — the homepage template ignores hero fields entirely. BD stores the values but never renders them on the homepage; skip all `hero_*` fields when updating seo_type=home."New value: +"Hero banner master switch:\n\n- `0` = disabled (all other `hero_*`/`h1_font_*`/`h2_font_*` ignored at render; stored values preserved for later toggle-back)\n\n- `1` = enabled all devices\n\n- `2` = enabled desktop, hidden mobile\n\n**Homepage benign** - `seo_type=home` ignores hero fields entirely regardless of value. BD stores but never renders on homepage; skip all `hero_*` fields on homepage updates."
    • changedInput schema / properties / facebook_desc / description
      Previous value: -"**Social Media Description (Open Graph)** — Description shown on social shares. Open Graph description"New value: +"**Social Media Description (Open Graph)** - Description shown on social shares. Open Graph description"
    • changedInput schema / properties / facebook_image / description
      Previous value: -"**Social Media Shared Image** — URL/filename of the OG image. BD recommends at least 200×200px. Open Graph image URL"New value: +"**Social Media Shared Image** - URL/filename of the OG image. BD recommends at least 200×200px. Open Graph image URL"
    • changedInput schema / properties / facebook_title / description
      Previous value: -"**Social Media Title (Open Graph)** — Title shown when the page is shared on Facebook/LinkedIn/etc. Open Graph title for social sharing"New value: +"**Social Media Title (Open Graph)** - Title shown when the page is shared on Facebook/LinkedIn/etc. Open Graph title for social sharing"
    • changedInput schema / properties / form_name / description
      Previous value: -"**SIDEBAR name** for this page — BD's field is misnamed (it controls the sidebar slot, NOT a contact form). Pass the exact sidebar `name` string. Empty string `\"\"` = no sidebar. Six **Master Default Sidebars** are always available on every site (not returned by `listSidebars` — hardcoded in BD core): `Global Website Search`, `Member Profile Page`, `Member Search Result`, `Personal Post Feed`, `Post Search Result`, `Post Single Page`. Custom sidebars are discoverable via `listSidebars` (returns only site-local customs). If a user names a sidebar that's in NEITHER list → ask them to pick from what's available; don't send an unknown name (BD renders no sidebar). When `form_name` is set, `menu_layout` controls position. **Default on create for `profile_search_results` pages:** `Member Search Result` (NOT `Member Profile Page` — that's for member profile/detail pages, not search-results pages)."New value: +"**SIDEBAR name** for this page - BD's field is misnamed; controls sidebar slot, NOT a contact form. Pass exact sidebar `name` string. `\"\"` = no sidebar.\n\n**Master Default Sidebars** (always available, NOT in `listSidebars` - hardcoded in BD core): `Global Website Search`, `Member Profile Page`, `Member Search Result`, `Personal Post Feed`, `Post Search Result`, `Post Single Page`. Custom sidebars via `listSidebars` (returns site-local only). Unknown name -> no sidebar rendered; ask user to pick from available.\n\n`menu_layout` controls position when `form_name` is set. **Default on `profile_search_results` pages:** `Member Search Result` (NOT `Member Profile Page` - that's for profile/detail pages, not search results)."
    • changedInput schema / properties / h1 / description
      Previous value: -"**H1 Heading** — Supports template tokens. Rendered as the page's main heading. H1 heading — supports template tokens"New value: +"**H1 Heading** - Supports template tokens. Rendered as the page's main heading. H1 heading - supports template tokens"
    • changedInput schema / properties / h1_font_color / description
      Previous value: -"Main title (H1) font color in the hero. RGB format ONLY — e.g. `rgb(255,255,255)`. The H1 text itself comes from the page's `h1` field — these `h1_*` fields control ONLY the hero's H1 styling."New value: +"Main title (H1) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H1 text itself comes from the page's `h1` field - these `h1_*` fields control ONLY the hero's H1 styling."
    • changedInput schema / properties / h2 / description
      Previous value: -"**H2 Heading** — Supports template tokens. H2 heading — supports template tokens"New value: +"**H2 Heading** - Supports template tokens. H2 heading - supports template tokens"
    • changedInput schema / properties / h2_font_color / description
      Previous value: -"Sub-title (H2) font color in the hero. RGB format ONLY — e.g. `rgb(255,255,255)`. The H2 text itself comes from the page's `h2` field."New value: +"Sub-title (H2) font color in the hero. RGB format ONLY - e.g. `rgb(255,255,255)`. The H2 text itself comes from the page's `h2` field."
    • changedInput schema / properties / hero_column_width / description
      Previous value: -"Width of the hero text-content column, expressed as a Bootstrap 12-col span. `3`=25%, `4`=30%, `5`=40%, `6`=50%, `7`=60%, `8`=70% (default), `9`=75%, `10`=80%, `11`=90%, `12`=100%. Narrower = more padding on the sides of the text block."New value: +"Hero text-content column width as Bootstrap 12-col span. `3`=25%, `4`=30%, `5`=40%, `6`=50%, `7`=60%, `8`=70% (default), `9`=75%, `10`=80%, `11`=90%, `12`=100%. Narrower = more side padding around the text block."
    • changedInput schema / properties / hero_content_font_color / description
      Previous value: -"Font color for the additional hero content block rendered below H1/H2 (the `hero_section_content` field). RGB format ONLY — e.g. `rgb(0,0,0)`."New value: +"Font color for the additional hero content block rendered below H1/H2 (the `hero_section_content` field). RGB format ONLY - e.g. `rgb(0,0,0)`."
    • changedInput schema / properties / hero_content_overlay_color / description
      Previous value: -"Semi-transparent color layer rendered between the hero background image and the text content, used to improve text legibility over busy images. RGB format ONLY — e.g. `rgb(0,0,0)` or `rgb(255,255,255)`. Hex (`#000000`) is NOT accepted. Combine with `hero_content_overlay_opacity` to control visibility."New value: +"Semi-transparent color layer between hero background image and text, for legibility over busy images. **RGB format ONLY** - `rgb(0,0,0)` or `rgb(255,255,255)`. Hex (`#000000`) NOT accepted. Combine with `hero_content_overlay_opacity` to control strength."
    • changedInput schema / properties / hero_content_overlay_opacity / description
      Previous value: -"Opacity of the `hero_content_overlay_color` layer, in 0.1 increments from `0.0` (fully transparent / invisible) to `1` (fully opaque). Admin UI labels these as 0–10 (10 = fully opaque). Default in admin-UI creation is `0.4`. **EAV-STORED FIELD (one of the 18 list_seo fields stored in `users_meta`, not as a direct column):** `createWebPage` seeds this correctly, but `updateWebPage` silently ignores it. To update on an existing page, call `updateUserMeta` (or `createUserMeta` if no row exists yet) with `database=list_seo`, `database_id=<seo_id>`, `key=hero_content_overlay_opacity`, `value=<new value>`, then `refreshSiteCache` to re-render. Every `updateUserMeta`/`deleteUserMeta` call must also carry `database` + `database_id` (the atomic compound identity rule — see `listUserMeta`)."New value: +"Opacity of `hero_content_overlay_color` layer, 0.1 increments from `0.0` (transparent) to `1` (opaque). Admin UI labels 0-10. Default `0.4`.\n\n**EAV-STORED** (one of 18 `list_seo` fields stored in `users_meta`, not a direct column) - `createWebPage` writes correctly, but `updateWebPage` silently drops. On updates, write via `updateUserMeta`/`createUserMeta` with `database=list_seo`, `database_id=<seo_id>`, `key=hero_content_overlay_opacity`, then `refreshSiteCache`. Per top-level users_meta compound-identity rule, all meta calls require `database` + `database_id` together."
    • changedInput schema / properties / hero_image / description
      Previous value: -"Hero background image. Accepts either a BD-hosted relative path (e.g. `/images/bg202.webp`, produced when uploaded via the BD admin file picker) OR an external URL (e.g. `https://cdn.example.com/banner.jpg`) — external URLs are supported natively, no `auto_image_import` needed for web pages. Recommended dimensions: 1800 × 600 px."New value: +"Hero background image. Accepts BD-hosted relative path (`/images/bg202.webp`) OR external URL (`https://cdn.example.com/banner.jpg`) - external URLs work natively on WebPages, no `auto_image_import` needed. Recommended dimensions: 1800 × 600 px."
    • changedInput schema / properties / hero_link_color / description
      Previous value: -"CTA button color variant. Maps to Bootstrap button classes: `primary` (default theme color), `info` (blue), `success` (green), `warning` (yellow), `danger` (red), `default` (neutral gray), `secondary` (theme secondary). Colors render per the site's theme palette, not literal colors."New value: +"CTA button color variant. Maps to Bootstrap button classes, rendered per the site's theme palette (not literal colors):\n\n- `primary` (default theme color)\n\n- `info` (blue)\n\n- `success` (green)\n\n- `warning` (yellow)\n\n- `danger` (red)\n\n- `default` (neutral gray)\n\n- `secondary` (theme secondary)"
    • changedInput schema / properties / hero_link_text / description
      Previous value: -"Hero CTA button label. Required (non-empty) for the button to render — `hero_link_url` alone without text will not produce a button."New value: +"Hero CTA button label. Required (non-empty) for the button to render - `hero_link_url` alone without text will not produce a button."
    • changedInput schema / properties / hero_section_content / description
      Previous value: -"Additional text/HTML/widget shortcode rendered BELOW the H1 and H2 in the hero section. Pass raw HTML — do NOT wrap in `<![CDATA[...]]>`, do NOT escape as `&lt;` / `&gt;`, and do NOT include tool-call scaffolding tags (e.g. `<parameter name=\"...\">...</parameter>`, `<invoke>`, `<function_calls>`). BD stores the field value verbatim; any wrapper / escape / scaffolding renders as literal visible text."New value: +"Additional text / HTML / widget shortcode rendered BELOW H1 and H2 in the hero section. Supports `[widget=Name]` shortcodes.\n\n**EAV-stored** - `createWebPage` seeds correctly, `updateWebPage` silently drops. On update, write via `updateUserMeta` with `database=list_seo`."
    • changedInput schema / properties / hide_footer / description
      Previous value: -"**Hide Footer** — 1 = hides the site footer on this page."New value: +"**Hide Footer** - 1 = hides the site footer on this page."
    • changedInput schema / properties / hide_header / description
      Previous value: -"**Hide Header** — 1 = hides the full site header on this page."New value: +"**Hide Header** - 1 = hides the full site header on this page."
    • changedInput schema / properties / hide_header_links / description
      Previous value: -"**Hide Main Menu** — 1 = hides the main navigation menu on this page."New value: +"**Hide Main Menu** - 1 = hides the main navigation menu on this page."
    • changedInput schema / properties / hide_top_right / description
      Previous value: -"**Hide Top Header Menu** — 1 = hides the top-right nav cluster (account/login links)."New value: +"**Hide Top Header Menu** - 1 = hides the top-right nav cluster (account/login links)."
    • changedInput schema / properties / menu_layout / description
      Previous value: -"Sidebar position and width (integer). Only has an effect when the page has a sidebar configured via `form_name` — ignored on pages without a sidebar.\n  1 = Left Wide    (sidebar on the left, wide column) — BD default when unspecified\n  2 = Right Wide   (sidebar on the right, wide column)\n  3 = Left Slim    (sidebar on the left, narrow column)\n  4 = Right Slim   (sidebar on the right, narrow column)\nNote the ordering is NOT sequential by side — left positions are 1 and 3, right positions are 2 and 4. Despite the field name, this is the SIDEBAR position setting, not a navigation menu layout.\n**Default on create for `profile_search_results` pages:** `3` (Left Slim). For regular `content` pages, omit unless user specifies — BD defaults to 1 (Left Wide)."New value: +"Sidebar position + width (integer). Only effective when the page has a sidebar set via `form_name` - ignored without sidebar. NOT a navigation menu layout despite the field name.\n\n- `1` = Left Wide (BD default when unspecified)\n\n- `2` = Right Wide\n\n- `3` = Left Slim\n\n- `4` = Right Slim\n\nOrdering is NOT sequential by side - left positions are `1` and `3`, right are `2` and `4`.\n\n**Default on `profile_search_results` pages:** `3` (Left Slim). On `content` pages, omit unless user specifies (BD defaults to `1`)."
    • changedInput schema / properties / meta_desc / description
      Previous value: -"**Meta Description** — Supports template tokens. ~150-160 chars recommended for search snippets. Meta description — supports template tokens"New value: +"**Meta Description** - Supports template tokens. ~150-160 chars recommended for search snippets. Meta description - supports template tokens"
    • changedInput schema / properties / meta_keywords / description
      Previous value: -"**Meta Keywords** — Supports template tokens (comma-separated). Meta keywords — supports template tokens"New value: +"**Meta Keywords** - Supports template tokens (comma-separated). Meta keywords - supports template tokens"
    • changedInput schema / properties / seo_text / description
      Previous value: -"**Wildcard URL Rewrite** — 1 = any URL within this directory routes to this web page (catch-all behavior). Pass raw HTML — do NOT wrap in `<![CDATA[...]]>`, do NOT escape as `&lt;` / `&gt;`, and do NOT include tool-call scaffolding tags (e.g. `<parameter name=\"...\">...</parameter>`, `<invoke>`, `<function_calls>`). BD stores the field value verbatim; any wrapper / escape / scaffolding renders as literal visible text."New value: +"**Wildcard URL Rewrite.** `1` = any URL within this directory routes to this web page (catch-all behavior). Misnamed field - NOT SEO copy; SEO copy goes in `content` + meta fields."
    • changedInput schema / properties / seo_type / description
      Previous value: -"Page type identifier. These are the values BD customers can choose from in admin:\n  content                  = Single Web Page (USE THIS for custom/landing/static pages — it is the default)\n  data_category            = Post Search Results\n  profile_search_results   = Member Search Results\n  custom_widget_page       = Custom Widget as Web Page\n  password_retrieval_page  = Password Retrieval Page\n  unsubscribed             = Unsubscribed Page\nWhen a user asks for a \"landing page\", \"static page\", \"about page\", \"contact page\", or any generic custom page, always use \"content\".\nNote: the underlying BD system has additional internal seo_type values (home, profile, payment, etc.) that are system-seeded and should NOT be created via API — customers never have a reason to call createPage with those."New value: +"Page type identifier. User-selectable values:\n\n- `content` = Single Web Page (USE for custom/landing/static/about/contact - the default)\n\n- `data_category` = Post Search Results\n\n- `profile_search_results` = Member Search Results\n\n- `custom_widget_page` = Custom Widget as Web Page\n\n- `password_retrieval_page` = Password Retrieval Page\n\n- `unsubscribed` = Unsubscribed Page\n\nFor \"landing page\", \"static page\", \"about page\", \"contact page\", any generic custom page -> always `content`.\n\nBD has additional internal values (`home`, `profile`, `payment`, etc.) that are system-seeded - do NOT create via API."
    • changedInput schema / properties / show_form / description
      Previous value: -"**Apply NoIndex, NoFollow** — 1 = adds `<meta name=\"robots\" content=\"noindex,nofollow\">` to the page. Auto-applied to protected pages. NOT a contact-form toggle (despite the field name — BD repurposed this column)."New value: +"**Apply NoIndex,NoFollow.** `1` = adds `<meta name=\"robots\" content=\"noindex,nofollow\">` to the page. Auto-applied to protected pages. **NOT a contact-form toggle** despite the field name - BD repurposed this column."
    • changedInput schema / properties / title / description
      Previous value: -"**Page Meta Title** — Supports template tokens: `%%%website_name%%%`, `%industry%`, `%profession%`, etc. ~30-60 chars recommended. HTML title tag — supports template tokens like %%%website_name%%%"New value: +"**Page Meta Title** - Supports template tokens: `%%%website_name%%%`, `%industry%`, `%profession%`, etc. ~30-60 chars recommended. HTML title tag - supports template tokens like %%%website_name%%%"
    • changedInput schema / properties / updated_by / description
      Previous value: -"Label shown in admin-UI \"Updated By\" column on the page record. Free-form string (e.g. `\"API\"`, `\"AI Agent\"`, an admin username). Recommended on create/update for audit traceability so admins can tell which edits came from the API vs. the UI."New value: +"Admin-UI \"Updated By\" column label. Free-form string (e.g. `\"API\"`, `\"AI Agent\"`, admin username). Recommended on create/update for audit traceability - tells admins which edits came from API vs. UI."
  12. Changed1 schema field changedv6.0.8
    • changedInput schema / properties / content_layout / description
      Previous value: -"**Full Screen Page Width** — layout flag that enables edge-to-edge sections on this page. `0` (default) = content stays inside the site's normal max-width container (the contained layout used for most static pages). `1` = full-screen width, so individual rows/sections inside `content` can break out to the browser edges (useful for full-bleed background colors, hero-style bands, or image backgrounds that need to span the viewport). Only set to `1` if the page's HTML has sections designed to go edge-to-edge; plain text/content pages don't need it."New value: +"**Full Screen Page Width** — layout flag that enables edge-to-edge sections on this page. `0` (default) = content stays inside the site's normal max-width container (the contained layout used for most static pages). `1` = full-screen width, so individual rows/sections inside `content` can break out to the browser edges (useful for full-bleed background colors, hero-style bands, or image backgrounds that need to span the viewport). **When a user wants full-bleed sections, set `content_layout=1` FIRST — do NOT fake it with negative-margin / 9999px-padding CSS tricks in `content_css` (anti-pattern: breaks horizontal scroll, fights `overflow: hidden` parents, prevents future layout changes).** With `content_layout=1`, give each section its own background via a scoped CSS rule in `content_css`, and wrap the readable text in a `<div class=\"container\">` or a page-scoped inner wrapper with a `max-width` so copy stays centered while the background goes edge-to-edge. Only set to `1` if the page HAS sections designed to go edge-to-edge; plain text/content pages don't need it."
  13. Addedv6.0.7
  14. Removed
  15. Addedv6.0.6

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no behavioral hints (readOnlyHint=false, destructiveHint=false, etc.), so the description carries full burden. It fully discloses: writes live data, automatic cache refresh, thin-content warnings, asset field routing, hidden behaviors (e.g., breadcrumb auto-generation, hero readability autofill). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While the description is very long, it is well-structured with sections, bullet points, and bold headings. It front-loads a summary. Given the tool's complexity (62 parameters, many edge cases), the length is justified. However, it could be slightly more concise without losing essential details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all aspects: creation workflow, field dependencies, error handling (auto_cache_refreshed), return value structure, and integration with other tools. Even without an output schema, the description fully explains response fields. Addresses edge cases like filename uniqueness, EAV routing, and thin-content warnings. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds extensive context beyond the schema. For example, explains the actual meaning of misnamed fields like content_footer and form_name, details hero section parameter interactions, and provides enum value semantics. This extra context is crucial for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Create a page - Create a `list_seo` page record. Writes live data.' The verb 'create' and resource 'list_seo page record' are precise. Distinguishes from siblings like updateWebPage, listWebPages, and deleteWebPage by mentioning them and their use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and when-not-to-use guidance. For example, when filename exists, recommends updateWebPage instead. Details workflows for profile_search_results pages, when to use createRedirect, and when to omit certain fields. Also explains when to use different seo_types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/brilliantdirectories/brilliant-directories-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server