Rusukh · Client handover

The Admin Panel and Customer Portal, in full

Every screen, every role, every rule — and a photograph of each one, taken from the running application rather than drawn for the document.

Generated
2026-09-05
Evidence
118 screenshots, captured automatically
Database
rusukh_demo
Roles documented
14
Permissions
288
Approval rules
18

How this document was produced

This is not a written description of the software. Every screenshot below was taken by a script that signed in as a real seeded user, navigated to a real URL, and photographed whatever came back. The red outline in each image was drawn by that same script around the element the caption refers to, so the caption cannot drift away from the picture.

The whole document regenerates from three commands:

npx playwright test -c e2e/evidence/evidence.config.ts
DB_DATABASE=rusukh_demo php artisan handbook:export-reference
node e2e/evidence/build-handbook.mjs

What that buys you

Which database these pictures came from, and why it matters

Everything here was photographed against rusukh_demo, built from an empty database by the documented migrate:fresh --seed and verified before use. That choice is deliberate and worth explaining, because it is the difference between evidence and decoration.

The everyday development database looks identical on screen and is not honest: it was seeded before the stage-gate work landed, so it carries 286 gate rows with zero evidence rows behind them. The gate board renders green, and the first attempt to actually advance a garment is refused — because the evaluator recomputes each gate from its evidence every time it is asked and never trusts the stored flag. A handbook illustrated from that database would be showing you a board that does not mean what it appears to mean.

The number that separates the two: 151 stage gates standing on 569 evidence rows, all 151 of which re-evaluate as genuinely passing. That check is part of the release procedure in 04-TESTING-AND-VERIFICATION.md §7.

One difference between these pictures and a brand-new installation

The dashboards below show real computed figures — pipeline value, QC pass rate, delivery success. A freshly seeded installation will not. Every dashboard tile reads "awaiting data" under a banner saying the figures are not being computed yet, and that is correct rather than broken: the KPI engine writes a snapshot on a nightly schedule, at 01:00, and a database created this afternoon has not had one yet. The application deliberately shows an em dash rather than a zero, because a fabricated zero on a quality metric would read as an accusation.

These screenshots were taken after running that job by hand against the demo database, so the handbook shows what the panel looks like in use rather than on its first day. Two things follow for a real deployment. The scheduler entry must be installed — one * * * * * php artisan schedule:run line — and a queue worker must be running, because schedule:run only places these jobs on the maintenance queue. Without a worker the dashboards stay empty forever and nothing reports an error. See 03-PRODUCTION-DEPLOYMENT.md §4.

How much data is behind these screens

TableRows
users16
customers8
orders114
order_items142
stage_gates151
stage_gate_evidence569
approval_requests12
payments6
shipments6
delivery_attempts5
alteration_jobs5
commissions14
journal_entries2

Signing in — addresses and credentials

Two separate front doors, two separate guards. Staff and customers do not share a login, a session, or a permission set, and no staff account can act as a customer — a point §3 returns to, because it surprises people.

WhoAddressLands on
Staff/login/admin/dashboard
Customers/customer/login/account
Customer self-registration/customer/register/account after email verification
Password reset (customer)/customer/forgot-passwordemailed link

The seeded staff roster

These are the accounts a fresh migrate:fresh --seed creates, and the accounts every screenshot in this document was taken with. All thirteen share one password on a seeded installation.

Change every one of these before the system carries real work. They exist so a new installation can be explored and demonstrated immediately; they are published in this document and in the repository, so they are not secrets and must never be treated as any.

RolePermissionsSeeded emailSeeded password
super_admin 272 root@rusukh.pk Rusukh#Staff2026
management 270 tariq.jamil@rusukh.pk Rusukh#Staff2026
customer_service 88 nadia.iqbal@rusukh.pk Rusukh#Staff2026
operations_coordinator 48 rehan.aziz@rusukh.pk Rusukh#Staff2026
measurement_rep 48 imran.sheikh@rusukh.pk Rusukh#Staff2026
finance 106 shahid.kamal@rusukh.pk Rusukh#Staff2026
inventory_procurement 46 zubair.lakhani@rusukh.pk Rusukh#Staff2026
production_manager 58 arif.sattar@rusukh.pk Rusukh#Staff2026
cutter 17 yousuf.dawood@rusukh.pk Rusukh#Staff2026
tailor 18 salim.khatri@rusukh.pk Rusukh#Staff2026
qc_officer 31 naveed.anwar@rusukh.pk Rusukh#Staff2026
finishing_packing 18 junaid.habib@rusukh.pk Rusukh#Staff2026
rider 22 kashif.ali@rusukh.pk Rusukh#Staff2026
customer 16

The seeded customers

All customer logins share the password Rusukh#Client2026.

Two-factor authentication

Seeded accounts are not enrolled. finance and super_admin are the two roles the middleware treats as requiring it, so signing in as either lands on the enrolment screen at /admin/identity/security/two-factor rather than the dashboard. That is the guard working, not a failed login — the session is valid either way, and navigating to the dashboard works normally.

The role model — who may do what

Rusukh has 14 roles and 288 named permissions. A role is a bundle of permissions; a user holds a role. Nothing in the application asks "is this person an admin" — every gate asks for a specific named permission, which is why the sidebar a role sees and the routes it may open are the same list.

Permissions by family

Each permission is named <area>.<thing>.<verb>. The families:

FamilyPermissions
production.*39
crm.*32
orders.*26
finance.*21
identity.*21
inventory.*19
audit.*18
account.*16
shipping.*15
catalog.*14
commission.*12
payments.*12
measurements.*9
approvals.*8
analytics.*7
core.*6
system.*6
notifications.*4
gates.*2
team.*1

