feat: add privacy policy notice to chat interface - #192
Merged
Conversation
- Redesign the frontend chat widget (header with avatar/name/status, modern bubbles, pill input, refined launcher, entrance animation). - Add a global "Chat Sound" toggle and a per-visitor mute control in the chat menu; remove the open/close click sound. - Add a "Message Timestamp" show/hide toggle. - Show the welcome message and suggested questions on first load of the inline chat block. - Inline the chat-button SVGs server-side (no runtime fetch / icon flash) and use a bundled SVG as the default icon instead of an emoji. - Keep the typing dots, suggestion chips, and menu legible on similar colors, and theme the menu from the chat colors. - Resolve outstanding PHPStan issues (gmdate guard, require_once ignore).
Reveal the assistant's reply progressively over Server-Sent Events, with a graceful fallback to the existing background + polling flow on hosts that buffer or cannot stream, so the bot keeps working everywhere. - Add a custom admin-ajax streaming endpoint (Stream) that proxies OpenAI's stream to the browser; the API key stays server-side. - Share a single prompt, JSON schema and response interpreter across the streaming and poll paths so replies never diverge by transport. - The widget tries streaming first and falls back to polling when no event arrives in time; the outcome is cached per browser and re-probed after 24h. - Decode the streamed `response` field incrementally via json_decode so escapes and surrogate-pair emoji render correctly while streaming. - Preserve existing contracts: moderation stays up front, hyve_chat_request and hyve_chat_response fire once per reply, analytics unaffected. Closes Codeinwp/hyve#183
- Redesign the frontend chat widget (header with avatar/name/status, modern bubbles, pill input, refined launcher, entrance animation). - Add a global "Chat Sound" toggle and a per-visitor mute control in the chat menu; remove the open/close click sound. - Add a "Message Timestamp" show/hide toggle. - Show the welcome message and suggested questions on first load of the inline chat block. - Inline the chat-button SVGs server-side (no runtime fetch / icon flash) and use a bundled SVG as the default icon instead of an emoji. - Keep the typing dots, suggestion chips, and menu legible on similar colors, and theme the menu from the chat colors. - Resolve outstanding PHPStan issues (gmdate guard, require_once ignore).
# Conflicts: # inc/Main.php # src/frontend/App.js Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>
…g-responses Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>
Adds an optional, dismissible privacy notice above the chat input that links to the site's Privacy Policy page. Off by default, toggled from Settings > General, and hidden when no policy page is set (with an admin warning). The notice is theme-aware and, in the free version, replaces the 'Powered by Hyve' credit until dismissed. Dismissal (via the close button or sending a message) is remembered per browser. Includes PHP unit and Playwright e2e coverage.
abaicus
approved these changes
Jul 8, 2026
HardeepAsrani
changed the base branch from
feat/streaming-responses
to
development
July 8, 2026 20:26
Member
Author
|
@copilot resolve the merge conflicts in this pull request |
…acynotice Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>
Member
Author
|
@copilot resolve the merge conflicts in this pull request and fix possible JSLint/PhpLint and PHPCS errors. |
Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>
Addressed in 672255a. I verified there are no remaining conflict markers locally, fixed the JS lint failure in |
Member
Author
|
@copilot resolve the merge conflicts in this pull request |
…acynotice Co-authored-by: HardeepAsrani <2649903+HardeepAsrani@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
A small, dismissible privacy notice in the chat widget "By chatting, you agree to our Privacy Policy." shown just above the input, with a shield icon and a close button.
This is the chat-UI follow-up to Codeinwp/hyve#250 (the disclosure side was handled in #187; this surfaces it inside the widget, like many chatbots do).
Behavior
For developers
hyve_privacy_notice_text— the notice sentence (keep a single%sfor the link).hyve_privacy_notice_link_text— the linked label (default “Privacy Policy”).hyve_privacy_notice_url— the link target (defaults toget_privacy_policy_url()).Tests
tests/php/unit/tests/test-privacy-notice.php).tests/e2e/specs/privacy-notice.spec.js).Manual QA
Prerequisite: set a Privacy Policy page under Settings → Privacy, and have an OpenAI key configured so the chat renders.