Isolation first. Then features.
The widget is designed to sit on pages we do not control. That constraint is the security model.
Shadow isolation
The embed paints inside a closed shadow root. Host CSS and JS do not leak in. Replyfect CSS does not leak out.
Server-side secrets
Firebase Admin, Stripe, and HighLevel tokens stay in Cloud Functions. This site does not talk to Firestore.
Least location privilege
A location must be marked authorized before the widget backend is live. Inactive agencies receive no settings payload.
A person approves every write
Proposed HighLevel writes wait for a signed-in teammate. A write tool that skips that door cannot start.
Billing kill switch
A past-due invoice keeps the widget up. A canceled or disputed subscription flips the agency inactive. The assistant stops.