WP Manifestindependent plugin directory
manifest / ai / llm-visibility-monitor

LLM Visibility Monitor

Monitors and logs your visibility in large language models.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/openstream/llm-visibility-monitor/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Monitor LLM responses on a schedule and store/export results.

Requirements

  • WordPress 6.4+
  • PHP 8.0+ (8.1+ recommended)

Installation

  1. Copy the plugin folder llm-visibility-monitor into wp-content/plugins/.
  2. Activate "LLM Visibility Monitor" in wp-admin → Plugins.
  3. Go to Settings → LLM Visibility Monitor to configure.

Deployment

Git-Based Deployment

The plugin supports direct deployment via Git for easy updates:

Initial Setup

# Navigate to WordPress plugins directory
cd /path/to/wp-content/plugins/

# Clone the repository
git clone https://github.com/openstream/llm-visibility-monitor.git

# Navigate to plugin directory
cd llm-visibility-monitor

Updating the Plugin

# Navigate to plugin directory
cd /path/to/wp-content/plugins/llm-visibility-monitor

# Pull latest changes
git pull origin main

# Check current version
git tag --list | tail -5

Updating to Specific Version

# Navigate to plugin directory
cd /path/to/wp-content/plugins/llm-visibility-monitor

# Pull latest changes
git pull origin main

# Checkout specific version (optional)
git checkout v0.16.0

One-Line Remote Update

# Update from local machine (replace with your server details)
ssh user@server "cd /path/to/wp-content/plugins/llm-visibility-monitor && git pull origin main"

Deployment Benefits

  • Easy Updates: Simple git pull to get latest changes
  • Version Control: Track all changes and versions
  • Rollback Capability: Can revert to previous versions if needed
  • No SSH Keys Required: Uses HTTPS for cloning and updates
  • Automated Workflow: Integrates with existing development workflow

Production Considerations

  • Backup First: Always backup before updating
  • Test Updates: Test updates in staging environment first
  • Plugin Activation: May need to reactivate plugin after updates
  • Database Updates: Plugin handles database schema updates automatically

Features

Admin Interface

  • Settings page in wp-admin → Settings → LLM Visibility Monitor
  • Manage Prompts section: add, edit, delete prompts
  • Cron Frequency: choose Daily or Weekly
  • Model selection: choose which OpenRouter model to use
  • Debug Logging toggle
  • Dashboard (wp-admin → Tools → LLM Visibility Dashboard):
    • Run Now button to trigger execution immediately
    • Latest results table (date, prompt, model, answer)
    • Export CSV

Role-Based Access Control

  • Administrators: Full access to all features including settings
  • LLM Managers: Can manage prompts, view dashboard, and view results (no settings access)
  • Other Roles: No LLM access
  • User-specific prompt management and result filtering
  • Secure isolation between user data

User-Specific Features

  • Prompt Management: Users can only see and manage their own prompts
  • Multi-Model Selection: Users can select multiple AI models for each prompt
  • Results Dashboard: Users only see their own results (admins see all)
  • CSV Export: Users export only their data, admins export everything
  • Email Reports: Personalized emails sent to each user's email address

OpenRouter Integration

  • The plugin uses OpenRouter to call different models via a single API.
  • Configure the API key on the Settings page (stored encrypted).
  • Model Support: Access to 300+ AI models from major providers including OpenAI, Anthropic, Google, Meta, and more
  • Model selection:
    • openrouter/stub-model-v1 → local stub for fast testing (no external API call)
    • Any real model id exposed by OpenRouter (e.g. openai/gpt-4o-mini, anthropic/claude-3-5-sonnet, google/gemini-pro, meta-llama/llama-3.1-70b-instruct)

Scheduling

  • Uses WordPress Cron API.
  • Frequency is configurable (daily or weekly).
  • Use the Run Now button to execute immediately without waiting for the schedule.

Data Storage

  • Custom table: wp_llm_visibility_results
    • id, created_at (UTC), prompt, model, answer
  • Use the Dashboard to review results and export CSV.

Logging

  • Optional debug logging (enable in Settings):
    • PHP error_log
    • File: wp-content/plugins/llm-visibility-monitor/llmvm-master.log
  • Requests and responses (status only), prompt dispatch, and errors are logged.

