CMS-first rule

Public marketing pages must be created and remain editable in the CMS page builder. Use theme files for reusable rendering and design-system behavior—not for hardcoded page copy, menus, images, or one-off page structure.

Shipped v1 pages

  • Home: connected billing automation and the complete operating story.
  • Platform: customer, service, billing, payment, automation, and reporting architecture.
  • Solutions: outcome-focused journeys for teams and customers.
  • Company: WBAMS purpose, principles, approach, and contact path.

Supported sections

Twenty-six section types, grouped in the section library as Hero, Commerce, Content and Media. Each is described, with its fields, in Page builder sections. Banner does everything Slider does and more; Slider stays supported for pages that already use it.

Publishing

A page is draft, scheduled or published, chosen from the Status control in the builder header. Saving does not publish: a draft can be built and saved as often as needed and stays invisible to visitors, though an administrator can preview it. A scheduled page carries a date and time and goes live on its own within a minute of it — the check runs on ordinary client-area traffic, so no cron job is needed for it. Only a published page is served, listed in the sitemap or reachable by its address.

Every save stores a revision: the page and all of its settings as one document. Revisions in the builder lists the last twenty with who saved them and when, and Restore puts one back exactly as it was. The restore is itself a save, so it can be undone the same way.

Saved blocks and page templates

The bookmark on any section saves it under a name. Saved blocks appear in the section library under the Saved filter and are inserted as a copy, so a block is a starting point rather than a live link: editing the saved block changes what the next insertion starts from, not the pages already carrying it. Remove a saved block from the library with its own remove control; the pages that used it are unaffected.

Any page can be marked as a Page Template in its settings. Template pages are not served and are not in the sitemap; they exist to be copied. The Page Manager's Add New button lists them, and a page created from a template starts with the template's sections, language and settings under a new title and slug.

Search and sharing

Each page's SEO panel holds its meta title and description, a canonical address, the Open Graph title, description and image and the Twitter card type used when a link to the page is shared, and its sitemap entry — excluded, or with a priority and change frequency. Leave the canonical empty unless the page has a preferred address elsewhere; none is written for a page that has not been given one.

SEO Tools in the Content Manager holds the site-wide values: verification codes for Google, Bing, Yandex and Baidu, the Facebook app id, a global JSON-LD schema block, and the sitemap wizard. sitemap.xml lists every published page that is not excluded and every visible product group; robots.txt is answered by the product as well. A static robots.txt in the site root is served by the web server ahead of it, which is fine.

Page workflow

  1. Create a page and define its language, URL, title, and search metadata.
  2. Add sections in narrative order: promise, proof, workflow, detail, FAQ, and action.
  3. Choose assets from the media library and write accurate alternative text.
  4. Use the page's Custom CSS and Custom JavaScript panels for scoped enhancement.
  5. Preview desktop, tablet, mobile, light mode, and dark mode.
  6. Save as a draft while the page is being built, then set it to Published (or schedule it), test the public URL, and verify menu and sitemap placement.

Friendly Page URLs

When Friendly Page URLs is enabled, WBAMS publishes extensionless root and nested CMS paths while preserving each stored .php URL as a compatible route. An extensionless path first gives a declared add-on the opportunity to claim it. If no add-on claims the validated path, WBAMS forwards it to the CMS with a server-only marker; the CMS resolves that marker only while Friendly Page URLs remains enabled.

This boundary prevents a clean-looking unknown path from becoming a homepage or an accidental CMS route. Claimed add-on routes retain priority, native Updates and Knowledgebase routes retain their own loaders, Contact remains connected to contact.php, and an unknown route—or a clean CMS route while Friendly Page URLs is disabled—must remain 404.

Routing regression matrix

Test /about-operation-siam and its trailing-slash form; /legal/privacy-policy and /legal/terms-of-use with and without trailing slashes; every stored .php equivalent; native /updates… and /knowledgebase… paths; /contact; one claimed add-on route; one unknown route; and one clean CMS route after Friendly Page URLs is disabled.

Page and mega-menu setting integrity

CMS page-builder, menu, and mega-menu properties use one setting row for each (relid, setting) pair. WBAMS writes these values with an atomic upsert, and the database enforces that relationship with named unique indexes on cms_page_settings and cms_mega_menu_settings. The separate cms_menus table is a legacy store and may correctly be empty; current header and footer entries are page records with menu page types.

The WBAMS 1.1.1 updater repairs older data before adding the constraints. For each duplicate pair it keeps the highest-ID row and therefore its latest stored value, removes older rows, and then adds the exact unique key if an equivalent one is not already present. The migration is repeatable and conditionally skips a table that is absent.

Back up before cleanup

The duplicate collapse is intentional and not reversible without a database backup. After updating, verify that page, header, footer, and mega-menu counts reflect real records; confirm both unique indexes; edit and save representative items twice; and verify that each setting still has exactly one row.

Custom code

Scope styles beneath a page-specific class. Write progressive JavaScript that leaves content usable when scripts fail. Avoid inline secrets, remote code, global selectors, and behavior that changes billing or authentication.

.wbams-page-platform .capability-card {
  container-type: inline-size;
}

document.querySelectorAll('.wbams-page-platform [data-reveal]')
  .forEach((element) => observer.observe(element));
Synchronization

Serepok reads CMS settings for logos, menus, footer content, theme mode, contact information, payment icons, and public-page presentation. Change these through CMS settings so every page stays consistent.