# Alynivo — full changelog

The most recent releases are in readme.txt, which is what the plugin
directory shows. Everything older lives here so the directory page stays
about the plugin rather than its history.

= 0.19.4 =
* The assistant now offers your own answers as buttons instead of handing visitors an empty input box. On a site without a shop the chat used to open with nothing but a greeting, so visitors had to guess what it knew — guess wrong, and it looked useless while your answers sat right there. The first click is now a guaranteed hit.
* When it genuinely cannot answer something, it says so and then shows what it does cover, before offering the enquiry form. A dead end becomes a next step.

= 0.19.3 =
* The free version now handles what people actually write. "Hi", "danke", "tschüss", "ok", "are you a bot?", "I want to talk to someone" and "what can you do?" used to fall through to "I cannot answer that reliably" plus a contact form — on the visitor's very first message, which made the assistant look broken. All of these now get a proper reply, in all six widget languages, with no AI and no cost. Asking for a person opens the enquiry form straight away.
* A greeting is only treated as a greeting when that is the whole message: "hallo, wann habt ihr offen?" still reaches your own answers.

= 0.19.2 =
* Fixed the widget never appearing on sites without WooCommerce. The page-type defaults only covered shop, product, cart and checkout, which cannot match anything without a shop plugin, so setup reported "widget is enabled" while no page of the site ever showed it. Existing installations repair themselves on update — a visibility setting that cannot match a single page is now treated as unintended and falls back to the ordinary pages.
* Fixed the assistant being suppressed entirely on a site that never opened the setup wizard. The mode defaults to "Store", and store mode refused to render without WooCommerce even though the assistant already downgrades to Service mode in that case.
* Fixed the chosen business type being discarded on the way into the database, so the suggested answers fell back to the generic set and the trade was forgotten on the next run.
* The suggested answers now follow the business type as you pick it. Previously they were built when the page loaded, so on a fresh install everyone reached step 2 with the generic suggestions no matter which trade they had clicked.
* Added "Practice & health" and "Gym & classes" as business types, and "Online shop" now gets its own shipping question even without WooCommerce.
* The settings screen no longer shows shop, product, cart and checkout options, the assistant mode picker, the recommendation limit or the product-finder statistics on sites without WooCommerce — the plugin detects the shop itself instead of asking.
* Added a "Run setup again" button to the settings screen.

= 0.19.1 =
* The setup wizard's suggested answers now follow the form of address configured for the site, so a site that addresses visitors formally no longer gets informal sentences dropped into it.

= 0.19.0 =
* Rebuilt the setup wizard so a fresh install actually answers questions. It now asks what kind of business the site is — in plain words, not "Store/Service/Both" — and then shows answers already filled in from the site itself: contact page, privacy policy, what the business does. You correct what is wrong instead of starting from an empty form.
* Answers that need a fact only you know (opening hours, delivery times) ship with an empty field and the example in the placeholder, so a sample answer can never be published by accident.
* The enquiry form is offered in the same step, with your admin address filled in.
* "Set up later" no longer throws away what you typed — it only leaves the widget switched off.
* Fixed: the German admin translation was months out of date, so parts of the settings screen appeared in English on German sites. All 356 translatable strings are now translated.
* Accessibility: the wizard step bar is keyboard-operable, panes are properly hidden, and every answer field has a label.

= 0.18.3 =
* Fixed the enquiry form and the "assistant unavailable" notice showing English text on French, Turkish, Italian and Spanish sites. Those seven strings shipped in German and English only, so visitors saw two languages in one conversation. All six built-in widget languages are complete again.

= 0.18.2 =
* Renamed to "Alynivo – Live Chat & AI Chatbot for Customer Support" so the listing says what the plugin is actually used for. Same plugin, same settings, nothing to do.