The one thing a super administrator cannot do

super_admin holds 272 of the 288 permissions. The 16 it does not hold are the account.* family — the customer portal's own permissions.

A super administrator cannot act as a customer. They cannot approve a specification on a patron's behalf, submit measurements as them, or pay their invoice from inside their account. Those acts have to come from the customer, which is what makes a customer approval worth anything when a dispute turns up later.

Roles that exist to be narrow

3 staff roles hold fewer than twenty permissions each, and that is the design rather than an incomplete setup: a cutter has 17; a tailor has 18; a finishing_packing has 18. Each can do their station and see what they need to do it, and nothing else. The evidence for that claim is in the next section — including one screenshot of the refusal itself, because a hidden link and a blocked route are very different things and only one of them is security.

What each role actually sees

The navigation is generated from the signed-in user's own permissions, so a photograph of it is a photograph of that role's reach. Thirteen roles, thirteen sidebars, all taken in the same session against the same database.

The last figure in this section is the important one. Everything above it shows what a role is offered; that one shows what happens when somebody ignores the offer and types the URL.

Figure 1 super_admin — the whole panel as this role sees it
super_admin — the whole panel as this role sees it

Signed in as root@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as super_admin /admin/dashboard Outlined in the image: Everything super_admin can reach

Figure 2 management — the whole panel as this role sees it
management — the whole panel as this role sees it

Signed in as tariq.jamil@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as management /admin/dashboard Outlined in the image: Everything management can reach

Figure 3 customer_service — the whole panel as this role sees it
customer_service — the whole panel as this role sees it

Signed in as nadia.iqbal@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as customer_service /admin/dashboard Outlined in the image: Everything customer_service can reach

Figure 4 operations_coordinator — the whole panel as this role sees it
operations_coordinator — the whole panel as this role sees it

Signed in as rehan.aziz@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as operations_coordinator /admin/dashboard Outlined in the image: Everything operations_coordinator can reach

Figure 5 measurement_rep — the whole panel as this role sees it
measurement_rep — the whole panel as this role sees it

Signed in as imran.sheikh@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as measurement_rep /admin/dashboard Outlined in the image: Everything measurement_rep can reach

Figure 6 rider — the whole panel as this role sees it
rider — the whole panel as this role sees it

Signed in as kashif.ali@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as rider /admin/dashboard Outlined in the image: Everything rider can reach

Figure 7 finance — the whole panel as this role sees it
finance — the whole panel as this role sees it

Signed in as shahid.kamal@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as finance /admin/dashboard Outlined in the image: Everything finance can reach

Figure 8 inventory_procurement — the whole panel as this role sees it
inventory_procurement — the whole panel as this role sees it

Signed in as zubair.lakhani@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as inventory_procurement /admin/dashboard Outlined in the image: Everything inventory_procurement can reach

Figure 9 production_manager — the whole panel as this role sees it
production_manager — the whole panel as this role sees it

Signed in as arif.sattar@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as production_manager /admin/dashboard Outlined in the image: Everything production_manager can reach

Figure 10 cutter — the whole panel as this role sees it
cutter — the whole panel as this role sees it

Signed in as yousuf.dawood@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as cutter /admin/dashboard Outlined in the image: Everything cutter can reach

Figure 11 tailor — the whole panel as this role sees it
tailor — the whole panel as this role sees it

Signed in as salim.khatri@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as tailor /admin/dashboard Outlined in the image: Everything tailor can reach

Figure 12 qc_officer — the whole panel as this role sees it
qc_officer — the whole panel as this role sees it

Signed in as naveed.anwar@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as qc_officer /admin/dashboard Outlined in the image: Everything qc_officer can reach

Figure 13 finishing_packing — the whole panel as this role sees it
finishing_packing — the whole panel as this role sees it

Signed in as junaid.habib@rusukh.pk. The outlined navigation is generated from this role's own permissions, so everything absent from it is genuinely unreachable, not merely unlinked — the screen sweep in section 3 proves each of those routes is refused rather than hidden.

signed in as finishing_packing /admin/dashboard Outlined in the image: Everything finishing_packing can reach

Figure 14 A cutter opening the general ledger directly — HTTP 403
A cutter opening the general ledger directly — HTTP 403

The URL was typed in full rather than clicked, bypassing the navigation entirely. The server answered 403. This is the check that matters: the sidebar screenshots above show what each role is offered, and this shows that the offer is also the limit.

signed in as cutter /admin/finance/ledger Outlined in the image: HTTP 403 — refused at the route

The approval rules

Rusukh has two kinds of approval and they are not variations on each other. Customer approvals are the patron agreeing to something about their own order. Internal approvals are a second member of staff signing for a decision the first one is not permitted to take alone. Both are enforced in the application, not in a policy document: the act is refused until the approval exists.

Customer approvals — the seven sign-offs

These are the points at which the patron, and only the patron, decides. Each one blocks the work that comes after it; C1–C3 in particular hold the cutting desk, because cut cloth cannot be uncut.

CodeWhat is being approvedRequested byThresholdSLA
C1_FABRIC_COLOUR Fabric & Colour Approval
The customer must approve the fabric and colour before it is cut.
measurement_rep always 24 h
C2_STYLE_QUANTITY Style & Number of Suits
The customer must confirm the style and how many suits are being ordered.
measurement_rep always 24 h
C3_MEASUREMENTS_FIT Measurements or Reference Fit
The customer must sign off the measurements, or the reference garment fit, before cutting.
measurement_rep always 24 h
C4_PRICE_CHARGES Price & Charges
The customer must approve the quoted price and any listed charges before the order is confirmed.
customer_service always 12 h
C5_DELIVERY_DATE Delivery Date
The customer must agree the promised delivery date.
customer_service always 12 h
C6_DESIGN_CHANGE Design Changes
Control rule U2: any unapproved design change invalidates the prior approval and must be re-confirmed.
measurement_rep always 24 h
C7_ADDITIONAL_COST Additional Cost
No extra cost may be added to an order without customer approval.
customer_service always 12 h

