*** Shop2LLM Changelog ***

2026-06-21 — version 1.0.6

* Feature - Works without WooCommerce — supports any WordPress site (content search via posts/pages)
* Feature - BlogPosting JSON-LD schema on single posts when WooCommerce absent
* Feature - Content search via MCP tools using WordPress posts/pages fallback
* Feature - llms.txt shows site posts when WooCommerce absent
* Fix - Removed fatal wp_die() on activation without WooCommerce — replaced with dismissible admin notice
* Fix - Graceful degradation for all WooCommerce-dependent features (product feed, AI score, quality checks)
* Fix - Unified domain to shop2llm.com across all links (action links, API calls, Pro CTAs)
* Update - Plugin description and readme now mention standalone WordPress support

2026-06-21 — version 1.0.6

* Compatibility - Lowered PHP requirement from 8.1 to 7.4 (replaced match expressions with switch, added str_starts_with polyfill)

2026-06-17 — version 1.0.6

* Performance - Dashboard load time 80x faster (5s → 62ms) — 7 transient reads merged to 1, blocking HTTP removed
* Performance - Community stats load async via JS REST fetch (non-blocking)
* Performance - Removed duplicate get_recent_searches() call
* Performance - Replaced wc_get_products(5) with lightweight EXISTS SQL for peer comparison
* Performance - Crawler detection moved from parse_request → wp hook (frontend only, admin/AJAX/REST exclude)
* Performance - Crawler report: non-blocking HTTP, 1s timeout, circuit breaker (backoff on 4+ failures)
* Performance - MCP counter writes batched (15s lock window, no race conditions under concurrency)
* Performance - MCP rate limit: 60 req/min, returns 429 for excess
* Performance - llms.txt cached (1h), invalidated on product save — eliminates 100 WC_Product OOM risk
* Performance - Product quality check cached (1h) — avoids large postmeta JOIN on every dashboard load
* Performance - Community stats endpoint: shutdown-deferred fetch, concurrent-fetch lock
* Security - Unauthenticated endpoints serve from cache only, no HTTP call on request
* Fix - 20 concurrent admin page < 300ms, 30 concurrent MCP < 230ms under stress test

2026-06-15 — version 1.0.5

* Conversion - AI Growth Progress card with 5-step milestone tracker + progress bar
* Conversion - Peer Comparison card (Your Score vs Avg Free vs Pro Users)
* Conversion - Smart Dynamic CTA: 3-tier messaging based on crawler/search activity
* Conversion - 4 Achievement Badges (Store Live / AI Discovered / First Search / Power User)
* Conversion - Greyed-out Pro-only platform cards with hover tooltip
* Conversion - Inline Pro upgrade links in every dashboard card (17 CTAs total, unified color)
* Conversion - Feature adoption nudge for first-time visitors
* Conversion - Community social proof bar (weekly download stats from cloud)
* Conversion - Review request trigger on first crawler + first search milestone
* Conversion - Always-visible 5-star review prompt in dashboard header
* Fix - Domain update: aiproductscout.shop → shop2llm.com for all Pro landing links
* Fix - PHP warnings: undefined $crawlerCount / $searchCount in AI Growth Progress
* Backend - New /v1/stats public endpoint for community stats
* Backend - Fixed /v1/free/ping route (was missing)
* Fixed - PostgreSQL compatibility (AUTO_INCREMENT → SERIAL, ENGINE → removed, inline INDEX → CREATE INDEX)
* UI - Unified Pro CTA color to indigo #6366f1 across all cards
* UI - Wizard progress bar with step counter (2/4 style)

2026-06-14 — version 1.0.4

* Privacy - Anonymous activation ping with SHA256-hashed site identifier (replaces plain site_url)
* Feature - Monthly cloud heartbeat ping to distinguish active vs inactive installs
* Privacy - Removed site_name from telemetry; only hashed hostname sent
* Endpoint - Migrated from /v1/free/register to /v1/free/ping

2026-06-07 - version 1.0.2

* Added - HPOS (High Performance Order Storage) compatibility
* Added - WooCommerce Marketplace support
* Fixed - Remove invalid contributor

2026-06-04 - version 1.0.1

* Fixed - permission_callback granting access when API key is empty
* Fixed - Settings save clearing API key from missing form field
* Fixed - Author URI and readme URLs
* Fixed - Add wp_unslash before sanitize_text_field on POST inputs
* Fixed - Proper escaping for dynamic HTML attributes and display values
* Removed - load_plugin_textdomain (WP 4.6+ auto-loads)
* Update - Tested up to 7.0

2026-05-29 - version 1.0.0

* Initial release