= 0.18.1 =
* Your own questions and answers now apply in every plan, not just the free one. They are checked before the AI, so a question you wrote an answer for is answered instantly, identically every time, and without using your AI allowance. Skipped once a conversation has reached the Live inbox, so an operator is never talked over.
* The enquiry form is now also offered when the AI itself cannot be reached.

= 0.18.0 =
* New in the free version: your own questions and answers. Enter up to 10 pairs under Alynivo settings; the assistant matches them directly in the visitor's browser — no AI call, no cost, nothing leaves the site. Besides the question you can add words customers actually use ("Opening hours, when open, Saturday").
* New in the free version: "Leave an enquiry". When the assistant cannot help, visitors can leave name, e-mail and message. It is sent by e-mail from your own WordPress site — nothing is stored and nothing goes to Alynivo. Includes a honeypot and rate limiting.
* Together these give the free version a real purpose on sites without a shop, where it previously had almost nothing to say.

= 0.17.2 =
* Fixed the free tier answering almost nothing on sites without WooCommerce. In Service mode the assistant replied to every question except "thanks" with a fallback that offered product recommendations — on a site that has no products. Service mode now has its own wording and no longer shows product quick replies.
* Same fix for the "assistant temporarily unavailable" message, which also pointed to a product finder that does not exist in Service mode.

= 0.17.1 =
* New: Formal address option for German. The widget's built-in German text (greeting, buttons, placeholders) defaults to "du" — sites written entirely in "Sie" can now switch it under Alynivo settings ("Formal address (German)").

= 0.17.0 =
* New: Proactive outreach (Live Chat). Optionally send a fixed opening message on your own initiative once a visitor has stayed on a page (or the site) long enough — no AI cost for the opener itself. If the visitor replies, the conversation continues exactly like any other Live conversation: real AI answer, then a human takeover whenever you want it.
* Configure under Alynivo settings: enable, wait time in seconds, the opening message, and an optional page filter.

= 0.16.17 =
* Dark Mode: the "AI" label and the AI reply bubble itself used a leftover CSS selector that never matched, so both stayed in light colors and were hard to read against the dark Inbox.

= 0.16.16 =
* Dark Mode, second pass: the composer's attach button and the saved-replies/draft pills were nearly invisible against the dark UI. Nine total elements missed by the first Dark Mode pass are now fixed.
* Fixed a long-standing bug where an AI reply shown in the widget never made it into the shared Inbox history — a database constraint silently rejected every one of those writes since the feature shipped.

= 0.16.15 =
* Mobile Inbox: fixed a layout bug that left oversized blank bands above and below the message list on phones, shrinking how much conversation history was visible at once. The header and reply bar now size to their actual content.

= 0.16.14 =
* Dark Mode fix: the message thread, the "take over to reply" bar, and a few remaining panels stayed light instead of switching to dark, most visible on mobile.

= 0.16.13 =
* New setting "Live pages in presence": see which pages visitors have open right now in the Agent Inbox, without storing anything.
* This is now independent of the existing "Page context for agents" setting, which stores a page trail on the conversation and still requires visitor consent.
* Fixes a trap in the old behaviour where enabling page context without a consent tool silently stopped the "on the site" counter entirely.

= 0.16.12 =
* Hybrid AI + Live Chat: the "AI already answered this" mirror shown in the shared inbox now carries a signed proof from the hosted assistant, instead of trusting whatever a browser sends.
* No visible change for visitors; existing conversations are unaffected.

= 0.16.11 =
* Desktop browser widget: reduced the maximum panel height from 720px to 620px for a more compact conversation window.
* The phone layout remains the same near-full-screen sheet and growing conversations still scroll inside the message area.
* The launcher icon now toggles the open chat: click it again to minimize, just like the close button.

= 0.16.10 =
* Dark Mode hotfix: Inbox, product, workspace, and profile headings remain clearly visible in the WordPress admin client.

= 0.16.9 =
* Agent Inbox: added a system-aware Dark Mode with a manual moon/sun switch.
* Dark Mode now covers conversations, loading placeholders, visitor presence, context, and the WordPress admin Inbox.
* Logo and product name link back to the Inbox.