Two different things are both numbered G1–G13, and it is worth separating them once.

The thirteen stage gates are the order's own checkpoints — G7 is "cutting complete", G9 is "QC approved" — and they are what the gate register in §7 lists. The approval codes below are a separate scheme from SOP §78: G3_FABRIC_CUTTING is the authorisation to start cutting, not the stage gate that records it as finished.

Where this document says a customer approval "holds G3", it means the approval code — the customer has not yet signed the specification, so cutting cannot be released.

Internal approvals — SOP §78

Each of these names an approver role, a money threshold where one applies, and a service level. Below the threshold the act proceeds untouched — a control that fires on ordinary work is one people learn to route around, so a Rs 500 purchase order does not wait for anybody.

CodeWhat it governsApproverThresholdSLA
G1_QUOTATION_DISCOUNT Large Discount Authorisation
A discount beyond the standard band requires management sign-off before it is applied.
management Rs 5,000 4 h
G13_PERIOD_LOCK_OVERRIDE Financial Period Lock Override
Reopening or adjusting a closed accounting period is a Super Root exception, logged with full audit.
super_admin always 24 h
G2_FABRIC_PURCHASE Fabric Purchase Authorisation
A fabric purchase order beyond the standard value requires management authorisation.
management Rs 20,000 8 h
G3_FABRIC_CUTTING Fabric Cutting Release
Control rule U2: cutting may not proceed while a customer approval or specification question is open.
production_manager always 2 h
G4_URGENT_ORDER Urgent-Order Acceptance
Accepting an order outside the normal production calendar requires management approval before it is confirmed.
management always 1 h
G5_FABRIC_QC_DEVIATION Fabric QC Deviation Clearance
A minor fabric defect found at inspection may be cleared for use rather than rejected, on production sign-off.
production_manager always 2 h
G6_REFUND_APPROVAL Refund Approval
A refund beyond the standard threshold requires finance sign-off before it is processed.
finance Rs 3,000 8 h
G7_FREE_ALTERATION_EXCEPTION Free Alteration Outside Policy
An alteration offered free of charge outside the standard policy (not a Rusukh-error correction) requires sign-off.
production_manager always 4 h
G8_DISPATCH_WITH_BALANCE Dispatch With Outstanding Payment
Control rule: dispatching before the balance is fully collected is an exception, not a default, and needs finance sign-off.
finance always 1 h
G9_ORDER_CLOSURE_EXCEPTION Order Closure Exception
Closing an order with an unresolved payment or alteration requires management approval.
management always 8 h
remake Remake Authorisation
SOP §43/§60: root cause first, then a management approval before a fresh garment is cut. Matches the required_role Production's RequestRemakeAction already stamps directly.
management always 48 h

What each one is actually protecting

Where you will see these. Every raised request lands in the Approval Centre at /admin/approvals/desk, photographed in §7. Every decision on one is written to the audit trail at /admin/audit/activity, photographed at the end of that same section — a signature nobody can look up later is not a control.

Booking an order, step by step

This is a real order, created during the capture run, through the same four-step wizard an operator uses. Nothing here is a mock-up; the order number in the final figure was issued by the application while these pictures were being taken.

The fourth figure is the refusal, and it is deliberately included. A handbook that only shows the clean path teaches nothing about the day the form says no.

Figure 15 Step 1 — choose the customer
Step 1 — choose the customer

Customer Service opens Orders → New Order. Nothing can be entered before a customer is chosen, because every downstream record — measurements, quotation, commission, invoice — hangs off that identity.

signed in as customer_service /admin/orders/create Outlined in the image: Step 1 — the customer this order belongs to

Figure 16 Step 2 — what is being sold
Step 2 — what is being sold

Cloth & Stitching, stitching only, or cloth only. This choice decides which stages the order will have to pass through later: a cloth-only order never reaches the cutting desk.

signed in as customer_service /admin/orders/create Outlined in the image: Step 2 — offering type

Figure 17 Step 3 — the suit builder
Step 3 — the suit builder

Fabric, cut and customisation per garment. An order may hold several items and each is priced separately — fabric and stitching are stored as distinct amounts, which is what lets a stitching-only order exist at all.

signed in as customer_service /admin/orders/create

Figure 18 Validation — the wizard refuses an empty order
Validation — the wizard refuses an empty order

Review was pressed with no garment added. The wizard does not advance and says why, inline. Every step of this wizard validates on the server, so the same refusal happens whether the browser is cooperating or not.

signed in as customer_service /admin/orders/create Outlined in the image: Refused — "at least one suit item" is required

Figure 19 Step 4 — review before issuing
Step 4 — review before issuing

The last screen before the order exists. Totals shown here are computed server-side in integer paisa; no amount on this page was calculated in the browser.

signed in as customer_service /admin/orders/create Outlined in the image: Step 4 — review and confirm

Figure 20 The order exists — evidence, not a mock-up
The order exists — evidence, not a mock-up

This order was created by this capture run, in the browser, through the same wizard an operator uses. The RSK- number and the URL are the real ones the application issued; orders are keyed by UUID, which is why the address bar shows one.

