Skip to content

Admin Panel MVP, round 3: the last copy and presentation fixes ​

Purpose. Round 2 (prompt) came back on 2026-09-29. It was pulled fresh, rendered and checked point by point against its 37 points (D1 to D3 and 1 to 34). Nothing is still open and nothing from round 1 regressed. Of the 37, 24 are fully resolved and 13 are partly resolved. The partly resolved points, and ten small new gaps, are all copy, presentation or counting. This round closes the ones that change what gets built. The rest live only in the prototype's own code and are recorded below as build notes, not sent.

  • Status: drafted 2026-09-29, to be sent by the owner. Tracker: QRS-1451, programme QRS-1404.
  • Paste-ready: D:\DevCache\design-prompts\PROMPT-4-admin-round-3.txt (Block 1 and Block 2, well under 15 KB). Send it as one message in the same Claude Design chat. Do not re-send the PDPR.
  • Review surface: http://localhost:8091/admin-review.html. All six pages render in both themes (12 of 12). The review page's 10 cases pass. The own-leads scope holds: Super Admin 1,840 leads, Sales Executive 313.

What round 2 delivered ​

Three independent reviews read the new files against the round-2 brief and rendered the pages, giving a file and line for every verdict. The claims with the most impact were re-checked by hand.

SectionResolvedPartly (carried into round 3)
Owner decisionsD1 (a Platform Administrator only views Access control), D2 (only sales roles own leads and appear on Team), D3 (a reset ends sessions when the link is sent)
A · Sign-in, set password1 (dark mode on both pages), 3 (missing states), 4 (copy), 5 (an unknown email is refused)2 (the redirect names the right person, but a stale name survives "Sign in with a different account")
B · Access control6 (a revoked invite leaves the list), 8 (Extend and End now, with the date picker and an audit row), 11 (Users links to Access control), 12 ("Deactivated" in Users), 13 (the SCREENS.md row)7 (the existing-account refusal only shows beside the domain refusal); 9 (the handover works, but its copy says "Deactivation"); 10 (the list is emptied, but the reserved Access requests tile disappeared with it)
C · Leads14 (auto-assignment by "Assignment rules", owners read live), 17 (one list of fourteen industries), 18 (a read-only policies panel), 19 (one masking rule)15 (Export says it is recorded in the audit log; it is not); 16 (stage ids, see the build notes); 20 (a revival toast still says "save it as a segment")
D · Users26 (consumer timeline)21 (values shown, but no role per workspace); 22 (the saved-segment strip is still live); 23 (bulk "Both" runs as the person only); 24 ("Unconverted leads" is a number that appears nowhere on Leads); 25 (the Audit tab shows raw labels)
E · Overview27 (sign-in codes read on their own), 28 ("Active cards" reserved), 29 (no 0 badge), 30 (exact headline counts)31 (one note says "in a later round")
F · Copy32 (no em or en dash rendered on any page), 33 (handbook links use desk words), 34 (the dark-token line is gone, QRS-1439)

New gaps found in round 2 (in the prompt below):

  • The Overview shows two "registered people" numbers (965 as a vital, 1,097 on the Users tile).
  • "Messages sent" on a Users record shows a Communications figure as live.
  • A consumer record shows merchant facts ("Customers").
  • The Team spread is computed against a rep with no leads.
  • The Extend sheet lets the start date be edited.
  • "Shared dependencies" says "four" over five rows, and "Already handled" says "today" over weeks of rows.
  • The "All clear" demo hides the live sign-in figure.
  • "1 days".
  • SCREENS.md still describes round 1 in five places.

Build notes: prototype-only, not sent to Claude Design. These are real defects in the prototype's code. The build does not copy that code, and each of these points is already specified correctly elsewhere, so the build handles it:

  • Stage labels are stored by the seed and by "Add a lead", and a few calculations compare labels (point 16). The build stores and compares stage ids only (round-2 point 16 is the rule).
  • Dead code: the accessPending() readers, the private export list, the unused FEED constant with a non-roster name, dead masking helpers, the unused sendSeg toast. None of it is built.
  • The Users audit sorts its demo rows in insertion order and stamps them with the local clock. The build sorts by server time.
  • desk-records.js holds \u2014 values in Billing subscription rows. Billing is not built in this release.
  • The sign-in delivery figure is a stand-in. The build reads the delivery status of sign-in-code messages from communication_messages.
  • The Light theme prop cannot override a saved dark theme. The build reads the saved preference first, then the system preference.

The prompt ​

Paste Block 1 and Block 2 as one message.

Block 1: the product you are extending ​

text
YOU ARE EXTENDING AN EXISTING APPLICATION, NOT BUILDING A NEW ONE.

This is round 3 of the QR setu Admin Panel correction, in prototype/admin-panel/ and
prototype/platform/. Rounds 1 and 2 are APPROVED except the points in Block 2. Keep everything
else exactly as it is: do not restyle, rename or restructure anything Block 2 does not name.

