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 landing at 09:00 UTC 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 AI is upgraded to Sonnet 4.6 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.
Ops report tracks new health metrics — Internal ops alerts now surface orphan competitors and users stuck in pending-downgrade so problems get caught earlier.
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 — Five edge functions now suppress notifications for users in a pending-downgrade state, plus 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 seven edge function bypasses where the public anon key could trigger internal jobs. Cron and internal callers now require a dedicated internal secret.
Admin impersonation now propagates identity correctly across four billing edge functions and respects RLS on all newly added tables.
Webhook handlers now guard against overwriting 13 Stripe-mirrored profile columns with stale values during page-load syncs.