signed in as customer_service /admin/orders/d7b23cba-2fc1-48ac-b2b0-cad8cb8bd97d Outlined in the image: A real order number, issued by the application

An order's life, station by station

From the board an order lands on to the ledger entry it eventually becomes. Each station below is photographed in its real seeded state — work genuinely sitting in it — rather than driven forward by the capture script.

Why these are not one continuous click-through. Advancing a single garment through all thirteen stage gates from a browser is a working day of clicking, and a capture run that mutated its way through production could not be re-run. What is shown instead is each station as it looks with real work in it, on a database whose gates were verified to re-evaluate as passing rather than merely stored as green. The click-through proof that each transition works is the automated suite — 2744 backend tests and 262 browser tests, summarised in §11.

Figure 21 Stage 1 — the orders board
Stage 1 — the orders board

Every live order and the stage it is sitting at. This is the screen production planning runs from; the status column is the order header status, distinct from each garment item's own stage. Opened as production_manager at /admin/orders.

signed in as production_manager /admin/orders Outlined in the image: Stage 1 — the orders board

Figure 22 Stage 2 — the thirteen stage gates
Stage 2 — the thirteen stage gates

G1 to G13. A garment cannot advance until its gate passes, and the gate is recomputed from its evidence rows every single time it is asked — a stored "passed" flag is never trusted on its own. That is why the seeded demo carries 569 evidence rows behind its 151 gates. Opened as qc_officer at /admin/orders/desk/gates.

signed in as qc_officer /admin/orders/desk/gates Outlined in the image: Stage 2 — the thirteen stage gates

Figure 23 Stage 3 — the approval centre
Stage 3 — the approval centre

SOP §78's nine internal approval points land here: discount, fabric purchase, cutting release, urgent order, refund, free alteration, dispatch with balance, order closure and period-lock override. Each carries its own approver, money threshold and SLA. Opened as production_manager at /admin/approvals/desk.

signed in as production_manager /admin/approvals/desk Outlined in the image: Stage 3 — the approval centre

Figure 24 Stage 4 — buying the cloth
Stage 4 — buying the cloth

Purchase orders to suppliers. Approving one above the configured threshold raises a G2 request rather than committing the spend — the person placing the order cannot also be the person who approves it. Opened as inventory_procurement at /admin/inventory/purchase-orders.

signed in as inventory_procurement /admin/inventory/purchase-orders Outlined in the image: Stage 4 — buying the cloth

Figure 25 Stage 5 — the 6-point fabric quality check
Stage 5 — the 6-point fabric quality check

Incoming cloth is inspected before it can be issued. A deviation raises G5 rather than being waved through, so tolerance decisions are recorded against a named approver. Opened as inventory_procurement at /admin/inventory/fabric-inspection.

signed in as inventory_procurement /admin/inventory/fabric-inspection Outlined in the image: Stage 5 — the 6-point fabric quality check

Figure 26 Stage 6 — the cutting desk
Stage 6 — the cutting desk

Cut cloth cannot be uncut, which is why G3 sits in front of this screen: a cutting job cannot open against a specification the customer has not yet agreed to. Opened as qc_officer at /admin/production/cutting.

signed in as qc_officer /admin/production/cutting Outlined in the image: Stage 6 — the cutting desk

Figure 27 Stage 7 — the tailoring station
Stage 7 — the tailoring station

The twelve tailoring steps, logged per garment. The assignment moves to In Progress on the first step and to Completed on the twelfth, so a tailor's workload reflects real work logged rather than work assigned. Opened as qc_officer at /admin/production/tailoring.

signed in as qc_officer /admin/production/tailoring Outlined in the image: Stage 7 — the tailoring station

Figure 28 Stage 8 — dual quality control
Stage 8 — dual quality control

Two inspections, initial and final, each against a checklist with recorded defects. A major correction routes the garment back to the workshop instead of forward. Opened as finishing_packing at /admin/production/quality.

signed in as finishing_packing /admin/production/quality Outlined in the image: Stage 8 — dual quality control

Figure 29 Stage 9 — alterations and remakes
Stage 9 — alterations and remakes

A Rusukh-error alteration is free by definition and passes straight through. A free alteration in a chargeable category is a concession, and G7 requires someone to sign for it — the seeded demo contains three such signed concessions under the 15-day fit guarantee. Opened as qc_officer at /admin/production/alterations.

signed in as qc_officer /admin/production/alterations Outlined in the image: Stage 9 — alterations and remakes

Figure 30 Stage 10 — finishing
Stage 10 — finishing

Pressing, trimming and final presentation before the garment is packed. Opened as finishing_packing at /admin/production/finishing.

signed in as finishing_packing /admin/production/finishing Outlined in the image: Stage 10 — finishing

Figure 31 Stage 11 — packing and manifest verification
Stage 11 — packing and manifest verification

The package is built, then its manifest is verified against the order before it can be sealed. Packing and verifying are separate acts on purpose. Opened as finishing_packing at /admin/production/packing.

signed in as finishing_packing /admin/production/packing Outlined in the image: Stage 11 — packing and manifest verification

Figure 32 Stage 12 — the shipments board
Stage 12 — the shipments board

Dispatch. G8 governs releasing a shipment while a balance is still outstanding, so "send it anyway" is a decision with a name attached rather than a habit. Opened as finishing_packing at /admin/shipping/shipments.

signed in as finishing_packing /admin/shipping/shipments Outlined in the image: Stage 12 — the shipments board

Figure 33 Stage 13 — Karachi rider manifests
Stage 13 — Karachi rider manifests

What a rider carries out and what they must bring back. Failed attempts are recorded with a reason — unreachable, locked gate, blocked route — not silently retried. Opened as rider at /admin/shipping/manifests.