= 0.16.7 =
* Agent Inbox presence: when viewing all websites, online visitors are broken down per site.
* WordPress agent proxy forwards the multi-site presence payload.

= 0.16.6 =
* Mobile Agent Inbox: notes and composer use 16px text so iOS Safari does not auto-zoom.
* Hardened Live Chat / AI mirror paths used by the shared inbox.

= 0.16.5 =
* Hybrid mode: AI replies are mirrored into the Live conversation so the Agent Inbox shows the full thread (visitor + AI + human).

= 0.16.4 =
* Internal notes open as a compact panel above the composer instead of a large permanent card.
* Settings sidebar: Live conversation mix stats (day/week/month) for the connected site.

= 0.16.3 =
* Removed unused Support hours card from the settings UI (hours remain API-capable for Live Chat).

= 0.16.2 =
* Reliability and cache-bust polish for Agent Inbox embeds after Live Chat rollout.

= 0.16.1 =
* While AI is answering, visitor messages are quietly mirrored into Live Chat so agents can take over without a blank thread.

= 0.16.0 =
* New: Live Chat. A real person can take over a conversation the assistant started, in the same chat window, so the visitor never has to begin again.
* New: shared inbox for the browser, phone (mobile web app), and a dedicated screen inside wp-admin.
* New: support hours. Outside them the assistant asks for an email address instead of promising a person who is not there.
* New: internal notes and file attachments on a conversation.
* Privacy: live chat conversations are stored in Germany and deleted automatically after 30 days by default; 7 and 14 days can be selected instead. Text a visitor types but never sends is never transmitted.
* Live Chat is an optional paid add-on and is off by default. Without it the widget keeps working exactly as before.

= 0.15.11 =
* Fixed a mobile chat bug: on phones, opening the on-screen keyboard could push the send button off screen, let the page behind the chat show through, and leave the keyboard hard to dismiss. The panel now tracks the visible area precisely (Visual Viewport API), keeps the composer in view, and no longer auto-focuses the input on phones so the keyboard only opens when the visitor taps the field.

= 0.15.10 =
* Fixed a fatal error on the Alynivo settings page introduced in 0.15.9 (undefined method call in the new usage-statistics card). The front-end widget was never affected.

= 0.15.9 =
* New "Chat statistics" card on the Alynivo settings page: see how many of your Managed AI messages are used this month (with a progress bar that turns amber at 75% and red at 90%), how many conversations and visitor messages the assistant handled in the last 30 days, the daily average, and a 14-day bar chart of messages per day.
* Chat usage is now counted locally alongside the existing shop funnel. As before, only counters are stored — never the content of any message.

