Changelog: From May 13 through 18, 2026

New

  • Projects are now the home for your work — Each project pairs your own plugin with the competitors you track. You can create, rename, delete, and switch between projects from a new workspace sidebar. Your tier decides how many competitors you can track per project; your own plugin doesn’t count toward that limit.
  • Project switcher in the sidebar — Jump between projects from a dropdown without navigating back to the dashboard.
  • Settings page with a project list — Manage all your projects from one place under Settings.
  • Onboarding starts with your plugin — New users get a single unified “Add your plugin” panel that creates your first project and seeds the own-plugin baseline in one step.
  • Notifications now know which project they came from — Slack messages, weekly emails, daily digests, and realtime alerts all include the project name and deep-link directly to the specific event inside the right project.
  • Daily lifecycle brief email — A morning brief summarizes trial status and key lifecycle moments for active users.
  • Compare uses your own plugin as the baseline — Compare pages now anchor against your plugin and surface per-project gap headlines so you immediately see where competitors are pulling ahead.
  • AI write-ups consider your own plugin context — The three AI enrichers (releases, reviews, websites) now factor your own-plugin baseline into their analysis, producing more relevant signal.
  • Sharper weekly signal write-up — The weekly summary write-up is upgraded to a stronger model, with stricter output handling and better retries, producing more reliable narratives.

Improved

  • Per-project notification history — Notification history, badges, and alert lists are now scoped per project so you only see signals relevant to the project you’re in.
  • Realtime alerts include project context — Alert emails and Slack messages now carry the project name in the subject and body, and own-plugin events fire their own alerts.
  • Cleaner crawl behavior for shared landing pages — Competitor sites sharing a base URL (with trailing slash or fragment variations) are now crawled once instead of repeatedly, cutting noise and false change detections.
  • Less scary copy when a single crawl blips — One-off crawl failures no longer surface alarming “site is down” wording. The scary copy only appears after three consecutive failures.
  • Crawler retries transient timeouts — Timeout-class scrape failures now retry once before being recorded as a failure.

Fixed

  • Same slug can’t be both your plugin and a competitor — Adding the same plugin as your own plugin and as a competitor in the same project is now blocked at the source.
  • Competitor names render correctly everywhere — Names with special characters (e.g., apostrophes, ampersands) are now escaped consistently across all five places they appear in the weekly summary.
  • Daily digest emails deep-link to the right notification — The digest subject uses a bracketed project name, the body is scoped per project, and clicking through opens the exact notification row.
  • Sync health stops claiming false recoveries — A backfill that timed out asynchronously is no longer reported as “recovered” by the sync health check.
  • Readme and changelog history no longer fails silently — When a history insert hits a duplicate, the daily sync now self-heals and surfaces real insert failures instead of dropping them silently.
  • Reviews show the AI-corrected tag — Review badges now display the AI-corrected category (and matching color) instead of the lossy first-pass tag.
  • Project page text decodes HTML entities — Plugin headers no longer render & or ' in titles.
  • Em dashes removed from relative-time empty states — Brand voice fix in formatRelative.
  • Sidebar icons are consistent — Settings now uses the gear icon and Notifications uses the mail icon.
  • Pending-downgrade users don’t get milestone or notification emails — Notifications are suppressed across the board for users in a pending-downgrade state, and milestone emails are paused for those users.
  • Webhook downgrades archive over-limit projects; upgrades restore them — When you downgrade a tier, projects above your new limit are archived; upgrading restores them automatically.
  • Trial expiry now archives over-limit projects — Users whose trial ends and who fall to a lower tier have their excess projects archived cleanly.

Security

  • Closed a set of endpoints where a public key could trigger internal jobs. Internal callers now require a dedicated secret.
  • Admin impersonation now propagates identity correctly across billing, and respects row-level security on newly added tables.
  • Webhook handlers now guard against overwriting Stripe-mirrored profile fields with stale values during page-load syncs.

Rivale updates

Get new posts and the Rivale Diff, in your inbox

New posts when they go out, short notes when something new ships, and the monthly report about the WordPress plugin market. No account needed.