F. BINSABBAR / Internal operations

System Console

Live overview. Automatically refreshed every 60 seconds.

Overall status

Checking systems...

Reading operational signals.

Checking active alerts...
Updated -
Console section

Operator briefing Prioritized

Reading live signals
Building your action list...
Functions, access, notifications, data, and integrations are being checked.

System status Live

Open Issues & Fix Plans Scanning…

Cloud Functions Health Awaiting first probe

-
Deployed
Reading function inventory
-
Mapped
Grouped for review
-
Coverage
Of deployed functions
-
Unmapped
Must be grouped
Status

Recent Function Calls Awaiting first probe

Every Cloud Function invocation in the last 60 minutes, newest first. Tap a chip to filter by function.

Loading…

External Integrations Awaiting first probe

Data Integrity Awaiting first probe

Security Rules Superset Awaiting first probe

The Firestore + Storage rules deploy atomically and must stay a SUPERSET of every app's blocks (Studio, brand-book tools, System Console). This checks the LIVE deployed ruleset for every required match block and confirms no root deny-all catch-all is shadowing them.

Security & Access Awaiting first probe

Secrets & Credentials Awaiting first probe

Every secret expected by runtime declarations and Common/secrets.md is cross-checked against Google Secret Manager for presence, latest-version age, and rotation status. Values are never read. Runtime secrets missing from the document are surfaced as documentation drift.

System Console Access Requirements Awaiting first probe

All three checks are required. The browser gate and every privileged backend callable fail closed when any check is missing.

Requirement 1
Firebase sign-in
A valid account in the shared Firebase Auth pool.
Requirement 2
AMBASSADOR PLUS
The role stored on users/{uid}.role.
Requirement 3
Developer access
developerAccess: true on the same user record.

Recent access attempts - Live

Loading…

Roles & Access Review Awaiting first probe

Every staff role assignment in one place. Tap a row to see the full member list with their last sign-in.

Audit Trail Loading…

Every create, update, and delete to the high-value collections (invoices, payments, staff accounts, clients, jewellery, visits, pricing…), captured by server-side triggers - including writes made by the app, the web tools, background jobs, and external sync. Each entry shows who, what changed (before/after), and when.

Collection
Time window
Open this tab to load the audit trail.

Audit Settings Loading…

Turn audit logging on or off and choose which collections are recorded. Changes apply within about a minute. Noisy derived writes (search keywords, heartbeats, ZATCA archival) are always skipped to keep the log readable and cheap.

Loading settings…

This month at a glance Awaiting first probe

Every cost source across FB Ambassadors, F. BINSABBAR Studio, Online Store, Marketing, and the System Console itself. GCP rows fill from Cloud Billing - BigQuery export when enabled; everything else is editable here.

By app -

By integration -

Tap a row to set the monthly target and record this month's actual spend. GCP rows auto-fill once billing export is enabled.

12-month trend Spend by month, SAR

Per-unit rates For estimated-cost integrations

Variable-cost integrations multiply rate x volume. Volumes come from Firestore where wired (WhatsApp conversations), otherwise manual.

Settings Alert thresholds · billing export

Image Generator -

AI image tool (Recraft, ~$0.04/image). Daily spend resets at midnight Riyadh time. Set the daily cap below; the per-user cap is automatic (daily limit divided by eligible users) and the wallet balance syncs live from Recraft. PLUS users are alerted once at 80% of the wallet.

Delivery Overview Loading...

System alerts target visible AMBASSADOR PLUS users with developerAccess: true. Business alerts use their own role or capability audience.

Notification Readiness Audience and token checks

Loading notification audience...

Recent Alerts Sent Loading... Live

Every recorded push and governed alert email, newest first. Open an entry to see the intended audience, active tokens, delivery result, and source link.

Loading...

ZATCA Warning Cases Loading... Live

Accepted documents stay accepted. Track recurring warnings, SLA status, remediation notes, and resolution evidence here without resubmitting them.

Loading ZATCA warning cases...

ZATCA Rejected Documents Loading... Owner action

Create a short-lived digest-bound preview, then execute one append-only corrected document. Payment, invoice number, commercial lines, and the rejected evidence remain unchanged.

Loading rejected ZATCA documents...

ZATCA Bound Reconciliation Loading... Two-person approval

Reconcile an ambiguous bound event from digest-verified private evidence. Preview and approval never submit to ZATCA. Execution requires a different AMBASSADOR PLUS reviewer and preserves captured payment.

Loading bound reconciliation cases...

Fix History Loading… Live

Loading…

Database Backups Awaiting first probe

Database Writes Awaiting first probe

Loading…

Live Activity Reading invoices, clients, jewellery records Live

Loading…

About the Fix Agent Production architecture

Live · Backend agent with snapshot, audit, and rollback

Production

What runs. Each Run-Fix click calls a server-side Cloud Function (runFixAgent) that authenticates the caller, verifies AMBASSADOR PLUS plus developer access, checks the kill-switch, snapshots affected docs, executes the playbook, then writes an audit entry. Outcome pushes target eligible System Console operators.

Tier 1 · Safe Auto · LIVE
  • Mailchimp invariant patches ✓
  • ID-dedup audit (read-only) ✓
  • Re-fire idempotent webhooks (next)
  • Re-run failed PDF gen (next)
Tier 2 · Confirm First
  • Bulk re-issue invoice PDFs
  • Patch missing fields on documents
  • GLB texture-only re-optimization
  • Bump CF min-instances for 24h
Tier 3 · Advisory Only · NOT IN REGISTRY
  • ZATCA clearance & invoice money paths
  • Schema migrations
  • Secret & credential rotation
  • Auth or permission changes

Disaster recovery. Every mutation snapshots the affected docs to _systemAlerts/fixSnapshots before writing. The Undo button on any history entry restores from the snapshot atomically. The whole agent can be killed by setting _systemAlerts/control.fixAgentEnabled to false in the Firestore console.