signed in as rider /admin/shipping/manifests Outlined in the image: Stage 13 — Karachi rider manifests

Figure 34 Stage 14 — proof of delivery
Stage 14 — proof of delivery

Signature or photograph against the shipment, captured at the door. Opened as finance at /admin/shipping/pod.

signed in as finance /admin/shipping/pod Outlined in the image: Stage 14 — proof of delivery

Figure 35 Stage 15 — COD cash custody
Stage 15 — COD cash custody

Cash collected at the door is a custody chain: rider, hand-over to finance, then reconciliation. Each hand-over is its own record, so an unreconciled bag has an owner. Opened as finance at /admin/shipping/cod.

signed in as finance /admin/shipping/cod Outlined in the image: Stage 15 — COD cash custody

Figure 36 Stage 16 — the payment desk
Stage 16 — the payment desk

Where staff take payment and issue refunds. A refund above the configured threshold raises G6 instead of moving money. Opened as finance at /admin/payments/desk.

signed in as finance /admin/payments/desk Outlined in the image: Stage 16 — the payment desk

Figure 37 Stage 17 — the general ledger
Stage 17 — the general ledger

Double-entry, in integer paisa. Every amount in this system is an integer number of paisa in a Money value object and every percentage is basis points; an architecture test fails the build if a float goes anywhere near a currency value. Opened as finance at /admin/finance/ledger.

signed in as finance /admin/finance/ledger Outlined in the image: Stage 17 — the general ledger

Figure 38 Stage 18 — daily closings and period locks
Stage 18 — daily closings and period locks

Closing a period freezes it. Reopening it is G13 — the only approval in the set reserved to the super administrator, with a 24-hour SLA. Opened as finance at /admin/finance/closings.

signed in as finance /admin/finance/closings Outlined in the image: Stage 18 — daily closings and period locks

Figure 39 Stage 19 — the commission ledger
Stage 19 — the commission ledger

Accrual, maturation, payout and clawback. A cancelled order claws back the commission it produced, and a manager override is clawed back with its parent rather than left behind. Opened as finance at /admin/commission.

signed in as finance /admin/commission Outlined in the image: Stage 19 — the commission ledger

Figure 40 Stage 20 — the audit trail
Stage 20 — the audit trail

Who did what, when. This is the screen that makes every approval above meaningful: a signature nobody can look up later is not a control. Opened as production_manager at /admin/audit/activity.

signed in as production_manager /admin/audit/activity Outlined in the image: Stage 20 — the audit trail

The screen atlas — all 61 admin screens

Every screen in the panel, grouped as the sidebar groups them, each opened as a role confirmed able to reach it. Where a screen is shown under a modest role — the cutting desk as a QC officer, the catalogue as a production manager — that is itself the evidence: the least privileged person who needs that screen can genuinely open it.

Analytics & Insights · 4 screens

Figure 41 Analytics & Insights → Executive Dashboard
Analytics & Insights → Executive Dashboard

/admin/analytics/dashboard — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/analytics/dashboard Outlined in the image: Analytics & Insights → Executive Dashboard

Figure 42 Analytics & Insights → Financial Dashboard
Analytics & Insights → Financial Dashboard

/admin/analytics/financial — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/analytics/financial Outlined in the image: Analytics & Insights → Financial Dashboard

Figure 43 Analytics & Insights → Agent Leaderboard
Analytics & Insights → Agent Leaderboard

/admin/analytics/leaderboard — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/analytics/leaderboard Outlined in the image: Analytics & Insights → Agent Leaderboard

Figure 44 Analytics & Insights → Production Board
Analytics & Insights → Production Board

/admin/analytics/production-board — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/analytics/production-board Outlined in the image: Analytics & Insights → Production Board

Governance & Approvals · 1 screen

Figure 45 Governance & Approvals → Approval Center
Governance & Approvals → Approval Center

/admin/approvals/desk — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/approvals/desk Outlined in the image: Governance & Approvals → Approval Center

Settings · 9 screens

Figure 46 Settings → Audit trail
Settings → Audit trail

/admin/audit/activity — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/audit/activity Outlined in the image: Settings → Audit trail

Figure 47 Settings → Feature flags
Settings → Feature flags

/admin/core/feature-flags — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/core/feature-flags Outlined in the image: Settings → Feature flags

Figure 48 Settings → Geography
Settings → Geography

/admin/core/geography — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/core/geography Outlined in the image: Settings → Geography

Figure 49 Settings → Queue monitor
Settings → Queue monitor

/admin/queue — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/queue Outlined in the image: Settings → Queue monitor

Figure 50 Settings → Business settings
Settings → Business settings

/admin/core/settings — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/core/settings Outlined in the image: Settings → Business settings

Figure 51 Settings → Roles & permissions
Settings → Roles & permissions

/admin/identity/roles — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/identity/roles Outlined in the image: Settings → Roles & permissions

Figure 52 Settings → Teams
Settings → Teams

/admin/identity/teams — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/identity/teams Outlined in the image: Settings → Teams

Figure 53 Settings → Users
Settings → Users

/admin/identity/users — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/identity/users Outlined in the image: Settings → Users

Figure 54 Settings → Measurement templates
Settings → Measurement templates

