Version 0.2 · 24 October 2026 · Planning baseline for review
Help flooring businesses turn measured scope and material/labour costs into traceable client proposals. This pack defines an intended product, not delivered production functionality. The existing repository contains an incomplete early estimator scaffold; these designs and stories do not imply that its features are implemented.
Native Figma tools were not exposed in this session. Nine editable SVG boards and a local gallery accompany this specification. Nothing has been published to Figma, and no live system settings or user permissions have been changed.
Confirmed: Administrator is a technical role. Project Manager primarily reviews assigned projects; can comment, sign off, reject/decline, and propose changes to material/labour elements. Those changes return to the user managing the original proposal. They do not silently overwrite that user's submitted proposal.
Planning assumptions: one company at launch; roles can be combined explicitly; original proposal manager owns revisions and issuance; all required reviewers must sign the exact version before issue; administrator privileges do not automatically grant pricing or approval authority. Project Manager sees selling prices and may propose rates for authorised line types, but supplier-only costs and aggregate profitability are hidden by default pending confirmation. Currency USD and imperial measurements in examples. Brand Floorwise / Oak & Co. is illustrative.
Not yet agreed: commercial authority for rates and approval thresholds; PM access to internal costs and margin; whether the same person may prepare and approve; required reviewer count and delegation; permitted client detail visibility; tax jurisdictions; eventual client portal/acceptance. These are business decisions, not implied approvals.
All access is company-scoped, assignment-scoped and checked by the backend, including files, exports, comments and search results. Default deny. Assignment alone does not grant financial capabilities.
| Capability | Administrator | Proposal manager | Project Manager | Client (future) |
|---|---|---|---|---|
| Manage users, role assignments, technical integrations | Yes, audited | No | No | No |
| View project records | Metadata for support; content requires explicit project access | Assigned | Assigned | Issued proposal only |
| Create and edit scope / measurements | Separate business capability | Assigned draft | View and comment | No |
| Edit submitted proposal | No direct overwrite | New revision only | No | No |
| Edit material/labour lines | Separate business capability | Assigned draft | Proposed changes only | No |
| View internal costs / margin | Separate financial capability | Granted financial capability | Hidden pending decision | Never |
| Comment and reply | Accessible projects | Assigned | Assigned | Deferred |
| Submit for review / reconcile changes | No by technical role alone | Yes | No | No |
| Sign off designated versions | Separate reviewer capability | Only if explicitly assigned and policy allows | Yes | No |
| Reject/decline review | Separate reviewer capability | If assigned reviewer | Yes; reason required | Client decision is separate |
| Issue client proposal | Separate issuer capability | Yes after required sign-offs | No by default | No |
| Change global catalog / pricing | Separate commercial capability | Optional commercial capability | No | No |
| View audit trail | Technical events; business events require access | Assigned project | Assigned project | No |
| Erase review history | No | No | No | No |
Administrator role changes are audited. Recommended governance: administrators cannot silently self-grant commercial powers; sensitive grants require a designated business authority. The identity of that authority must be confirmed before production.
Suggested capability keys: system.users.manage, system.integrations.manage, project.read, proposal.draft.edit, proposal.submit, proposal.issue, review.comment, review.propose_change, review.signoff, review.reject, financial.read_cost, financial.read_margin, catalog.manage, pricing.configure. Role bundles remain configurable; object-level scope remains mandatory.
| Screen | User / entry | Primary journey | Success / exception |
|---|---|---|---|
| 00 Brand kit | Design and implementation team | Apply plank mark, neon/charcoal palette, tokens and copy rules | Consistent controls and status language |
| 01 Project overview | Signed-in staff | Open assigned project or next review task | Clear owner, version, review state; empty-state guidance |
| 02 Estimate builder | Proposal manager | Job → measurements → materials/labour → costing → submit | Required fields validated; immutable version and reviewer tasks created |
| 03 PM review | Assigned reviewer | Read submitted scope/files → comment → propose edits → return, sign off or reject | Actions identify exact proposal/file version; unresolved changes block sign-off |
| 04 Owner reconciliation | Original proposal manager | Compare old/proposed values → accept or decline each with context → create next draft → resubmit | Prior version preserved; new version receives fresh review |
| 05 Administration | Technical admin | Configure roles, project access, review policies and integrations | Validated, audited changes; commercial permissions separate |
| 06 Client proposal | Proposal manager | Preview scope, selling price, terms and exclusions → export → issue | No internal costs, margin, comments or unresolved review notes |
| 07 Mobile review | PM on site | Assigned reviews → material/labour change → reason → confirm recipient | Touch-friendly controls; explicit saved/sent confirmation |
| 08 Project record | Assigned staff | Client/property → current proposal → files → review activity | Owner, reviewer, internal review and client response visible together |
Front-end states: loading, no projects, no files, draft saved/unsaved, saving failure/retry, invalid input, forbidden access, expired session, stale version/conflict, returned review, rejected review, successful sign-off, issuance failure and successful issuance. Distinguish “Return proposed revisions” from “Reject/decline submitted version.” Neither rejects the customer relationship or deletes a project.
Accessibility targets: keyboard-complete controls, visible focus, associated input labels, errors described in text, status conveyed beyond colour, sufficient contrast, screen-reader announcements for save/review outcomes, and usable narrow-screen layouts. Include confirmation of version and recipient for consequential review actions. Do not show a fake success while a request is pending. Desktop concept boards use 1440×1000; mobile board contains three 374px content-width concepts. Actual layouts must reflow, not scale screenshots.
Draft → In review → Signed off → Issued. In review may become Changes requested or Rejected/declined; the owner then creates a new draft revision and resubmits. Rejected versions remain rejected in history. “Signed off” means internal approval, not client acceptance.
| Setting | Proposed default | Authority / validation | Effect |
|---|---|---|---|
| Company branding and proposal contacts | Illustrative brand | Delegated business editor | New proposal snapshots |
| Currency and measurement system | USD / ft, ft² | Commercial authority; migration required for existing jobs | New jobs; old snapshots preserved |
| Catalog units and carton coverage | ft²; coverage required for carton products | Catalog editor; positive coverage | Round purchases to sale unit |
| Waste allowance | 10%, editable | Pricing editor; bounded nonnegative value | Materials only, not installed labour area |
| Labour and services | Per ft², hour, linear foot or fixed | Pricing editor; unit and quantity validated | Versioned rate defaults |
| Markup or target margin | 25% cost markup in examples | Commercial authority; prohibit contradictory modes | Server computes selling price |
| Minimum charge / discount thresholds | Disabled until agreed | Commercial authority | Exception approvals when configured |
| Tax categories / location rules | Illustrative materials-only tax | Authorised business editor; validate applicability before launch | Explicit tax calculation snapshot |
| Review routing | Assigned PM, all required reviewers | Admin configures approved business policy | New submissions only |
| Rejection reason | Required | Admin; workflow invariant | Submission blocked without reason |
| Internal financial visibility | Capability-based | Business authority grants; admin implements | Backend field-level response filtering |
| Proposal validity / payment terms | 30 days / example 30% deposit | Business authority | Snapshot at issue; preview before send |
| Attachments | Proposed allowlist PDF/JPEG/PNG; 20MB/file | Admin; malware and content-type validation | Private storage and scoped downloads |
| Notifications | In-app at MVP; email if configured | Admin integration; per-user preferences | Reviewer/owner task events |
| Retention and backup policy | Must be agreed before live pilot | Business authority and admin | No irreversible deletion in MVP UI |
Configuration edits record old/new values, actor and effective date. No catalog update retroactively reprices issued proposals. Preview configuration changes before saving. Connection secrets stay server-side and are never returned in UI or logs.
Installed area is the sum of valid room areas; purchases include waste and sale-unit rounding. Labour uses its configured measurement basis, not automatically the purchased material quantity. Use decimal-safe money calculations, named rounding rules and a versioned calculation policy shared by UI preview and server.
Illustrative baseline: installed area 400 ft²; purchase 440 ft²; material $3.85/ft² = $1,694; labour $2.75/ft² = $1,100; removal $500; prep $300; trim $250. Direct cost $3,844; 25% markup $961; subtotal $4,805; sample tax 8.25% on marked-up materials $174.69; client total $4,979.69. Estimated margin before overhead is 20%. This excludes unconfigured overhead or contingency.
Illustrative PM revision: material rate $4.10 and labour $3.00, unchanged 440 ft² purchase quantity. Direct cost $4,054; markup $1,013.50; subtotal $5,067.50; material tax $186.04; total $5,253.54, an increase of $273.85. Carton rounding is a separate capability; these examples assume sale by square foot.
Production services: relational database; identity/session service; server-side authorisation; deterministic calculation service; private versioned attachment storage; proposal/PDF service; audit records; transactional outbox for notification tasks; operational monitoring. Infrastructure/vendor selection remains open.
| Endpoint concept | Behaviour / guard |
|---|---|
GET /projects |
Filter company and assignment server-side |
POST /projects |
Create with owner and permitted reviewers |
POST /estimates/calculate |
Validate inputs and return authoritative totals; no privilege bypass |
PATCH /estimates/:id/draft |
Draft-edit capability and version precondition |
POST /estimates/:id/submit |
Snapshot draft; create review assignments atomically |
POST /reviews/:id/proposed-changes |
PM-owned proposals only; validate permitted fields |
POST /reviews/:id/return |
Required owner recipient and unresolved-change summary |
POST /reviews/:id/signoff |
Exact version and mandatory checks; idempotent |
POST /reviews/:id/reject |
Required reason, assigned reviewer and exact version |
POST /estimates/:id/reconcile |
Owner-only decision on each proposed change; new draft |
POST /proposals/:id/issue |
Current sign-offs, issuer capability and snapshot verified |
GET /files/:id/download |
Scoped, short-lived access; no predictable public file URL |
PATCH /configuration/:section |
Section-specific capability, validation and audit |
HTTP semantics: 400 malformed request; 401 unauthenticated; 403 unauthorised; 404 absent or concealed inaccessible record; 409 stale/conflicting transition; 422 valid syntax with invalid business data. Responses include correlation ID and structured field errors, never secrets.
Core entities: Company, User, Role/Capability, Project, ProjectAssignment, Client, RoomMeasurement, CatalogItem, RateVersion, Estimate, EstimateRevision, LineItemSnapshot, ReviewAssignment, ProposedChange, Comment, FileVersion, SignOff, ProposalSnapshot, AuditEvent, NotificationOutbox. IDs and company boundaries must be enforced across all relations.
Points are relative team estimates using 1/2/3/5/8. They include implementation, relevant tests and review; they are not hours or commitments. Re-estimate after technical discovery. Stories of 8 points should be split if the team cannot complete them within one sprint. Sprint allocations below are dependency groupings, not calendar promises; no team velocity or capacity has been supplied.
| Milestone | Tentative sprint grouping | Points | Exit gate |
|---|---|---|---|
| M0 Discovery and design agreement | S0 | 8 | Roles, PM visibility, calculation policy, prototype and acceptance criteria agreed |
| M1 Secure project foundation | S1–S2 | 34 | Login, assignment-scoped API, persistent projects and auditable configuration pass negative access tests |
| M2 Estimating alpha | S3–S4 | 29 | Measurements, sale-unit rounding, rate snapshots and calculations verified against fixtures |
| M3 Review and revision beta | S5–S6 | 37 | PM → owner → resubmit flow, conflicts and sign-off invalidation verified end to end |
| M4 Proposal release candidate | S7 | 16 | Client-safe PDF, issuance gate and failure/retry paths pass |
| M5 Pilot and deployment | S8–S9 | 26 | UAT, access/accessibility checks, backup restore, monitoring and rollback demonstrated |
| Total planning baseline | 10 sprint labels, variable duration/capacity | 150 | Reforecast using observed team velocity |
M0 gates final access model; M1 gates real data. M2 precedes review of financial revisions. M3 precedes issuance. M4 precedes a live pilot. Do not treat story point totals as evidence that a fixed number of sprints is achievable.
Environment progression: local fixtures → development → staging with synthetic data → limited pilot → production. Use independent secrets, storage and databases; repeatable migrations; CI checks for calculations, workflow transitions, permissions and client output. Proposed targets for pilot: measured save/calculation p95 under 1 second under agreed load, explicit user feedback for longer PDF generation, and no lost committed revisions in restore rehearsal. Confirm actual service targets during M0.
Release procedure: record release and migration versions; verify backup and restore path; deploy additive migrations and application; smoke-test sign-in, assignment isolation, calculate, review, reconcile, issue and PDF; check logs/alerts; enable limited pilot; expand after UAT. Roll back application to the previous compatible version if access isolation, totals, sign-offs or issuance fail. Database recovery must use a rehearsed plan; do not blindly reverse destructive migrations. A named business reviewer and technical release owner must approve the pilot gate.
Every story meets its listed acceptance criterion, relevant backend tests, reviewed access checks, accessible error states and updated documentation. Review stories prove stale versions cannot be signed or issued. Client output tests assert absence of cost, profit, internal notes and private file links. Integration failures surface retryable states without duplicate notifications or proposals. Historical versions remain readable after catalog and workflow configuration updates.
Deferred scope: supplier/CRM/accounting sync, payments, e-signatures, client accounts, actual job-cost reconciliation, advanced reporting, multi-company SaaS billing and offline editing. These are not included in the 150-point baseline.
The revised mockups use Jobber's quote record, actionable work list, line-item and activity patterns as UX references. Sources: Quote Basics and Quote Approvals, reviewed 24 October 2026. The internal PM review loop is Floorwise's custom workflow. Jobber's brand and screen assets are not reused.
The nine-board pack adds a consolidated project record and a niche flooring brand kit. Neon #B6FF3B, charcoal #161B18 and a staggered-plank mark replace the earlier soft-green styling. Internal review and client response are separate states. Sign-off is disabled while proposed changes or required file reviews remain open. Technical Administrator permissions remain separate from commercial authority. See brand-kit.md and tokens.json for the design specification.
The gallery is a navigable concept, not an implemented production app. The backlog remains 26 stories / 150 provisional points. Financial-visibility decisions remain open; new styling does not change access policy.
index.html now provides a browser-local interactive walkthrough; the earlier SVG gallery is at gallery.html. The prototype includes three personas, proposal creation and live calculations, submitted snapshots, PM material/labour proposals, comments, rejection, return to original owner, owner reconciliation, file sign-off, proposal sign-off, client preview and technical Administrator configuration. See PROTOTYPE-README.md for the walkthrough.
This implements UX behaviour only. Role switching simulates access, sample file references are generated, and all data stays in browser storage. No real authentication, multi-company isolation, uploads, notifications or backend security is delivered by this prototype. Capability changes act immediately; mandatory-file policy is snapshotted per submission. Material/labour rates are visible to the PM for the demonstration; internal profitability is hidden by default and configurable. The production permission decisions remain open.
Plans apply to the workspace. Roles and explicit finance permissions apply to individual users. Prices, seat allowances and storage/usage quotas remain open commercial decisions; no charges or purchases occur in the prototype.
| Capability | Basic | Moderate | Premium |
|---|---|---|---|
| Client/job records, material and labour costing, draft estimates, printable preview | Yes | Yes | Yes |
| PM comments, proposed changes, return to original owner, version/file sign-off | — | Yes | Yes |
| Technical administrator configuration | Yes | Yes | Yes |
| Invoicing, receipts, supplier bills, bookkeeping summaries | — | — | Yes, with finance permission |
Default is Moderate to preserve the existing review walkthrough. Downgrading retains records but blocks premium accounting and Basic review mutations. Existing data is not deleted. The plan selector is a demo control available in every role; production subscription changes require a separate billing-owner permission and authenticated billing service. Basic produces draft estimate previews; it does not bypass PM approval or issue an approved proposal.
Premium navigation adds Accounting. The designated finance operator (Jamie in the prototype) selects a signed-off project, creates an invoice, records a partial/full receipt, enters project-linked supplier bills, records bill payments, and marks cashbook entries cleared. PM and technical Administrator receive an access-restricted view even on Premium. Production finance permission must be independently granted by an authorized business owner and checked server-side; proposal-manager status alone must not grant finance access.
Invoice amounts and version are snapshotted. Duplicate project invoices and overpayments are blocked. A draft/new revision cannot be invoiced until signed off. This prototype allows one invoice per project; progress billing, adjustments and credit notes are future work. Payments never move money. Bills currently use a single total with no input-tax recovery. Summary revenue excludes output tax; recorded costs may be incomplete. Clearing is manual statement confirmation, not full bank reconciliation. Browser data is not a double-entry ledger or production accounting system.
CosmoLex connects billing, expense tracking, accounts payable, banking and reports. Use this information architecture with flooring jobs replacing matters, alongside the established Jobber-inspired work lists. Do not import legal trust-accounting or compliance claims into this product.
Primary references reviewed October 24, 2026: - CosmoLex general accounting: business bills, bank imports/reconciliation and reports. - CosmoLex accounts payable: bill entry and recording payment.
These estimates add to the existing 150-point proposal backlog; they are provisional relative sizing, not delivery dates. Accounting adds 68 points (218 total proposed scope). Validate with engineering and a qualified accounting reviewer before commitment.
| Milestone / story | Points | Dependency / acceptance |
|---|---|---|
| Workspace plan entitlements and billing-owner controls | 8 | Server-enforced plans; retained data on downgrade; no subscription/role privilege escalation |
| Independent finance permission and audit trail | 5 | Entitlements; tenant isolation; PM/admin denied by default |
| Approved-version invoice issuance | 8 | Existing sign-off flow; immutable invoice numbers and totals; idempotency |
| Partial receipts and payment allocation | 5 | Invoices; prevent overpayment and duplicate webhook receipts |
| Vendor bills and project cost allocation | 8 | Finance permission; tax treatment and payable state validated |
| Double-entry ledger and reversal/credit-note controls | 13 | Invoice/bill events; balanced journals; no silent posted edits |
| Statement import, matching and period reconciliation | 8 | Ledger; opening/closing balances; duplicate detection; close locks |
| AR/AP, job profitability and financial reports | 8 | Ledger; totals tie out; date/currency/tax semantics reviewed |
| Accounting pilot, recovery and release checks | 5 | Reconciliation/report sign-off; backup restore; permission and tenant tests |
Front end: sales-site plan comparison (outside the bidding workspace), workspace access explanations, finance workspace, invoice detail, payment allocation, vendor bill entry, statement reconciliation and report filters. Back end: tenant-scoped subscriptions/entitlements, finance grants, invoice/line/tax records, payment allocations, bills, journal entries, statement lines, reconciliation periods and immutable audit events. Use integer minor units and explicit currency; server validation and idempotency on every financial write. Financial events must post atomically with their ledger entries. Production APIs should cover invoices, payments, bills, journals, statement imports, reconciliations and reports; payment-provider callbacks require signature verification and retry-safe processing.
Release in dependency order: entitlements/security → invoices/payables and ledger → bank reconciliation/reports → controlled pilot. No live banking, payment processor, payroll or tax filing is included in the current local prototype.
The home page now provides Design & surface, Square footage, Materials & itemization, and Service agreement entry points for the selected project. Scope setup captures pattern, substrate condition, installed area, supplier/material reference, service level, inclusions, exclusions/change process, target start, expected duration and deposit percentage. Saving area recalculates square-foot line quantities with existing material waste; allowances remain fixed. Users must verify quantities and service lines agree with the narrative scope.
A draft agreement is derived from the current estimate, showing itemized selling prices, tax, total, effective price per installed square foot, service commitments and payment split. Submission freezes the scope with its proposal version. Internal PM review is separate from client, contractor representative and PM stakeholder acceptance. Moderate/Premium enable simulated signature records after internal sign-off; Basic permits draft agreement preview. Revised proposals retain earlier records but require new signatures. Admin has no signing authority. The owner can simulate client/contractor acceptance; the reviewer can simulate PM acceptance. No identity verification or actual external signature is performed.
Material file selection stores the filename only; no file bytes are uploaded or retained. Production needs secure tenant-scoped object storage, malware scanning, document version IDs and signed download URLs. The generated scope is a product prototype, not jurisdiction-specific contractual terms.
Production agreement work: server-side immutable document generation and content hash (5 points), stakeholder identity and invitation/decline flow (8), signature-provider integration with consent evidence and idempotent webhooks (8), signed PDF/audit retention and version supersession (5), secure material uploads (8). Provisional incremental 34 points beyond the prior 218-point scope, total 252. Dependencies: authenticated roles, frozen proposal versions, approved contract templates and storage. Deployment gates: verify every signer sees the exact approved document; block signing superseded versions; retain evidence and prior signed copies; test consent, decline, expiration and retry flows. Service level is project scope and is distinct from the Basic/Moderate/Premium subscription.
Membership comparison navigation is removed from the application. Plan marketing belongs on the sales website. The labelled Demo plan selector remains only for prototype testing; production bidding screens use the workspace entitlement without a plan-shopping flow.
Current demo UI: all subscription selection and membership comparison controls are removed from the bidding workspace. This walkthrough uses Premium capabilities automatically; underlying tier authorization remains for future sales-site integration.
The separate onboarding.html console is a local prototype for platform operations. Membership entitlements appear only here, outside the bidding journey. Client metadata includes company, owner contact, entitlement and Toronto/CAD/HST settings. No invitation emails, infrastructure provisioning, tenant authentication or shared databases are implemented. The role selector simulates a selected client's owner and is not an authorization mechanism. Existing bidding data is not attached to these client records.
| Role | Permitted scope | Explicit exclusions |
|---|---|---|
| Platform onboarding operator | Client metadata; onboarding configuration and training checklist; activate after owner acceptance; suspend/resume with audit | No proposal, agreement, accounting contents or owner consent impersonation |
| Platform support | Client service status; request one-hour configuration diagnostics access | No self-approval, financial/job contents, commercial decisions or client lifecycle writes |
| Tenant owner | Own tenant onboarding acceptance, support consent/denial/revocation; production membership and privileged grant authority | No other tenants or platform lifecycle authority |
| Tenant technical Administrator | Own tenant technical configuration and delegated membership administration | Cannot grant itself finance or owner authority; no automatic commercial sign-off |
| Proposal manager | Assigned tenant/job proposal authoring, revisions, client issue workflow | No platform or implicit finance authority |
| Project Manager | Assigned submitted proposals, comments, material/labour change suggestions, file/proposal review | No original-draft mutation, finance or platform administration |
| Finance operator (separate grant) | Tenant invoices, receipts, supplier bills, approved financial reports | No cross-tenant data or automatic PM sign-off |
| Client signer | Explicitly invited document/version only | No tenant-wide navigation or other project records |
Production authorization rule: authenticated identity + tenant membership + entitlement + operation grant + resource assignment. Tenant identity must be derived from a verified session/membership, never trusted from a browser parameter. Tenant-owner simulation in this prototype is not a test of authentication or cross-tenant access prevention.
Support grants must bind tenant, named support identity, ticket, permitted resources/actions, owner approver, expiry and revocation. Read-only configuration diagnostics is the initial scope. Tokens must not contain cached authority that survives revocation. Suspension denies client activity and revokes grants. Server time determines expiry. Audit records are append-only and include actor, tenant, action, result and correlation ID, excluding secrets. Support sees masked contact/configuration details until authorized; financial or document access needs a separately designed consent process.
Production schema: tenants, users, memberships, role_grants, onboarding_tasks, invitations (hashed one-time token + expiry), support_requests, support_grants and audit_events. Every business row carries tenant_id; cross-tenant foreign keys must be rejected. Required tests include forged tenant IDs, removed membership, assignment bypass, expired/revoked grants and concurrent onboarding activation. Deployment environments remain development/staging/production, distinct from tenant workspaces.
Prototype journey: create a fictional company → switch to Tenant owner and accept simulated invitation → switch to Platform onboarding and complete configuration/training → activate → switch to Platform support and request diagnostics → Tenant owner approves one hour → support can view configuration → owner revokes. A second client retains a separate checklist and audit history. No email is sent and no real client is provisioned.
Incremental implementation planning (provisional): tenant authentication/membership 13 points; server-side isolation and adversarial tests 13; owner invitation flow 8; backend lifecycle/provisioning 8; time-bound support grants 8; audit/operational pilot 5. Total 55 additional points, to be re-estimated after backend design. Ticketing follows onboarding and is not included in this console.
Active clients now open their own bidding workspace from Tenant owner mode in the onboarding console. URL parameter tenant selects a registered active client; each client has separate browser storage for proposals, reviews, agreements, accounting, configuration and UI state. The original Toronto demo remains separate. Workspace entitlements follow the client record, so Moderate has no accounting access and Premium does. Platform support/onboarding modes do not offer a business-workspace link. Unknown/inactive clients and mismatched persisted tenant IDs fail closed in the normal UI; suspension is rechecked before writes and on registry updates in other tabs.
This is prototype data partitioning, not a security boundary: the role switcher and local storage can be altered by the browser user. Records are not shared across browsers/devices; file, localhost and Cloudflare origins keep separate registries. No real accounts or cloud resources are created. Production still requires authenticated tenant membership, database row-level access enforcement, server authorization and audit logging. Old wording that client metadata is not linked to bidding records is superseded by this browser-local implementation.