Email Reports

  • Optional email reports (enable in Settings):
    • Administrators: Receive emails at admin email with all results from all users
    • Regular Users: Receive emails at their own email address with only their results
    • HTML-formatted reports with summary and latest results
    • Includes success/error counts and result previews
    • Links to dashboard for full details
    • User ownership information included in admin reports

Security

  • API key is stored encrypted at rest.
  • Nonces and capability checks are used for all admin actions.
  • Inputs are sanitized; outputs are escaped in the views.

Internationalization

  • Text domain: llm-visibility-monitor
  • German translations included: de_DE, de_CH

External Services

OpenRouter API

This plugin connects to the OpenRouter API to send prompts to various AI models and retrieve responses. This service is required for the core functionality of monitoring LLM responses.

What data is sent and when:

  • Your configured prompts are sent to OpenRouter each time the cron job runs (daily/weekly) or when you click "Run Now"
  • The selected model identifier (e.g., openai/gpt-4o-mini) is sent with each request
  • Your WordPress site URL is sent as the HTTP referer for API tracking
  • Model Access: With a valid API key, you have access to 300+ AI models from OpenRouter's catalog

Service provider: OpenRouter (https://openrouter.ai)

Note: The plugin also includes a stub model (openrouter/stub-model-v1) for testing that does not make external API calls.

Configuration

  1. OpenRouter API Key: paste your key in Settings (stored encrypted; re-enter to change).
  2. Model: enter an OpenRouter model id. Start with openrouter/stub-model-v1 for quick testing, then switch to any of the 300+ available models (e.g. openai/gpt-4o-mini, anthropic/claude-3-5-sonnet, google/gemini-pro).
  3. Cron Frequency: choose how often results should be collected.
  4. Debug Logging: enable when troubleshooting; review wp-content/uploads/llm-visibility-monitor/llmvm.log.
  5. Email Reports: enable to receive automatic reports after each cron run.

Testing

  1. Add one or more prompts in Settings.
  2. Click Run Now on the Dashboard or the Settings page.
  3. Review results in Tools → LLM Visibility Dashboard and/or export CSV.
  4. If logging is enabled, check wp-content/uploads/llm-visibility-monitor/llmvm.log.

Development

PHP Syntax Checking with DDEV

When developing with DDEV, you can check PHP syntax using the following commands:

# Check PHP version
ddev php -v

# Check syntax of main plugin file
ddev php -l /var/www/html/wp-content/plugins/llm-visibility-monitor/llm-visibility-monitor.php

# Check syntax of key plugin files
ddev php -l /var/www/html/wp-content/plugins/llm-visibility-monitor/includes/class-llmvm-cron.php
ddev php -l /var/www/html/wp-content/plugins/llm-visibility-monitor/includes/class-llmvm-progress-tracker.php
ddev php -l /var/www/html/wp-content/plugins/llm-visibility-monitor/includes/class-llmvm-admin.php
ddev php -l /var/www/html/wp-content/plugins/llm-visibility-monitor/includes/class-llmvm-database.php

Note: When using ddev php from the host system, use the full container paths (/var/www/html/...). If you're inside the DDEV container, you can use relative paths.

Translation Development

The plugin supports multiple German locales with proper .po/.mo file management:

Supported Locales

  • de_DE - Standard German (Germany)
  • de_DE_formal - Formal German (Germany)
  • de_CH - Swiss German (formal)
  • de_CH_informal - Swiss German (informal)

Building Translations

When updating translations, use the provided build script:

# Generate .mo files from .po files
./build-translations.sh

# Commit the generated .mo files
git add languages/
git commit -m "Update German translations"
git push origin main

Translation Workflow

  1. Edit the .po files in the languages/ directory
  2. Run ./build-translations.sh to generate .mo files
  3. Test translations locally
  4. Commit both .po and .mo files
  5. Deploy to production

Important: Always generate .mo files locally using msgfmt before deploying. WordPress requires properly compiled .mo files for translations to work.

Container Paths

  • Plugin Directory: /var/www/html/wp-content/plugins/llm-visibility-monitor/
  • Main Plugin File: /var/www/html/wp-content/plugins/llm-visibility-monitor/llm-visibility-monitor.php
  • Includes Directory: /var/www/html/wp-content/plugins/llm-visibility-monitor/includes/

Changelog

0.17.0 - 2025-09-25

Production Cron System Fixes

  • Enhanced Queue Processing: Fixed automatic processing when DISABLE_WP_CRON=1 by adding scheduled prompt processing to queue manager
  • System Cron Integration: Added comprehensive support for production environments with system cron jobs
  • Automatic Scheduled Prompts: Queue processing now automatically triggers scheduled prompts when WordPress cron is disabled
  • Production Parity: Local and production environments now behave identically with proper cron handling

Settings Form Bug Fixes

  • Queue Concurrency Setting: Fixed critical bug where Queue Concurrency Limit setting was not being saved in admin form
  • Settings Sanitization: Added missing queue_concurrency field to settings sanitization method
  • Data Format Fix: Resolved issue where settings were stored as JSON strings instead of proper PHP arrays
  • Admin Form Reliability: Ensures all settings fields are properly saved and persisted

Diagnostic Tools (New)

  • Comprehensive Diagnostics: Added LLMVM_Diagnostics class for troubleshooting automatic processing issues
  • Queue Status Analysis: Real-time monitoring of queue processing, scheduled prompts, and email settings
  • Production Environment Detection: Automatic detection of DISABLE_WP_CRON=1 and system cron status
  • Admin Interface Integration: Diagnostics displayed in Settings page for easy troubleshooting

Manual Cron Endpoint (New)

  • Production Fallback: Added LLMVM_Manual_Cron class for manual cron triggering when system cron fails
  • Secure Endpoint: Protected manual cron URL with secret key authentication
  • Scheduled Prompt Processing: Manual cron endpoint processes both queue jobs and scheduled prompts
  • Admin Integration: Manual cron URL displayed in admin interface for production setup

Email Timing Verification

  • Perfect Email Timing: Confirmed email reports are sent only after ALL models complete
  • Batch Processing: Email system correctly handles multiple model runs with proper timing
  • User-Specific Reports: Email reports contain results from all models in the current run
  • Production Testing: Verified complete workflow works automatically in production-like environment

Technical Improvements

  • Enhanced Logging: Added detailed logging for scheduled prompt processing and queue management
  • Error Handling: Improved error handling for production environments with disabled WordPress cron
  • Performance Monitoring: Added response time tracking and queue processing metrics
  • Debug Tools: Added debug scripts for testing automatic processing and queue status

Security & User Experience Improvements

  • Admin Bar Security: Fixed security issue where non-admin users could see "Edit Product" and other admin-only links in WordPress admin bar
  • Role-Based Subscription Menu: Implemented conditional subscription menu linking based on user roles (Pro users → customer dashboard, Free users → upgrade page)
  • Enhanced User Experience: Different messaging and button text for Pro vs Free users in subscription interface

Translation & Localization

  • German Translation Fixes: Added missing German translation for "Optional: Enter expected answer for comparison scoring..." placeholder text
  • Translation Build Process: Created proper build script (./build-translations.sh) for generating .mo files from .po files using msgfmt
  • Multi-Locale Support: Updated all German variants (de_DE, de_DE_formal, de_CH, de_CH_informal) with complete translations

0.16.0 - 2025-09-23

:Online Model Timeout Fixes

  • Extended Timeout: Increased timeout for :online models to 240 seconds (4 minutes) to accommodate web search and reasoning
  • Enhanced Error Messages: Added specific timeout messages for :online models that take longer to respond
  • Detailed Logging: Added comprehensive logging for :online model requests and responses for better debugging
  • Dashboard Improvements: Updated dashboard to show specific timeout messages for :online models

Email System Improvements

  • Immediate Email Triggering: Fixed email system to send emails immediately when runs complete instead of waiting for queue processing
  • Old Run Cleanup: Added automatic cleanup of old runs (older than 5 minutes) to prevent processing stale runs repeatedly
  • Duplicate Email Fix: Resolved issue where users were receiving 3 emails instead of 1 due to old run processing

German Translation Fixes

  • Formal/Informal Correction: Fixed German formal/informal translations (de_DE=informal "du", de_CH=formal "Sie")
  • Consistent Terminology: Updated "Lauf-Ergebnisse" to "Ausführungsresultate" across all German locales
  • Email Template Translation: Fixed email template to use translate_string() method for all Latest Results section strings
  • Footer Address Forms: Corrected email footer to use proper informal/formal address forms based on locale

Cron Scheduling & Timezone Fixes

  • Cron Scheduling Logic: Fixed cron scheduling to properly handle past times for weekly/monthly frequencies
  • Timezone Display: Fixed timezone conversion in admin display to show correct relative times
  • Reschedule Tool: Added reschedule button to fix existing cron jobs with new logic
  • Admin Integration: Made calculate_distributed_run_time() method public for admin use
  • Timezone Handling: Fixed convert_utc_to_user_timezone() to handle both timestamps and date strings
  • UTC Consistency: Replaced server-time date() with gmdate() for database timestamp comparisons and cleanup operations
  • Logging Improvements: Fixed logging labels to correctly show UTC vs server time for better debugging

Queue Processing System Fixes

  • Automatic Queue Processing: Fixed queue processing to work automatically for both manual and scheduled runs
  • Recurring Schedule Management: Replaced single-event scheduling with proper recurring schedule management
  • Smart Schedule Recovery: Added automatic rescheduling if next run is more than 2 minutes away
  • Robust Processing: Ensures jobs are processed within 1-2 minutes without getting stuck
  • Manual Run Support: Manual prompt runs now trigger queue processing immediately
  • Scheduled Run Support: Scheduled cron jobs work seamlessly with the queue system
  • Zero Stuck Jobs: Prevents jobs from getting stuck in pending or processing status
  • Automatic Recovery: System automatically recovers from delayed or stuck schedules

0.16.0 - 2025-09-20

BCC Implementation Fix

  • Privacy Enhancement: Fixed BCC implementation to properly hide BCC recipients from main email recipient
  • Separate Email Sending: Replaced BCC header approach with separate email sending for better privacy
  • Email Best Practices: BCC recipients now receive individual emails without exposing BCC information
  • Maintained Functionality: All existing BCC features continue to work as expected
  • Improved Logging: Enhanced logging for BCC email success/failure tracking

Database Cleanup & Orphaned Data Management

  • Production Cleanup: Successfully cleaned up orphaned prompt data from production database
  • Local Cleanup: Removed 162+ orphaned records from local development environment
  • Data Integrity: Ensured database only contains data for active prompts
  • Email Report Fix: Eliminated unwanted email reports for deleted prompts

0.15.0 - 2025-09-20

BCC Admin Feature (New)

  • Email Monitoring: Added BCC functionality for administrators to receive copies of all email reports
  • Settings Control: New "BCC Admin on All Reports" setting in Settings → LLM Visibility Monitor
  • Smart Logic: Only BCCs user emails, not admin emails (prevents duplicate admin emails)
  • Universal Coverage: Works for both cron runs and manual runs via unified email system
  • Compliance: Enhanced admin visibility and audit trail capabilities
  • German Translations: Complete localization for all BCC-related interface elements

Planned Cron Executions Dashboard (New)

  • Settings Page Enhancement: Added comprehensive "Planned Cron Executions" section to Settings → LLM Visibility Monitor
  • Multi-User Overview: Display all scheduled prompts across all users in a single table
  • Detailed Information: Show prompt text, user, frequency, next execution time, and models for each scheduled prompt
  • Smart Sorting: Automatically sort by next execution time (earliest first)
  • Timezone Awareness: Display times in each user's respective timezone
  • Real-Time Updates: Section updates automatically when prompts are added, modified, or deleted
  • Admin-Only Access: Only administrators can view the planned executions overview

Enhanced Cron Management

  • Distributed Scheduling: Improved cron job distribution to prevent bottlenecks
  • Conflict Resolution: Automatic detection and resolution of scheduling conflicts
  • Business Hours Distribution: Spread cron jobs evenly between 8 AM - 8 PM
  • Minimum Intervals: Ensure at least 15-minute gaps between scheduled executions
  • Hash-Based Distribution: Use prompt ID hashing for consistent, predictable scheduling

Robust Cron Cleanup System

  • Immediate Verification: Check and retry cron cleanup immediately after prompt deletion
  • Background Cleanup: Automatic orphaned cron job detection and removal every 5 minutes
  • Multi-Layer Protection: Prevents orphaned cron jobs from accumulating over time
  • Comprehensive Logging: Detailed logging for all cleanup operations and verification steps
  • Zero Orphaned Jobs: Ensures database consistency between prompts and scheduled crons

German Translation Updates

  • Complete Localization: Added German translations for all new planned executions features
  • Multi-Locale Support: Updated all 4 German locale files (de_DE, de_DE_formal, de_CH, de_CH_informal)
  • Consistent Terminology: Maintained consistent German terminology across all interface elements
  • User Experience: Improved German user experience with proper localization

Technical Improvements

  • Performance Optimization: Enhanced cron scheduling algorithms for better performance
  • Memory Efficiency: Improved memory usage in cron management operations
  • Error Handling: Better error handling and recovery in cron operations
  • Code Quality: Refactored cron management code for better maintainability

0.14.0 - 2025-09-18

Email Configuration (New)

  • Custom From Address: Added admin-only setting to configure email "from" address for all WordPress emails
  • Global Email Control: Setting affects plugin emails, password resets, user notifications, and all WordPress system emails
  • Site Name Integration: Uses WordPress site title as the "from" name instead of "WordPress"
  • Settings Location: Available in Settings → LLM Visibility Monitor (admin-only access)
  • Fallback Behavior: If no custom address is configured, WordPress uses its default behavior

Queue Performance Improvements

  • Faster Queue Refresh: Reduced auto-refresh interval from 30 seconds to 10 seconds for better responsiveness
  • Immediate Queue Processing: Added automatic queue processing trigger when new jobs are added
  • Enhanced AJAX Performance: Optimized queue status AJAX calls with reduced job limits and better error handling
  • Improved User Experience: Added immediate refresh logic for better queue visibility after job submission
  • Performance Logging: Added detailed logging for queue AJAX response times and performance metrics

UI/UX Enhancements

  • Form Field Reordering: Moved "Expected Answer" field to appear immediately after "Prompt Text" in Add New Prompt form
  • Better Form Flow: Improved logical grouping of related form fields for better user experience
  • Enhanced Queue Interface: Improved queue status display with better error handling and timeout management

German Translation Completeness

  • Comprehensive German Localization: Added complete German translations for all admin interface elements
  • Dashboard Translations: Translated all dashboard elements including status cards, buttons, and descriptions
  • Queue Page Translations: Added German translations for all queue status elements, table headers, and time metrics
  • Prompts Page Translations: Translated all form elements, placeholders, and descriptions
  • Scoring Legend Translation: Complete German translation of the scoring system explanations
  • Informal German Support: Proper informal German (du-form) for de_CH_informal locale
  • Technical Terms: Kept technical terms like "Queue" in English for consistency and brevity
  • All Locales Updated: Complete translations for de_DE, de_DE_formal, de_CH, and de_CH_informal

0.13.0 - 2025-09-17

Comparison Feature (New)

  • Expected Answer Field: Added optional field to prompts for defining expected responses
  • Automated Scoring: LLM-powered comparison scoring (0-10 scale) of actual vs expected answers
  • Comparison Model Selection: Configurable comparison model in settings (default: openai/gpt-4o-mini)
  • Prompt Summaries: AI-generated summaries after all models complete for each prompt
  • Email Report Integration: Comparison scores and summaries included in email reports
  • Dashboard Display: Comparison scores and summaries visible on main dashboard
  • Scoring Legend: Clear explanation of 0-10 scoring ranges in both emails and dashboard
  • Strict Entity Matching: Prioritizes exact entity matching over general response quality
  • Smart Summary Logic: Only generates summaries when valid results exist, handles mixed success/failure

UI Improvements

  • Collapsible Add New Prompt Form: Form now starts collapsed showing only a textarea, expanding when clicked
  • Improved Textarea Alignment: Consistent width and left margin alignment between "Add New Prompt" and "Your Prompts" sections
  • Better Visual Consistency: Enhanced spacing, padding, and overall layout for improved user experience
  • Smooth Transitions: Added CSS transitions for form expansion with visual feedback
  • Queue Status Styling: Reduced font size for status badges to prevent text wrapping

Technical Improvements

  • Fixed Timezone Handling: All timestamps now properly stored in UTC and converted to user's timezone
  • Improved Summary Generation: Summaries regenerated when prompt content changes
  • Better Error Handling: NULL comparison scores treated as 0 for accurate averages
  • Enhanced Logging: Comprehensive logging for comparison and summary generation processes
  • Summary Accuracy Fix: Fixed issue where summaries mixed results from different expected answers

0.12.0 - 2025-09-12

  • New Feature: Enhanced Response Time Logging
    • Added detailed response time tracking for all OpenRouter API requests
    • Response times logged in milliseconds with model, prompt length, and body size information
    • Enhanced error logging with response time context for better debugging
    • Progress tracking now displays response times in completion messages
    • Improved performance monitoring for production environments
  • New Feature: Queue System for Asynchronous Processing
    • Implemented WordPress-based queue system to prevent timeout issues
    • Queue system is now always enabled for all LLM requests (simplified architecture)
    • Queue status display showing pending, processing, completed, and failed jobs
    • Automatic cleanup of old completed jobs (7+ days old)
    • Fallback to synchronous processing if queue system fails
  • New Feature: Queue Management Interface
    • New "LLM Queue Status" page under Tools for monitoring queue operations
    • Real-time queue status with auto-refresh every 30 seconds
    • User-specific queue filtering (limited users see only their jobs, admins see all)
    • Queue job details including model, status, creation time, and attempt counts
    • Admin controls for clearing all queue jobs
    • Visual status indicators with color-coded badges and cards
    • Performance metrics display including response time, execution time, and queue overhead
    • Detailed timing breakdown showing queue wait time vs processing time
  • New Feature: Configurable Concurrency Control
    • Admin setting to control maximum concurrent jobs (1-5, default: 1 for shared hosting)
    • Prevents server overload on shared hosting environments
    • Automatic job queuing when concurrency limit is reached
    • Enhanced queue processing with proper job prioritization
  • Enhancement: Improved Error Handling and Timeout Management
    • Better handling of 500 internal server errors with detailed logging
    • Enhanced timeout detection and queue-based processing for long-running operations
    • Improved error messages with response time context for debugging
    • Automatic retry mechanism for failed queue jobs (up to 3 attempts)
  • Enhancement: Production Environment Optimization
    • Smart queue activation based on server execution time limits
    • Automatic detection of production environments requiring asynchronous processing
    • Enhanced logging for production debugging without exposing sensitive data
    • Improved reliability for high-volume prompt processing
  • Technical Improvement: Database Schema Enhancement
    • Added queue management table (wp_llmvm_queue) for asynchronous job processing
    • Added current run results table (wp_llmvm_current_run_results) for email reporting
    • Enhanced result tracking with response time data and detailed timing breakdown
    • Improved data structure for better performance monitoring
  • Enhancement: Email Reporting System Overhaul
    • Completely refactored email reporting to use database storage instead of transients
    • Fixed email reporting for both single runs and "run all prompts now" operations
    • Implemented batch run ID system to group all results from multi-prompt runs
    • Email reports now correctly include all results from the current run only
    • Enhanced email reliability with proper result collection and cleanup
  • Enhancement: Logging System Improvements
    • Moved logging to WordPress root directory for easier access
    • Implemented dual log file system: master log (all logs) and current run log (run-specific)
    • Added log rotation for master log file (5MB limit)
    • Enhanced log filtering for current run logs with relevant keywords
    • Added .gitignore to prevent committing log files
  • UI/UX Enhancement: Queue Status Monitoring
    • Real-time queue status display in plugin settings
    • Enhanced progress messages with response time information
    • Better visibility into system performance and processing status
    • Improved admin interface for monitoring queue operations
    • Optimized column widths in queue status table (narrower ID/Status, wider Model)
    • Fixed model name font size to prevent text wrapping
    • Added "Time Metrics Explained" section with detailed performance information
  • Bug Fixes: Critical Issues Resolved
    • Fixed undefined variable $job_update_time PHP warning
    • Fixed email reporting for batch runs to include all results instead of just the last prompt
    • Fixed run ID generation to use consistent batch run IDs across all jobs
    • Fixed email firing logic to use correct run_id (batch_run_id vs prompt_id)
    • Fixed duplicate job processing race conditions with atomic updates
    • Fixed popup display issues by removing progress popup for queue-based runs
    • Fixed negative overhead calculations in queue status display

0.11.0 - 2025-09-10

  • New Feature: Per-Prompt Cron Frequency Settings
    • Added cron frequency dropdown (daily/weekly/monthly) to "Add New Prompt" form
    • Each prompt can now have its own individual cron schedule
    • Updated "Your Prompts" section to show current cron frequency and allow changes
    • Removed global cron frequency setting from Settings page
    • Individual cron jobs are automatically scheduled for each prompt based on their frequency
    • Enhanced cron scheduler to handle per-prompt frequencies with proper WordPress cron integration
    • Database migration automatically adds cron_frequency field to existing prompts (defaults to daily)
    • Improved user experience with granular control over prompt execution timing
  • Enhancement: Improved Cron Management
    • Automatic scheduling/unscheduling of cron jobs when prompts are added, edited, or deleted
    • Better cron job isolation with unique hooks per prompt
    • Enhanced logging for cron job operations
    • Proper cleanup of cron jobs when prompts are removed
  • Technical Improvement: Database Schema Update
    • Updated database version to 1.5.0
    • Added migration for existing prompts to include cron_frequency field
    • Backward compatibility maintained for existing installations
  • UI/UX Enhancement: Optimized Admin Interface
    • Reduced "Add New Prompt" form width to 45% for better desktop layout
    • Added WordPress admin styling with background, border, and shadow for better visual separation
    • Converted form structure to table layout for improved organization
    • Reduced model selection font size to 11px to prevent line breaks in model names
    • Updated model dropdown border color from red to standard WordPress admin color (#c3c4c7)
    • Enhanced form usability with proper spacing and visual hierarchy
  • Email Layout Optimization: Improved Desktop Email Reports
    • Removed separate "Date & Model" column from email report tables
    • Integrated date and model information into the "Prompt" column as badges
    • Increased "Answer" column width from 55% to 65% for better content display
    • Enhanced mobile responsiveness with adjusted column widths (Answer: 50% → 60%)
    • Improved email readability with better content organization
  • Bug Fixes: Critical Issues Resolved
    • Fixed "Run All Prompts Now" bug where only the last prompt was processed
    • Corrected run count discrepancies in dashboard and email reports
    • Fixed missing prompt text extraction in cron execution loop
    • Resolved incomplete dashboard and email reports for multi-prompt runs
  • Performance & Reliability: Execution Time Management
    • Added execution time limit of 720 seconds (12 minutes) for all run operations
    • Implemented large run warnings for operations with more than 10 models
    • Added user-friendly warning dialogs to prevent server timeout issues
    • Enhanced error handling for production server environments
    • Improved user guidance for large batch operations
  • Logging Optimization: Reduced Log Spam
    • Fixed repetitive logging of "Plugin initialized" and "Cron already scheduled" messages
    • Implemented rate limiting to log initialization messages at most once per minute
    • Moved cron checking logic to prevent excessive logging on every request
    • Cleaner log files with only relevant operational information
  • Internationalization: German Translation Updates
    • Added comprehensive German translations for all new UI elements
    • Translated prompt management interface including cron frequency options
    • Updated all German locale files (de_DE, de_CH, de_DE_formal, de_CH_informal)
    • Fixed Swiss German informal translations to use proper "Du" forms instead of "Sie"
    • Maintained consistency with existing translation patterns

0.10.0 - 2025-09-09

  • New Feature: Web Search Integration with OpenRouter
    • Added web search checkbox to "Add New Prompt" form
    • Added "Web Search" column to prompts table showing web search status
    • Automatic appending of :online to model names when web search is enabled
    • Follows OpenRouter web search documentation for model-agnostic grounding
    • Users can enable/disable web search for individual prompts
    • Web search status visible in both admin and user views
    • Backward compatibility maintained for existing prompts
    • Enhanced logging to track web search usage and model modifications
  • New Feature: Loading Overlay for Run Operations
    • Added loading overlay that prevents user interactions during prompt execution
    • Prevents accidental interruption of running prompts
    • Shows progress messages for "Run All Prompts Now" and individual "Run Now" operations
    • Blocks all user interactions (clicks, keyboard shortcuts, context menu) during execution
    • Enhanced user experience with clear visual feedback
  • New Feature: Markdown Link Support in Email Reports
    • Added support for markdown link syntax [text](URL) in email reports
    • Automatic conversion to HTML <a> tags with proper styling
    • Secure URL handling with esc_url() and esc_html() for XSS protection
    • Email-compatible inline CSS styling for links
    • Enhanced content formatting for better email readability
  • New Feature: Login Page Customization
    • Added "Login Page Customization" section in plugin settings
    • Replaces WordPress logo with site name "LLM Visibility Monitor" on login page
    • Custom text area for adding personalized content below the site name
    • Supports HTML formatting including links and bold text
    • Editable through Settings → LLM Visibility Monitor → Login Page Customization
    • Professional styling with proper spacing and visual hierarchy
  • Enhancement: Upgrade Link for Usage Limits
    • Added upgrade link in usage summary when monthly run limit is reached
    • Direct link to subscription page for easy plan upgrades
    • Encourages users to upgrade when they hit their limits
    • Improved user experience with clear upgrade path
  • Bug Fix: Fixed duplicate menu items in WordPress admin
    • Resolved issue where "LLM Visibility Monitor" appeared twice in Settings sidebar
    • Optimized admin class instantiation to prevent duplicate menu registration
    • Cleaner admin interface with single menu entry
  • Bug Fix: Fixed duplicate settings sections
    • Removed duplicate "Login Page Customization" section on settings page
    • Proper form integration for all settings sections
    • Cleaner settings interface with no duplicate content
  • New Feature: Real-time Progress Tracking with Progress Bar
    • Enhanced loading overlay with realistic progress bar instead of simulated progress
    • Real-time progress updates via AJAX polling during prompt execution
    • Server-side progress tracking using WordPress transients for reliable state management
    • Progress messages show current step and detailed status (e.g., "Starting model: gpt-4o-mini")
    • Accurate progress percentage based on actual completion status
    • Progress bar reflects real execution time instead of estimated completion
    • Enhanced user experience with accurate feedback during long-running operations
  • Enhancement: Web Search Progress Messages
    • Progress messages now display :online suffix when web search is enabled
    • Clear indication of which models are using web search capabilities
    • Examples: "Starting model: gpt-4o-mini:online" and "Completed model: gpt-4o-mini:online"
    • Better visibility into web search usage during prompt execution
  • Bug Fix: Fixed missing dates in email reports
    • Resolved issue where email reports showed only green lines instead of timestamps
    • Added missing created_at field to progress tracking result arrays
    • Email reports now display proper timestamps for all results
    • Fixed in both run_with_progress() and run_single_prompt_with_progress() methods
    • Enhanced result data structure with complete timestamp information
  • Enhancement: Customized admin bar for LLM Manager roles
    • Cleaned up WordPress admin bar for LLM Manager Free and Pro users
    • Removed comments/notifications icon and "New" button from admin bar
    • Hidden updates notification and search box for cleaner interface
    • Preserved WordPress logo, site name, and user profile menu
    • Creates focused admin experience tailored for LLM management tasks

0.9.0 - 2025-09-08

  • New Feature: Model limit enforcement for free plan users
    • Free plan users are now limited to 3 models per prompt with client-side validation
    • Added visual counter showing "X / Y models selected" with color coding
    • Alert notification when model limit is reached
    • Enhanced user experience with better validation and feedback
  • Bug Fix: Resolved WordPress object caching issues in settings
    • Fixed systematic value reduction in settings (e.g., 50→44→46, 40→33, 30→27)
    • Added proper cache clearing to ensure fresh values are saved and displayed
    • Improved settings form reliability and data integrity
    • Enhanced error handling and validation
  • Bug Fix: Fixed email reporter data passing issues
    • Resolved issue where email reports were not being sent due to WordPress action hook parameter limitations
    • Implemented global variable approach to reliably pass current run results to email reporter
    • Email reports now correctly send only results from the current execution (not latest 10 from database)
    • Fixed cross-user data leakage in email reports
    • Enhanced email report reliability and data accuracy
  • Enhancement: Optimized mobile email report layout and width utilization
    • Increased prompt column width from 25% to 30% for better readability
    • Increased answer column width from 50% to 55% for more content space
    • Reduced meta column width from 25% to 20% to optimize space usage
    • Enhanced mobile responsive design with better column width distribution
    • Improved stacked card layout for screens ≤600px with full width utilization
    • Removed unnecessary labels ("Meta:", "Prompt:", "Answer:") in mobile view for cleaner presentation
    • Increased answer content max-height from 200px to 300px for better readability
    • Better padding and spacing for improved mobile user experience
    • Fine-tuned mobile card width to 90% to ensure full border visibility
    • Aligned left border with other email text for consistent layout
  • New Feature: Markdown table support in email reports
    • Added comprehensive markdown table to HTML conversion functionality
    • Support for standard markdown table syntax with | separators
    • Automatic detection and skipping of separator rows (|----|)
    • Mobile-responsive HTML tables with horizontal scrolling
    • First row automatically becomes table header with distinct styling
    • Professional styling with borders, shadows, and proper spacing
    • Consistent design integration with existing email report theme

0.8.0 - 2025-09-05

  • New Feature: User-specific timezone preferences
    • Added timezone setting in user profile page (/wp-admin/profile.php)
    • All users can set their preferred timezone for date display
    • Dashboard and email reports now show dates in user's local timezone
    • Fallback to site default timezone if use

This README is longer than the copy stored here. Read the rest on GitHub →