# WBMCZ — deploy notes · 06 Sep 2026 (fourth pass)
## User Management is the six lists; notifications are a bell

Two files. No database change.

    admin/includes/sidebar.php   the menu, and the notification bell
    includes/pipeline.php        two desks now open their full screens

Upload `includes/` first, then `admin/`.

---

## 1 · USER MANAGEMENT

Thirteen lines went in there. Six of them were user lists; the other seven were
different jobs that had been parked in the nearest folder. Now:

**User Management** — All · Free User · Pro User · Seller · Employees ·
Deleted Users. That is the whole group.

### Where the other seven went

| Was in User Management | Now |
|---|---|
| **Staff Accounts** | new **Staff & Roles** group |
| **Custom Roles** | new **Staff & Roles** group |
| **Staff Form Fields** | new **Staff & Roles** group |
| **KYC Pending** | the KYC desks on the Activity & Task board |
| **Upgrade Requests** | the **Seller Requests** desk — it was reading the same table |
| **KYC Questions** | Service Management, beside Add / Edit Categories |
| **Notifications** | the bell, top right of every page |

**Staff & Roles** is its own heading now because staff are not customers. Who
works here, what they may touch, and the form used to take one on are three
screens about one subject, and they were sitting at the bottom of the customer
lists.

**Upgrade Requests was a duplicate.** It reads `seller_upgrade_requests WHERE
status = 'pending'` — the exact query behind the Seller Requests desk. Two menu
entries, one queue.

**KYC Questions** decides which documents a product may ask a customer for. That
is catalogue set-up, so it belongs with the categories rather than with the
member lists.

### The screens are not lost

`kyc_pending.php` and `upgrade_requests.php` are off the menu but still on disk
and still worth having — they show the documents and the full submission, which
an accept/hold/reject desk does not. Both desks now carry a link to them:

* KYC desks → **"Full review screen →"** on every row
* Seller Requests → **"Full request screen →"** on every row

So the deep screen is reached from the queue that leads to it, rather than from a
second menu entry that looked like separate work.

---

## 2 · THE NOTIFICATION BELL

A bell in the top right of every admin page, with the unread count on it in a red
badge. Clicking it drops down the six most recent unread — title, first line, and
when — each linking to wherever that notification points, with **Open all
notifications** at the bottom for `notifications.php`.

Notifications being a line half way down User Management meant you had to go
looking for something that had just happened.

### How it gets onto every page

Each of the 35 admin pages that have a header writes its own header markup, so
there is no single place in PHP to drop a bell into. Rather than editing 35
headers — and getting one of them subtly wrong — the bell is rendered once in
`sidebar.php`, which every page already includes, and moved into the page's
header the moment the page is ready.

It anchors on the profile picture, which is the one element every header has in
the same place, and sits just to its left. If a page has no header at all, the
bell pins itself to the top right corner instead, so it is never simply missing.

The unread query uses `SELECT *` on purpose: the `link` column is added by
`includes/notify.php`'s schema check, and a database where that has not run yet
should still get a working bell rather than a silent one.

---

## 3 · CHECKED

* both files pass `php -l`; the mount script passes `node --check`
* 66 admin pages load with no fatal, no warning and no notice
* KYC Pending, Upgrade Requests and Notifications no longer appear in the menu
  source; Staff & Roles and the relocated KYC Questions do

Needs your eyes, because both are behind the sign-in: that the bell lands beside
your profile picture on the pages you use, and that User Management now shows
exactly six lines.

If the bell sits somewhere odd on a particular page, tell me which page — the
mount rule is one line and easy to adjust per header.