THE FILES INVOLVED
  prototype/admin-panel/SignIn.dc.html     staff sign-in
  prototype/admin-panel/RBAC.dc.html       Access control
  prototype/admin-panel/Users.dc.html      the people and accounts desk
  prototype/admin-panel/Leads.dc.html      Leads & CRM
  prototype/admin-panel/Overview.dc.html   the command centre
  prototype/platform/staff-core.js         the one role model and staff lifecycle
  prototype/platform/users-core.js         the user ecosystem model
  prototype/platform/leads-core.js         the lead model
  prototype/platform/ops-signals.js        the only cross-desk aggregate
  prototype/platform/capabilities.js       the reserved-panel registry
  SCREENS.md                               the registry; update every row you change

No new screens and no new patterns are expected. List any NEW pattern you need, with one sentence
of why, before changing anything; otherwise go straight to the changes.

Block 2: this round ​

text
ADMIN PANEL, ROUND 3. EVERY POINT BELOW IS SETTLED. DESIGN TO IT.

A. SIGN-IN AND ACCESS CONTROL
  1. "Sign in with a different account" clears the person carried in the redirect (?who=), so the
     next stop screen names whoever signs in next.
  2. The lead handover sheet, when opened from Change role or End now, says the role change (or the
     ending) waits until the leads have an owner. It never says "Deactivation" there.
  3. The Extend sheet edits the new end date only; the start date is shown read only. Remove the
     empty "How long" heading.
  4. The existing-account refusal can be previewed on its own: seed an address on qrsetu.com that
     already belongs to a QR setu customer account, and read the preview prop on update as well as
     on mount.
  5. When a sales role lapses, "Who is carrying what" on Leads no longer lists that person; their
     open leads are in the unassigned queue with the reason, as they already are.
  6. "Waiting on you" keeps the reserved Access requests tile (role editing and approvals) whether or
     not anything is waiting. A reserved tile never depends on a count.

B. LEADS
  7. Export writes a row to the lead activity trail, and its toast and subtitle name that trail. The
     copy must not claim a log the export is not written to.
  8. Remove the revival card's toast "Save it as a segment, then pick it as the audience in
     Communications" (segments and sending are reserved).
  9. Team: a rep who holds no open leads shows "No leads yet" instead of "-100% under average", and is
     left out of the busiest-to-quietest spread in the headline.
  10. Singular units everywhere: "1 day", never "1 days".

C. USERS
  11. The record names every workspace the person belongs to, with their role in each (Owner,
      Manager, Staff), never "member of 1 more". Values stay live; only the door into the Workspaces
      desk is reserved.
  12. Remove what is left of the saved-segment strip: the "8 saved" chip, "Everyone PLATFORM",
      "Duplicate to change" and "The whole library". Segments show the one reserved presentation.
      No message names users.write or users.read; those permissions do not exist.
  13. Bulk suspend and block apply the scope that was chosen (Both holds the person and the business),
      and the toast says what was held, for example "Suspended 3 people and their businesses".
  14. "Unconverted leads" on Pulse is the number of open leads: not Won, Lost or Unqualified. The Leads
      desk shows the same "open leads" number on its Overview, and Pulse reads that one number for
      the figure, its share and its link.
  15. The Audit tab uses verb words (suspended, blocked, revealed contact details for), newest first.
  16. "Messages sent" on the record's chain is a Communications figure. Reserve it like the other
      Communications figures: no number.
  17. A consumer's record shows consumer facts only, and no merchant facts such as Customers.

D. OVERVIEW AND COPY
  18. The Users tile on the Operations map counts registered people exactly as the vital does
      (unconverted leads excluded), so the page shows one number.
  19. The Shared dependencies subtitle does not state a count the rows contradict ("four").
  20. "Already handled" does not say "today" over rows that go back weeks: say "Recent activity
      across the desks".
  21. The "All clear" demo keeps the live sign-in code figure instead of replacing it with "Nominal".
  22. capabilities.js, the view-as-user note: say it is not ready yet, not "in a later round".
  23. SCREENS.md admin rows match the design:
      - crm delete is reserved;
      - lead owners are Sales Manager and Sales Executive;
      - the SignIn persona prop only names the person in a forced preview state;
      - SetPassword has the saving and network states and a theme prop;
      - the Users statuses include Deactivated for staff.

DELIVERABLES: the files above revised in place, SCREENS.md rows updated, and one line per point
(1 to 23) saying where it now lives.

After it comes back ​

The same loop. The owner says it was passed. Then pull fresh, run the mirror checks (node admin-materialise.mjs, admin-graph.mjs, admin-verify.mjs, admin-review-check.mjs), and give a verdict per point. If every point is resolved, the owner approves the Admin Panel design. After that come the parity contracts (QRS-1420), the design review pages and increment 1. The account-holds prompt (PROMPT-2-account-holds-round-1-SHORT.txt) is sent after approval.

Cross-references ​