v1.6.0 [11/09/2026]
- Added
a publishing workflow for pages:
draft,scheduledandpublished, with a scheduled page going live at its time on its own. Saving no longer means publishing. See Publishing. - Added
a revision on every save, with the last twenty listed in the builder and a one-click restore.
- Added
saved blocks — any section bookmarked under a name and inserted into other pages as a copy — and page templates, so a new page can start from an existing one. The Page Manager's Add New button lists the templates.
- Added
SEO and social sharing: per-page meta, canonical, Open Graph and Twitter card fields, sitemap control per page, site-wide verification codes and a schema block, and a real
sitemap.xmlandrobots.txt— both addresses previously returned the site's own HTML page. - Added
six section types: Call to Action, Logo Wall, Timeline, Comparison Table, Video and Newsletter Signup. See Page builder sections.
- Added
a Section design panel on every section - width, heading alignment, text tone, entrance animation, background image with overlay, shaped edges, anchor, custom class and per-device visibility - and new options in the sections: FAQ columns and a filter box, testimonial grid / wall / spotlight layouts, a logo marquee, a horizontal timeline with numbered markers, list and lead-story layouts for Updates, fine print on the call to action, a split newsletter layout with a privacy line, a Block Header subtitle, a video caption, a reading width for text, and thumbnail shapes for the image gallery. The toolbox previews were regenerated from the sections as they render today.
- Updated
all twenty existing section types with a Draisap treatment, checked in light and dark mode and at phone width. The section library uses one name per section and shows a real preview of each.
- Fixed
the Products and Product List One sections rendering nothing on any page, prices printing as
$9.00 USD USD, stat counters stopping at0., testimonial stars drawn at the wrong end, and the FAQ accordion's dead space under closed answers. - Fixed
the parent theme, which was compiled against a variables sheet that never shipped: headings at body size, containers without a gutter, and two half-width columns wrapping onto separate lines.
serepok-variables.csssupplies the tokens. - Fixed
one failing page script silencing every carousel below it: team photos stacked at full width, testimonials hidden, a featured list over its illustration. Section scripts now run one by one, and a failure is reported in the browser console.
- Updated
the Updates section to news cards with the update's preview image, date, title, excerpt and a read-more link; the Draisap testimonial card to lead with the quote; the Draisap Updates list to the same news cards; the Draisap Updates page to a newsroom with a lead story and cover cards, and its update article to five treatments chosen by the presentation template, with reading time, a table of contents, share links and a "more updates" strip; the Draisap knowledgebase to a help centre with category tiles, article cards, an automatic table of contents and reading time on articles; and the parent theme's partner-logo band, which never showed, to a static logo row. A fresh installation now ships four updates about WBAMS in four templates instead of one welcome note, and a knowledgebase of five categories and thirteen client-area articles across all five templates.
- Fixed
the Content Manager's editor in dark mode — rich-text toolbars, item grids and the import dialog's buttons — and the Draisap theme toggle leaving the page dark-on-white when switching back to light.
- Fixed
the section editors and their item dialogs, one by one: item tables drawn twice with a scrollbar strip, rows that showed nothing (product sections) or only a name (features, logos, team, galleries now show icon, logo, photo or thumbnail with the title), pill groups that ignored the item being edited, a delete button that also opened the add dialog, browser alerts and SweetAlert boxes in place of the themed dialogs, switches labelled with a full sentence, and option lists named "Type 1/2/3". Opening a section or an item no longer marks the page unsaved. The builder's dialogs (section library, template library, export, save block, delete) share one compact header - the old one had 150px of dead space either side - and the template library's fourteen previews are regenerated from the pages as they render today. The media library behind every image field showed broken thumbnails (its addresses assumed the manager still sat one folder below the root) and its close button slid under the pointer; both are fixed, and the Preview link opens the page rather than the admin dashboard.
- Fixed
saving a page moving it to
slug.php: the home page, stored atindex.php, becamehome-page.phpafter any edit and the site root turned blank. A page keeps its address while its slug and folder stay the same, seeded pages keep their seeded address, and the root falls back to the page whose slug ishome-page. Also in the builder: the settings column flows with the page instead of scrolling inside a fixed box; short fields flow like text (a pill group keeps its options on one line and takes the width it needs, inputs share what is left) in the editors, the Section design panel and item dialogs; the rich text editor's dialogs, colour palette, code view and full screen are themed and work (the dialogs were white boxes in dark mode, the palette had no swatches, code view was a narrow box, full screen was trapped inside the section); the Illustrations tab of the media library shows its previews on an install in a sub-folder; and a YouTube background field has its badge before the URL with the ends rounded correctly. - Fixed
Draisap and Serepok: a section's shaped edge (wave, slant, curve) was painted in the canvas colour over the section, showing as a white block on a tinted canvas; it is now cut out of the section itself. The horizontal timeline was a fixed-width strip with a scrollbar on desktop; from 768px the steps share the row.
- Updated
a fresh install ships four pages - Home, About Us, and under a Legal category Privacy Policy and Terms of Use (complete, editable policies for a billing site) - with About Us in the main menu and a Legal column in the footer, instead of twelve product-page samples. Links to a "System Status" page that never existed are gone.
- Fixed
Draisap now carries every CMS feature it was missing: the illustration palette (illustrations painted grey), full-bleed section background pictures with the dark overlay, and motion - section entrances, banner-shape and illustration animations were switched off in both themes by an unconditional block; they follow the effects setting now. A page opened with
?systpl=themekeeps that theme for the browser session; an administrator now sees a bar saying so, with a link back. "Order-forms" no longer appears in the System Theme list. - Fixed
illustrations in Draisap: inlined SVGs (logo tiles, feature icons, library items) were blank because their pop-in was never started, and the promotion illustration's floating coins only moved in Serepok. The draw, pop-in, loop and fade-in effects live once in the shared illustration stylesheet and run in both themes whenever effects are on. Styles a theme had copied from the shared front-end stylesheets were removed so the copies stop fighting the originals: Serepok's banner-sides variables, banner-shape rules, two dead banner-compatibility blocks, a legacy
.banner-homeblock with global animation rules, and the whole unreferencedcore/extensionsfolder; the Section design rules both themes carried verbatim are in the sharedsections.csson theme-neutral tokens. Draisap's footer keeps its five menu groups on one row. - Fixed
Theme Settings > Colors: the Blue preset previewed and saved as Default (a leftover from when Blue was the default palette); Blue is its own preset, and the preset cards sit three to a row.
- Updated
every switch in the Content Manager to the product's one 44×24 slide control — the settings pages, the menu editors and all thirty section editors drew their own, so they differed page to page. The Contact page's two layout previews are real captures of the Serepok Contact Us page, an administrator can preview either layout with
contact.php?contactlayout=0or=1without saving, the logo and favicon previews on Branding load again on a sub-folder install, and the phone field's country list is no longer cut off by its card. - Fixed
Content Manager settings: the promotion colours have their picker back, the phone field shows its country flag, toggle rows carry their help underneath the 44×24 switch, the Custom Website Fonts pane is inset like the rows around it, the active item of a settings drop-down no longer paints a dark icon on the dark tint, and the selected mark on Header Settings choice cards sits in the corner instead of over the text.
- Fixed
the language name missing beside the flag (Serepok header) and the globe (Draisap footer and pre-header, sign-in pages, the language chooser): the templates read the locale's name under its old spelling after the engine moved to US English.
- Fixed
a section button's custom URL written into the page as typed, so
contact.phpon a page inside a category (Privacy Policy under Legal) pointed atlegal/contact.php. Every section resolves custom links the same way now: absolute addresses, root paths, anchors and query strings pass through, a site path is resolved against the site root from any page. - Fixed
card hover states chopped at the edge of any section that can run as a slider (Features, Stats, Gallery, Products, Banner): the slider markup clipped its viewport even as a static grid. A static grid clips nothing; a running slider clips left and right only. Draisap's Updates article column is centred in its card instead of leaving a blank third on the right, and the theme's own repeated rules (fifteen utility copies, a white-only
.btn-light, twice-defined footer grid, switch row and note, superseded first drafts) were folded into one definition each. - Fixed
the order form under Serepok: the store, product and cart pages are one order form shared by both themes, but it drew with Draisap-only tokens and component classes, so under Serepok cards had no surface, stock pills hid behind a decorative square and empty image tiles were a solid block of colour. The form now carries its own component rules and maps its tokens onto whichever theme hosts it, light and dark; Serepok's 373 leftover rules for the retired order form are gone, and product images saved before the media library moved are back.
- Updated
Theme Settings > Order Forms: the dead single-step options are gone, Hide Header and Hide Footer are the two chrome switches, Wide Cards lays every product out as a full-width card (it did nothing before), and the previews are fresh captures of the store page.
- Fixed
one Font Awesome: a second, Free 5.15 stylesheet with its own copy of the font files was injected beside the Font Awesome 6 Pro set the install ships; the duplicate and an unused icon-picker plugin are removed. The Content Manager Icon Picker offered 156 icons from a stale list; it offers every icon in the font now — 4,161 in four styles plus 495 brands — searchable by name and alias, and the selected tile no longer clips its check mark.
- Fixed
a store with no visible product group returning a 500 instead of its own "nothing here yet" message — the page counted a variable the error path never sets. The same unguarded count is fixed in the wishlist, updates and knowledgebase search.
- Fixed
the Administrator Roles editor redirecting to the dashboard whenever a role was opened or saved, which made every role's permissions unreachable. A directory guard in
extensions/widgets/was being included and executed as a widget. - Added
management levels. WBAMS manages people at more than one level — a client pays you, a member belongs to you, a staff member is paid by you — and the levels coexist rather than renaming each other. Setup › Management Levels turns on the levels your organisation has and sets what you call them, with presets for company, agency, church, non-profit, association and freelancer. One person can hold several levels without holding several logins.
- Added
the Members level: a searchable roll with statuses, membership numbers, and membership types under Setup that carry the dues and the cycle. Members need no login — most never sign in to anything — and a free type never produces an invoice.
- Added
the Staff level: a register holding the employment record — job title, department, employment type, start and leaving dates, pay rate and basis, tax region and tax code. Departments are typed and suggested rather than maintained as a list, a leaver is marked Former so pay history survives them, and staff need no login either. The record comes first on purpose: time and attendance, pay runs, payslips and the tax tables (versioned per region and per tax year) all read from it.
- Added
a mega menu for Draisap. The Content Manager's Mega Menu Builder could be switched on and the theme had nothing to draw with it. Columns headed by their own item, link cards, banners, subtitles, custom HTML and
col-*widths all render; a short menu is a pane under its trigger and a multi-column one spans the header; the phone drawer reaches all three levels; and "Open menu on hover" is honoured. Switching the mega menu on no longer empties the navigation — with nothing built in the builder yet, the mega menu draws the site's own menu. - Added
product comparison. A toggle on every store card and product page builds a shortlist of up to four, a tray shows it, and
/store/comparelines the products up in a table — price, availability, rating, type, category, then every fact, option and plan feature any of them carries — with a "only show differences" switch and a first column that stays put while the rest scroll. The shortlist is in the address, so a comparison can be bookmarked or shared. - Fixed
order-form errors now mark the field they came from in red and scroll to it; catalogue pages start their breadcrumb at the store instead of inheriting the cart's; "Ask about this product" opens a support request whenever the ticket system is running; the category tree on Configure opens only the product's own category; and modal close buttons in the Content Manager draw their cross instead of typing it, so it sits at the button's exact centre.
- Updated
the store draws with one stylesheet: the legacy
all.cssis deleted and the order form is written in the theme's own vocabulary. View cart, Configure product, Payment details and Quick view are rebuilt around it — cart rows with a thumbnail and a live quantity stepper, option cards, labelled card fields with the gateway and saved cards as choice rows, and a quick view whose gallery stays put while the details scroll. - Added
a catalogue sidebar with a category tree (product type › category, with counts) and a filter panel: search, a two-handle price range, in-stock only, brand and product-option facets with counts, and sorting by featured, price, name or rating.
- Added
wishlists and customer reviews. A heart saves a product to the account (or the browser, for guests) and the wishlist is a page under Store. Clients rate and review products on the product page; the average shows on store cards, and reviews are moderated under Orders › Product Reviews with approve, reject, reply and a verified-purchase badge.
- Updated
Store product page rebuilt: breadcrumb, gallery, a buy column with badges, price, a short teaser, variant chips, a quantity stepper, Add to cart, Buy now, Save for later, Share, Ask about this product and a trust strip; tabs for Overview, Details, More information and Shipping & returns; Frequently bought together and related products as store cards, a Recently viewed strip and a sticky buy bar. Store cards show a three-line teaser.
- Updated
Dashboard and Analytics rebuilt: a live traffic chart (views and unique visitors, hover tooltip, Day / Week / Month / Year / All time periods with totals and change against the previous period), an environment band, a totals band, ranked breakdown cards with share bars, top URLs, source checks and quick actions — one card language instead of cards inside cards. The URL report's tabs are plain pills.
- Updated
three languages: WBAMS ships English, Spanish and Swedish; the other locale files and vendor language packs are removed, and one language list (built from the files in
locales/) feeds the Content Manager, the front end and the page loader. 66 client-area strings Serepok printed in English are locale keys in all three languages. - Fixed
Login Page "Default" is a centred sign-in card in both themes with fresh previews; the legacy "MTD News" slider option and its code are gone. The cookie banner shows again after its text changes (the dismissal cookie is named per banner).
- Fixed
Content Manager switches: the knob was thrown out of its track and drawn invisible in dark mode on every page using the legacy
.switchmarkup. SEO Tools: the Sitemap Wizard layout, flat settings rows, the Schema switch row and a hidden search dropdown. The admin decorator leaves Content Manager forms, controls, icon tiles and kit tables alone, and every dropdown pane carries its caret. - Fixed
Support ticket view (note Edit button, "View All Services" placement, gap under notes, the Create New Project dialog behind the backdrop), Calendar (misaligned switches, segmented navigation pills), Order view (items table padding), PHP Info (short cookie values redacted across the report), and the header's "Staff online" menu.
- Fixed
Client Area > Portal Layout: the Client table preview was a live table drawn on top of its own preview chrome.
- Updated
the Help Center into two systems with their own templates: eleven newsroom templates for Updates and thirteen resource templates for the Knowledgebase, each with its own content blocks and styles. The editors are template-first — choosing a template fills the editor with its structure and restyles the canvas to match. Existing content is mapped to the nearest template of its system during the upgrade. See Two systems, two sets of templates.
- Added
seven newsroom updates and twenty-one resource articles to a fresh installation, one or more per template, so a new site shows what both sections can look like.
- Fixed
captioned screenshots losing their caption on the client side (the sanitizer knew no HTML5 structural elements), and the control panel's editor fetching a stylesheet from
tinymce.comon every load. - Security
the client area's CSRF token is no longer injected into a form that posts to another site, so the Newsletter section does not hand it to a list provider.
- Added
Membership Policy: one page for how a membership runs, instead of the same decisions typed onto every record. Number format and what a new record starts as; whether dues are raised automatically and how early; whether a membership lapses when its dues go unpaid and after how long a grace period; and what a member may do for themselves in the portal. Only an unpaid dues invoice ever lapses a membership, and only a membership the rule lapsed comes back on its own when the dues are settled. See Membership Policy.
- Added
Employer Policy: the working week, the leave year and how much time off everybody gets, the leave types this employer offers, the days the company is closed, how often people are paid and what a payslip carries, and what staff may do for themselves. An employment record only says where somebody differs from it.
- Added
payroll: pay runs that work out what everyone is owed for one period and freeze on approval, payslips that keep their own copy of every figure so an old one reprints unchanged, timesheets whose approved hours a run collects and locks, time off with a balance worked out from the decisions rather than typed on a record, pay items for the allowances and deductions an employer offers, and tax tables held per country, per region and per tax year. Nothing is supplied with the product: an employer that offers no allowances has none, and a country with no table in force is not taxed rather than taxed at a guess. See Payroll and time.
- Added
mailboxes for members and staff. An allowance per level in Webmail settings, overridable one person at a time, and an Email page in their own area for the people whose level is ticked under Who can use it. The mailbox manager creates an address for any of the four kinds of owner — the organization itself, a client, a member or a staff member — and the organization's own addresses are labelled as such rather than as “Staff”, which read as an employee's address beside a Staff management level. See Who can hold a mailbox.
- Added
an address created without being asked for. Switched on, a record created at signup, in the admin area or through the API is offered an address on your mail domain at
firstname.lastname, created on a temporary password that travels in the welcome message and nowhere else. The person is asked first: declining creates nothing and leaves no trace of email anywhere they can see, and an administrator can offer again later. It can never fail a signup. See Giving somebody an address without being asked. - Added
email templates for members and staff, so a saved message written for a membership is not offered on a client and a client template full of client placeholders is not sent to an employee. Member and staff records have the same compose screen a client record has, with the merge fields that make sense at that level.
- Fixed
the context help link disappearing from every page the workspace shell is on: the legacy header that carried it is hidden, and the link was hidden with it. It sits in the page hero now, on every admin page that has one. Forty-seven pages that had no help link have one, and the payroll, timesheet, time-off, pay-item, tax-table, membership-type and product-review links point at sections that exist.
- Fixed
the membership dues and standing sweeps running on every per-client invoice generation, including the one the customer's own portal triggers. Dues are scoped to the client being invoiced, skipped when the pass names specific items, and standing is reviewed only on the nightly whole run.
- Added
install options. Setup now asks what kind of organization this is on Shape your workspace, a step of its own before the database details, and installs only what was chosen: which management levels exist, whether the Donations module exists, and whether the site opens with example content or with nothing but its homepage. Declining something creates none of its tables — not empty ones, and not a feature switched off in a menu. Six industry presets tick the switches for you and then get out of the way.
- Added
modules as a concept, with Donations as the first. They sit under Setup › Management Levels beside the levels, because the shape of an installation belongs in one place. Switching a module off hides the way in and keeps every record behind it; an installation that predates the setting reads as having everything, so no upgrade ever hides a module somebody is using.
- Updated
the installer, rebuilt on the admin area's own design language — the same tokens, cards, 44×24 switches and choice cards — with light and dark mode, and six steps in place of five. It carries its own stylesheet, because setup runs before there is a database or a theme to read one from.
- Fixed
the encryption hash that protects stored card data being generated with
rand(), which is seeded from the clock: two installations set up in the same second could be handed the same one. It comes from a cryptographic source now. Also in setup: the step rail was drawn before validation could send a step back, so a rejected form appeared under a heading saying that step was finished. - Fixed
six administrator permissions shipping with no name on the Administrator Roles page — Configure Payroll Tax Tables, Manage Payroll Runs, Manage Timesheets, Configure Employer Policy, Manage Time Off and Configure Membership Policy would have drawn six unlabelled switches among a hundred and sixty. Configure Membership Policy was also sitting under Other rather than under Members.
- Updated
the member and staff tables are no longer created by the migration. They belong to levels an installation can decline, and each level's own
ensureTable()already built a fuller table than the migration did, so that is now the one definition of their shape. Every migration from here on treats those tables as optional. - Updated
the database:
resources/sql/upgrade160.sqladds eight tables — page revisions and saved blocks, wishlists and product reviews, the three people tables behind notes, files and the change log, and webmail grants — plus four columns oncms_pages, three onwebmail_mailboxes, and an index. It changes nothing that exists and is safe to re-run. The payroll, time-off and offer tables are created on first use rather than by the migration, so no step is needed for them. Back up before upgrading, as with any release that changes schema.