/admin/measurements/templates — opened as super_admin (root@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as super_admin /admin/measurements/templates Outlined in the image: Settings → Measurement templates

Catalog · 4 screens

Figure 55 Catalog → Accessories
Catalog → Accessories

/admin/catalog/accessories — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/catalog/accessories Outlined in the image: Catalog → Accessories

Figure 56 Catalog → Categories
Catalog → Categories

/admin/catalog/categories — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/catalog/categories Outlined in the image: Catalog → Categories

Figure 57 Catalog → Customization
Catalog → Customization

/admin/catalog/customization — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/catalog/customization Outlined in the image: Catalog → Customization

Figure 58 Catalog → Fabrics
Catalog → Fabrics

/admin/catalog/fabrics — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/catalog/fabrics Outlined in the image: Catalog → Fabrics

Commission Ledger · 3 screens

Figure 59 Commission Ledger → Commissions Desk
Commission Ledger → Commissions Desk

/admin/commission — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/commission Outlined in the image: Commission Ledger → Commissions Desk

Figure 60 Commission Ledger → Wallets & Payouts
Commission Ledger → Wallets & Payouts

/admin/commission/payouts — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/commission/payouts Outlined in the image: Commission Ledger → Wallets & Payouts

Figure 61 Commission Ledger → My Commission
Commission Ledger → My Commission

/admin/commission/statement — opened as rider (kashif.ali@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as rider /admin/commission/statement Outlined in the image: Commission Ledger → My Commission

Sales · 5 screens

Figure 62 Sales → Appointments
Sales → Appointments

/admin/crm/appointments — opened as measurement_rep (imran.sheikh@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as measurement_rep /admin/crm/appointments Outlined in the image: Sales → Appointments

Figure 63 Sales → Leads
Sales → Leads

/admin/crm/leads — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/crm/leads Outlined in the image: Sales → Leads

Figure 64 Sales → Measurements
Sales → Measurements

/admin/measurements/profiles — opened as measurement_rep (imran.sheikh@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as measurement_rep /admin/measurements/profiles Outlined in the image: Sales → Measurements

Figure 65 Sales → Reference garments
Sales → Reference garments

/admin/measurements/reference-garments — opened as measurement_rep (imran.sheikh@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as measurement_rep /admin/measurements/reference-garments Outlined in the image: Sales → Reference garments

Figure 66 Sales → Quotations
Sales → Quotations

/admin/orders/desk/quotations — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/orders/desk/quotations Outlined in the image: Sales → Quotations

Customers · 3 screens

Figure 67 Customers → Complaints
Customers → Complaints

/admin/crm/complaints — opened as operations_coordinator (rehan.aziz@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as operations_coordinator /admin/crm/complaints Outlined in the image: Customers → Complaints

Figure 68 Customers → Feedback
Customers → Feedback

/admin/crm/feedback — opened as measurement_rep (imran.sheikh@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as measurement_rep /admin/crm/feedback Outlined in the image: Customers → Feedback

Figure 69 Customers → Route plans
Customers → Route plans

/admin/crm/route-plans — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/crm/route-plans Outlined in the image: Customers → Route plans

Overview · 3 screens

Figure 70 Overview → Dashboard
Overview → Dashboard

/admin/dashboard — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/dashboard Outlined in the image: Overview → Dashboard

Figure 71 Overview → Notifications
Overview → Notifications

/admin/notifications — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/notifications Outlined in the image: Overview → Notifications

Figure 72 Overview → Search
Overview → Search

/admin/search — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/search Outlined in the image: Overview → Search

Finance & Accounting · 3 screens

Figure 73 Finance & Accounting → Daily Closings
Finance & Accounting → Daily Closings

/admin/finance/closings — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/finance/closings Outlined in the image: Finance & Accounting → Daily Closings

Figure 74 Finance & Accounting → General Ledger
Finance & Accounting → General Ledger

/admin/finance/ledger — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/finance/ledger Outlined in the image: Finance & Accounting → General Ledger

Figure 75 Finance & Accounting → P&L & Financial Reports
Finance & Accounting → P&L & Financial Reports

/admin/finance/reports — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/finance/reports Outlined in the image: Finance & Accounting → P&L & Financial Reports

Inventory · 6 screens

Figure 76 Inventory → Customer Fabric Custody
Inventory → Customer Fabric Custody

/admin/inventory/customer-fabric — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/inventory/customer-fabric Outlined in the image: Inventory → Customer Fabric Custody

Figure 77 Inventory → 6-Point Fabric Quality Check
Inventory → 6-Point Fabric Quality Check

/admin/inventory/fabric-inspection — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/inventory/fabric-inspection Outlined in the image: Inventory → 6-Point Fabric Quality Check

Figure 78 Inventory → Goods Receipt (GRN)
Inventory → Goods Receipt (GRN)

/admin/inventory/goods-receipt — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/inventory/goods-receipt Outlined in the image: Inventory → Goods Receipt (GRN)

Figure 79 Inventory → Purchase Orders
Inventory → Purchase Orders

/admin/inventory/purchase-orders — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/inventory/purchase-orders Outlined in the image: Inventory → Purchase Orders

Figure 80 Inventory → Stock Lots & Warehouse
Inventory → Stock Lots & Warehouse

/admin/inventory/stock-lots — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/inventory/stock-lots Outlined in the image: Inventory → Stock Lots & Warehouse

Figure 81 Inventory → Suppliers & Mills
Inventory → Suppliers & Mills

/admin/inventory/suppliers — opened as inventory_procurement (zubair.lakhani@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as inventory_procurement /admin/inventory/suppliers Outlined in the image: Inventory → Suppliers & Mills

Communication Logs · 4 screens

Figure 82 Communication Logs → Notification Logs
Communication Logs → Notification Logs

/admin/notifications/logs — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/notifications/logs Outlined in the image: Communication Logs → Notification Logs

Figure 83 Communication Logs → Customer Preferences
Communication Logs → Customer Preferences

/admin/notifications/preferences — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/notifications/preferences Outlined in the image: Communication Logs → Customer Preferences

Figure 84 Communication Logs → Mail Preview
Communication Logs → Mail Preview

/admin/notifications/preview — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/notifications/preview Outlined in the image: Communication Logs → Mail Preview

Figure 85 Communication Logs → Email Templates
Communication Logs → Email Templates

/admin/notifications/templates — opened as customer_service (nadia.iqbal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as customer_service /admin/notifications/templates Outlined in the image: Communication Logs → Email Templates

Orders · 4 screens

Figure 86 Orders → Approvals
Orders → Approvals

/admin/orders/desk/approvals — opened as finance (shahid.kamal@rusukh.pk). This path is a signpost rather than a screen: it redirects to /admin/approvals, which is what you are looking at. The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/approvals Outlined in the image: Orders → Approvals

Figure 87 Orders → Cancellations
Orders → Cancellations

/admin/orders/desk/cancellations — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/orders/desk/cancellations Outlined in the image: Orders → Cancellations

Figure 88 Orders → Stage gates
Orders → Stage gates

/admin/orders/desk/gates — opened as qc_officer (naveed.anwar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as qc_officer /admin/orders/desk/gates Outlined in the image: Orders → Stage gates

Figure 89 Orders → Orders
Orders → Orders

/admin/orders — opened as production_manager (arif.sattar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as production_manager /admin/orders Outlined in the image: Orders → Orders

Payments & Cashier · 1 screen

Figure 90 Payments & Cashier → Payment Desk
Payments & Cashier → Payment Desk

/admin/payments/desk — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/payments/desk Outlined in the image: Payments & Cashier → Payment Desk

Workshop / Production · 7 screens

Figure 91 Workshop / Production → Alterations & Remakes
Workshop / Production → Alterations & Remakes

/admin/production/alterations — opened as qc_officer (naveed.anwar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as qc_officer /admin/production/alterations Outlined in the image: Workshop / Production → Alterations & Remakes

Figure 92 Workshop / Production → Cutting Desk
Workshop / Production → Cutting Desk

/admin/production/cutting — opened as qc_officer (naveed.anwar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as qc_officer /admin/production/cutting Outlined in the image: Workshop / Production → Cutting Desk

Figure 93 Workshop / Production → Production Files
Workshop / Production → Production Files

/admin/production/files — opened as qc_officer (naveed.anwar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as qc_officer /admin/production/files Outlined in the image: Workshop / Production → Production Files

Figure 94 Workshop / Production → Finishing
Workshop / Production → Finishing

/admin/production/finishing — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/production/finishing Outlined in the image: Workshop / Production → Finishing

Figure 95 Workshop / Production → Packing
Workshop / Production → Packing

/admin/production/packing — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/production/packing Outlined in the image: Workshop / Production → Packing

Figure 96 Workshop / Production → Quality Control
Workshop / Production → Quality Control

/admin/production/quality — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/production/quality Outlined in the image: Workshop / Production → Quality Control

Figure 97 Workshop / Production → Tailoring Station
Workshop / Production → Tailoring Station

/admin/production/tailoring — opened as qc_officer (naveed.anwar@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as qc_officer /admin/production/tailoring Outlined in the image: Workshop / Production → Tailoring Station

Logistics & Shipping · 4 screens

Figure 98 Logistics & Shipping → COD Cash Custody
Logistics & Shipping → COD Cash Custody

/admin/shipping/cod — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/shipping/cod Outlined in the image: Logistics & Shipping → COD Cash Custody

Figure 99 Logistics & Shipping → Karachi Rider Manifests
Logistics & Shipping → Karachi Rider Manifests

/admin/shipping/manifests — opened as rider (kashif.ali@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as rider /admin/shipping/manifests Outlined in the image: Logistics & Shipping → Karachi Rider Manifests

Figure 100 Logistics & Shipping → Proof of Delivery (POD)
Logistics & Shipping → Proof of Delivery (POD)

/admin/shipping/pod — opened as finance (shahid.kamal@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finance /admin/shipping/pod Outlined in the image: Logistics & Shipping → Proof of Delivery (POD)

Figure 101 Logistics & Shipping → Shipments Board
Logistics & Shipping → Shipments Board

/admin/shipping/shipments — opened as finishing_packing (junaid.habib@rusukh.pk). The outlined entry is where this screen lives in the sidebar.

signed in as finishing_packing /admin/shipping/shipments Outlined in the image: Logistics & Shipping → Shipments Board

The customer's own account

The portal is a separate application behind a separate guard, and every query in it is scoped to the signed-in patron. A customer cannot see another customer's order, cannot select one in a dropdown, and cannot reach one by editing a URL.

The payment sequence at the end is real. A payment was genuinely taken during the capture run against a seeded balance, and the receipt in the figure is the one that transaction produced.

Figure 102 The customer dashboard
The customer dashboard

What a patron sees on signing in: their own orders, their own balance, their own next appointment. Every query behind this page is scoped to the signed-in customer. Signed in as ahmed.raza@gmail.com at /account.

signed in as customer /account Outlined in the image: The customer dashboard

Figure 103 My orders
My orders

A customer sees only their own orders. This is enforced in the query, not by hiding rows in the view — the browser suite asserts that another customer's order never appears here. Signed in as ahmed.raza@gmail.com at /account/orders.

signed in as customer /account/orders Outlined in the image: My orders

Figure 104 Approvals the customer owes
Approvals the customer owes

Where the patron signs off a specification before cutting begins. Until they do, G3 holds the cutting desk — this screen is the other end of that gate. Signed in as ahmed.raza@gmail.com at /account/orders/approvals.

signed in as customer /account/orders/approvals Outlined in the image: Approvals the customer owes

Figure 105 My measurements
My measurements

Stored measurement profiles, and the history of how they have changed. Signed in as ahmed.raza@gmail.com at /account/measurements.

signed in as customer /account/measurements Outlined in the image: My measurements

Figure 106 Submitting measurements
Submitting measurements

The self-service measurement wizard. Progress is drafted per customer as they go, so a patron who closes the tab half way through does not start again. Signed in as ahmed.raza@gmail.com at /account/measurements/new.

signed in as customer /account/measurements/new Outlined in the image: Submitting measurements

Figure 107 Appointments
Appointments

Doorstep measurement and fitting visits, requested and tracked by the customer. Signed in as ahmed.raza@gmail.com at /account/appointments.

signed in as customer /account/appointments Outlined in the image: Appointments

Figure 108 The payment centre
The payment centre

Where a patron pays their own advance or balance. The amount is decided by the server — the advance, capped at what is actually outstanding — and not typed in by the customer. Signed in as ahmed.raza@gmail.com at /account/payments.

signed in as customer /account/payments Outlined in the image: The payment centre

Figure 109 Alterations
Alterations

Alteration requests and their progress, including work under the 15-day fit guarantee. Signed in as ahmed.raza@gmail.com at /account/alterations.

signed in as customer /account/alterations Outlined in the image: Alterations

Figure 110 Feedback and complaints
Feedback and complaints

Where a complaint enters the system and becomes a tracked record with an owner. Signed in as ahmed.raza@gmail.com at /account/feedback.

signed in as customer /account/feedback Outlined in the image: Feedback and complaints

Figure 111 Notification preferences
Notification preferences

Which channels the patron agrees to be contacted on. Signed in as ahmed.raza@gmail.com at /account/notifications.

signed in as customer /account/notifications Outlined in the image: Notification preferences

Figure 112 Profile and addresses
Profile and addresses

Identity and delivery addresses. CNIC and bank fields are encrypted at rest through Laravel's encrypted cast, keyed by APP_KEY. Signed in as ahmed.raza@gmail.com at /account/profile.

signed in as customer /account/profile Outlined in the image: Profile and addresses

Figure 113 Paying — choosing the order
Paying — choosing the order

The dropdown holds only this customer's own orders. The amount is not an input: the server charges the advance, capped at the remaining balance.

signed in as customer /account/payments Outlined in the image: Only this customer's own orders appear here

Figure 114 Paid — the receipt this run produced
Paid — the receipt this run produced

A real payment, taken through the browser during this capture run, against a real seeded balance. The transaction listed on this screen is the one it created — an RCP- receipt number issued by the application, not a mock-up.

signed in as customer /account/payments Outlined in the image: The receipt this capture run produced

Figure 115 Validation — nothing outstanding to pay
Validation — nothing outstanding to pay

The first order in the list is freshly booked and not yet priced. Submitting against it is refused on screen with a plain explanation. This exact path used to be an uncaught 500; it is now a message, and a browser test keeps it that way.

signed in as customer /account/payments Outlined in the image: Refused politely — not a server error

The same screens on a phone and a tablet

Three widths are supported and all three are tested: 375, 768 and 1440. The figures below are the same screen at each, and each was checked programmatically for horizontal overflow at the moment it was photographed — the check the whole responsive requirement comes down to in practice.

This is a sample rather than the whole proof. Every screen tagged responsive in the browser suite runs at all three widths on every run; that is 261 browser tests, not three pictures.

Figure 116 Mobile — 375px — the orders board
Mobile — 375px — the orders board

The same screen at 375px. Checked programmatically during this capture for horizontal overflow: none. The navigation collapses to a drawer below the desktop breakpoint rather than being hidden or scrolled off.

signed in as super_admin /admin/orders Outlined in the image: 375px — no horizontal overflow

Figure 117 Tablet — 768px — the orders board
Tablet — 768px — the orders board

The same screen at 768px. Checked programmatically during this capture for horizontal overflow: none. The navigation collapses to a drawer below the desktop breakpoint rather than being hidden or scrolled off.

signed in as super_admin /admin/orders Outlined in the image: 768px — no horizontal overflow

Figure 118 Desktop — 1440px — the orders board
Desktop — 1440px — the orders board

The same screen at 1440px. Checked programmatically during this capture for horizontal overflow: none. The navigation collapses to a drawer below the desktop breakpoint rather than being hidden or scrolled off.

signed in as super_admin /admin/orders Outlined in the image: 1440px — no horizontal overflow

The verification record

What has actually been run against the code these screenshots came from, on 2026-09-05 against PHP 8.2.28. The full procedure, including how to re-run each suite and how to tell a real failure from a saturated dev server, is in 04-TESTING-AND-VERIFICATION.md.

SuiteWhat it provesResult
Pest — unit & featureEvery screen against every role, the money chain, the state machines2716 passed, 0 failed
13,372 assertions
Pest — concurrencyTwelve documented races, with real OS processes at a wall-clock barrier28 passed, 0 failed
ArchitectureModule boundaries, no float money, no raw status queries, no hand-built Actions267 passed, 0 failed
PlaywrightA real browser at 375, 768 and 1440262 passed, 0 failed
Clean installmigrate:fresh --seed from an empty databaseno error
Seeded gate integrity151 gates re-evaluated from 569 evidence rows151 of 151 passing

Nothing was skipped, deleted or weakened to reach those numbers. A suite that goes green by removing a test proves less than the red one it replaced — and this project has been bitten more than once by a test that passed while covering nothing at all.

The rest of the handover