= 0.15.8 =
* Added a compact AI disclosure and privacy-policy link inside the widget whenever Managed AI is active.
* Added automatic daily deletion of local funnel events older than 90 days and clears the scheduled cleanup on uninstall.
* Clarified that the locally generated daily session value is pseudonymous rather than anonymous.
* Fixed the setup wizard prefilling the welcome-message field with the built-in English default. Clicking through the wizard without touching the field would save that English text as an explicit override, replacing the translated per-language welcome (and the neutral Service-mode variant) on non-English sites. The field now starts empty and only saves when you type your own text.
* Pressing Enter in a wizard field now moves to the next step instead of accidentally triggering "Skip setup" (the browser's implicit form submission hit the skip button).
* The wizard now shows a live widget preview while you pick a brand color and write your welcome message, and the final step summarizes your choices (mode, color, greeting) before going live.
* Completed wizard steps are clickable to jump back, and on sites without WooCommerce the Service mode is preselected instead of the unavailable Store mode.
* The wizard's final step now mentions the optional Managed AI service with a link to alynivo.de.

= 0.15.7 =
* Setup wizard now opens every time you click Activate (deactivate → activate or a fresh install). Plugin updates do not re-trigger it. Also fixed the wizard being skipped when the setup flag was missing.

= 0.15.6 =
* Added a short first-run setup wizard after activation: choose assistant mode, brand color and welcome message, then enable the widget. Existing installs are unaffected; skip anytime to reach the full settings page.

= 0.15.5 =
* Fixed the built-in default title and welcome message always assuming a shop ("Product advisor", "...answer common store questions") even in Service mode, where there is no shop at all. Service mode now uses a neutral default title/welcome ("Assistant" / "Hi! How can I help you?") in all 6 supported languages; unaffected if you've already set your own title/welcome text.
* Made the chat panel more compact: raised the desktop/tablet height so it fills more of the available space instead of leaving a large empty margin above and below, and switched the mobile panel to a true edge-to-edge full-screen layout (no more wasted margin around it on phones).
* Fixed a mobile Safari bug where opening the on-screen keyboard could visually detach the fixed chat panel from the screen, making the site's own header/footer appear through it. The widget now tracks the real visible area with the Visual Viewport API while typing.

= 0.15.4 =
* Fixed a real access bug on non-WooCommerce sites: the settings page was registered under WooCommerce's admin menu and gated on the `manage_woocommerce` capability, which does not exist without WooCommerce active — so even site administrators were locked out of configuring Alynivo in Service mode (the mode built specifically for agencies and other non-store WordPress sites). Now uses a top-level menu with `manage_options` when WooCommerce is not active, and stays under the WooCommerce submenu with `manage_woocommerce` on shop sites.

= 0.15.3 =
* Fixed a "textdomain loaded too early" notice (WP_DEBUG, WP 6.7+): defaults() called __() for two default strings while running on plugins_loaded, before WordPress's init action. Those two strings are now untranslated literals (no compiled translation catalog exists yet, so this is not a visible behavior change) — found and fixed during a full WP_DEBUG pass on a clean install ahead of resubmission.

= 0.15.2 =
* Fixed a WordPress.org plugin review issue: brand color from the database is now re-validated with sanitize_hex_color() at output time before being interpolated into admin inline CSS (escape late). Also hardened frontend config JSON encoding.

= 0.15.1 =
* Fixed a WordPress.org plugin review issue: the settings page's inline `<style>` block is now registered and enqueued through `wp_enqueue_style()` / `wp_add_inline_style()` instead of being echoed directly into the page markup.
* Added the plugin author's WordPress.org username to the readme's Contributors list.

= 0.15.0 =
* Added a "Persona and tone" setting so the hosted AI assistant's voice (name, tone, style) can be configured per site, without touching code.
* Fixed the hosted assistant not actually receiving the "Knowledge context" text — it was sent by WordPress but silently dropped by the managed service before reaching the AI. Both fields now reach the model as clearly separated instructions.

= 0.14.0 =
* Replaced the waving-hand launcher badge/icon with a neutral speech-bubble icon (same glyph used on mavilab.de's own chat), recolored to the site's brand color.
* Fixed the "Logo always visible" launcher style so a real custom logo now shows cleanly, with no icon/badge overlapping it. Without a custom logo, the closed launcher always falls back to the neutral chat icon instead of the default Alynivo mark, since there is nothing store-specific to brand it with yet.

= 0.13.0 =
* Added Spanish as a 6th fully supported widget language (alongside German, English, French, Turkish, Italian): all 33 built-in widget strings now have a Spanish translation, and Spanish is available as a tab in the per-language override fields (title, welcome message, teaser bubble) on the settings page.

= 0.12.0 =
* WooCommerce is no longer a hard requirement. Added an "Assistant mode" setting (Store / Service / Both): Service mode runs the chat widget as a free-text AI assistant with no product catalog, for sites that are not a WooCommerce store. Store mode keeps the existing guided-selling behavior and still requires WooCommerce; Both shows the product finder and free-text chat together. Without WooCommerce active, the assistant always runs in Service mode regardless of this setting.
* Added a "Knowledge context" field: free text describing the business/services, sent to the hosted AI assistant as background for every conversation.
* Fixed the deterministic (non-AI) fallback replies to no longer offer a "Find products" quick reply in Service mode, where there is no catalog to search.

= 0.11.1 =
* Resolved all Plugin Check warnings in the funnel-analytics code: table names now use the `%i` identifier placeholder in `$wpdb->prepare()` instead of string interpolation, and the two read queries (summary and per-platform breakdown) are now cached for one minute via the object cache to satisfy the "no caching" check on direct database queries.

= 0.11.0 =
* Added complete French, Turkish, and Italian translations for all built-in widget text (title, buttons, questions, delivery/payment/security answers, teaser bubble, etc.). Previously only German and English were built in and every other language fell back to English.

= 0.10.0 =
* Replaced the single "WooCommerce pages only / all public pages" visibility toggle with granular checkboxes: homepage, shop & category, product, cart, checkout, my account, blog, and everything else. Existing sites keep their previous behavior automatically.
* Added a per-product teaser bubble override: a new "Alynivo teaser bubble" box on each product's edit screen lets you show a different invitation on that specific product page, without touching the global text.
* The teaser bubble's built-in default text now includes a 👋 wave, matching the original design proposal.
* Redesigned the settings page into grouped cards (Status & AI, Branding, Teaser bubble, Visibility, Recommendations) with a live launcher preview and a visual funnel chart with progress bars, replacing the plain table layout.

= 0.9.0 =
* Added a "Launcher style" setting: choose between the logo always visible on the launcher (with a chat badge), or a neutral chat icon when closed with the logo appearing only after opening the chat (the common Intercom/Drift/Crisp pattern). The logo itself remains a separate paid white-label setting either way.

= 0.8.4 =
* Rebalanced launcher proportions: the logo now sits on a white background with breathing room (66% scale) instead of filling the button edge-to-edge, and the chat badge grew from 24px to 30px with a larger emoji, matching common chat-widget conventions (Intercom/Drift/Crisp-style launcher).

= 0.8.3 =
* Changed the launcher badge glyph from a generic speech-bubble icon to a waving-hand emoji, matching the original design proposal.

= 0.8.2 =
* Added a permanent small chat-bubble badge on the launcher button (overlapping the logo's corner) so the button reads as "this is a chat" even after the proactive teaser bubble has disappeared or on a custom white-label logo. The badge hides while the panel is open.

= 0.8.1 =
* Declared compatibility with WooCommerce's High-Performance Order Storage and Cart/Checkout Blocks features to clear the "incompatible plugin" admin notice.

= 0.8.0 =
* Added a proactive teaser bubble that invites visitors to chat a few seconds after page load, once per browser session.

= 0.7.0 =
* Added a per-site chat logo setting with a media-library picker, so store owners can replace the default Alynivo mark with their own logo.

= 0.6.0 =
* Added local, privacy-friendly funnel analytics (planner started, platform chosen, plans viewed/unavailable, plan chosen, added to cart) with a summary view on the settings page. No data leaves the site.

= 0.5.1 =
* Fixed a multilingual product-matching bug affecting translated catalogs.

= 0.5.0 =
* Extended the planner contract to support multiple platforms/question flows via store-specific adapters.

= 0.4.0 =
* Renamed the product and plugin to Alynivo after an expanded collision review.
* Prepared the extension contract for store-specific package planners.

= 0.3.0 =
* Added an optional server-side proxy for the managed Alynivo AI service.
* Added hosted-service credentials without exposing provider keys in browser code.
* Added graceful fallback when the hosted service is unavailable.

= 0.2.0 =
* Added a conversational interface with message input and quick replies.
* Added localized German storefront copy.
* Modernized the responsive widget design.

= 0.1.0 =
* Initial guided-selling foundation.
