{"id":343106,"date":"2026-09-20T09:12:48","date_gmt":"2026-09-20T09:12:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aftercare\/"},"modified":"2026-09-20T09:12:18","modified_gmt":"2026-09-20T09:12:18","slug":"aftercare","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/aftercare\/","author":15291694,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.1.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Aftercare","header_author":"Nomad Developer","header_description":"Daily Core Web Vitals monitoring, a complete change ledger and regression incidents with email alerts. Know what changed, know what it cost \u2014 catch performance problems before your visitors do.","assets_banners_color":"136a64","last_updated":"2026-09-20 09:12:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/costibotez\/aftercare","header_author_uri":"https:\/\/www.nomad-developer.co.uk\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":55,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"costibotez","date":"2026-09-20 09:12:18","revision":3704058}},"upgrade_notice":{"1.0.3":"<p>Tracked URL and history limits are gone. Existing data and settings are untouched, and retention now keeps more than before rather than less.<\/p>","1.0.2":"<p>Hardening and documentation fixes only. No changes to stored data or settings.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3704058,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3704058,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3704058,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3704058,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3704058,"resolution":"1","location":"assets","locale":"","width":1280,"height":760},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3704058,"resolution":"2","location":"assets","locale":"","width":1280,"height":760},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3704058,"resolution":"3","location":"assets","locale":"","width":1280,"height":760},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3704058,"resolution":"4","location":"assets","locale":"","width":1280,"height":1080}},"screenshots":{"1":"Dashboard \u2014 vitals cards with budgets, status pills, sparklines, incidents and recent changes","2":"Change ledger \u2014 filterable timeline of every site change","3":"Incident detail \u2014 breach versus budget and baseline, with the changes from the 72 hours before (ranked cause attribution shown is a Pro feature)","4":"Settings \u2014 API key, tracked URLs, performance budgets and notifications"}},"plugin_section":[262246],"plugin_tags":[8531,181034,187460,5603,247],"plugin_category":[54],"plugin_contributors":[281675],"plugin_business_model":[],"class_list":["post-343106","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-activity-log","plugin_tags-client-reports","plugin_tags-core-web-vitals","plugin_tags-monitoring","plugin_tags-performance","plugin_category-security-and-spam-protection","plugin_contributors-costibotez","plugin_committers-costibotez"],"banners":{"banner":"https:\/\/ps.w.org\/aftercare\/assets\/banner-772x250.png?rev=3704058","banner_2x":"https:\/\/ps.w.org\/aftercare\/assets\/banner-1544x500.png?rev=3704058","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/aftercare\/assets\/icon-128x128.png?rev=3704058","icon_2x":"https:\/\/ps.w.org\/aftercare\/assets\/icon-256x256.png?rev=3704058","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/aftercare\/assets\/screenshot-1.png?rev=3704058","caption":"Dashboard \u2014 vitals cards with budgets, status pills, sparklines, incidents and recent changes"},{"src":"https:\/\/ps.w.org\/aftercare\/assets\/screenshot-2.png?rev=3704058","caption":"Change ledger \u2014 filterable timeline of every site change"},{"src":"https:\/\/ps.w.org\/aftercare\/assets\/screenshot-3.png?rev=3704058","caption":"Incident detail \u2014 breach versus budget and baseline, with the changes from the 72 hours before (ranked cause attribution shown is a Pro feature)"},{"src":"https:\/\/ps.w.org\/aftercare\/assets\/screenshot-4.png?rev=3704058","caption":"Settings \u2014 API key, tracked URLs, performance budgets and notifications"}],"raw_content":"<!--section=description-->\n<p><strong>Know what changed. Know what it cost. Prove what you did.<\/strong><\/p>\n\n<p>Aftercare watches your WordPress site after launch. Every day it records your real-world Core Web Vitals; every second it records the changes made to the site. When performance regresses, it connects the two \u2014 an incident opens, an email goes out, and the incident page shows every change from the 72 hours before the regression, right next to the trend.<\/p>\n\n<p>It is built for agencies and freelancers who maintain client sites on monthly care plans \u2014 and for any site owner who wants an answer to \"why did the site just get slower?\" that is based on data instead of guesswork.<\/p>\n\n<h4>\ud83d\udcc8 Core Web Vitals monitor<\/h4>\n\n<ul>\n<li>Daily p75 values for <strong>LCP, INP, CLS and TTFB<\/strong> from the Chrome UX Report \u2014 real field data from actual Chrome users, fetched with your own free Google API key<\/li>\n<li>Optional <strong>real-user monitoring beacon<\/strong>: ~2 KB, no external libraries or services, loaded for a configurable sample of visits and aggregated to daily p75 on your own site<\/li>\n<li>Track the homepage plus as many other URLs as you like, with sparkline trends and pass \/ warn \/ fail status pills<\/li>\n<\/ul>\n\n<h4>\ud83d\udcb0 Performance budgets and incidents<\/h4>\n\n<ul>\n<li>Editable budgets per metric (defaults: LCP 2.5 s, INP 200 ms, CLS 0.1, TTFB 800 ms)<\/li>\n<li>A daily p75 over budget \u2014 or 20% worse than your 28-day baseline \u2014 opens an incident and emails you<\/li>\n<li>Incidents track status (open, acknowledged, resolved, dismissed) and resolve automatically when the metric recovers<\/li>\n<li>Every incident shows the raw change timeline from the 72 hours before the breach<\/li>\n<\/ul>\n\n<h4>\ud83d\udcd2 Change ledger<\/h4>\n\n<ul>\n<li>Records plugin updates (old \u2192 new version), activations, deactivations, theme updates and switches, core updates, allow-listed settings changes, content publishes and new users<\/li>\n<li>Human-readable entries with the responsible user: \"WP Rocket updated 3.15 to 3.16 by admin\"<\/li>\n<li>Filterable timeline by type and date, CSV export, and the full history kept by default<\/li>\n<\/ul>\n\n<h4>\ud83e\uddf0 Fits into your workflow<\/h4>\n\n<ul>\n<li><strong>Dashboard widget<\/strong> with vitals status and open incidents on the main wp-admin screen, plus a pass \/ warn \/ fail dot in the admin bar<\/li>\n<li><strong>Site Health integration<\/strong> \u2014 checks that vitals collection is configured, daily checks are running and budgets are not breached<\/li>\n<li><strong>WP-CLI commands<\/strong> \u2014 <code>wp aftercare pull<\/code>, <code>wp aftercare check<\/code>, <code>wp aftercare status<\/code> and <code>wp aftercare run<\/code> for scripted setups and real server crons<\/li>\n<li><strong>Weekly digest email<\/strong> \u2014 vitals status, changes made and incidents from the past 7 days (opt-out in settings)<\/li>\n<li><strong>Guided first run<\/strong> \u2014 a three-step setup pointer until first data arrives, and suggested privacy-policy text for the RUM beacon<\/li>\n<\/ul>\n\n<h4>\ud83d\udd12 Private by design<\/h4>\n\n<ul>\n<li>No phoning home, no accounts, no external service. CrUX calls go straight from your server to Google with your key; RUM beacons post to your own site's REST API<\/li>\n<li>Uninstall removes every table and option unless you choose to keep the data<\/li>\n<\/ul>\n\n<p>This plugin is complete in itself. Nothing here is capped, timed or held back: every URL you add is monitored, vitals are kept for thirteen months and the change ledger is kept in full.<\/p>\n\n<p>A separate add-on plugin, distributed outside this directory, adds ranked cause attribution and white-label monthly client reports with Slack and webhook delivery. It is not required, and this plugin does not check for a licence, prompt for one or change behaviour without it.<\/p>\n\n<p>Aftercare is built and maintained by <a href=\"https:\/\/www.nomad-developer.co.uk\/\">Nomad Developer<\/a>.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Aftercare does not phone home. CrUX data is fetched directly from Google's API using the key you provide. The optional RUM beacon posts anonymous metric values (no cookies, no personal data, no IPs stored) to your own site's REST API and can be disabled at any time.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>Aftercare connects to the following external services. No connection is made until you configure it.<\/p>\n\n<p><strong>Chrome UX Report API (Google)<\/strong> \u2014 used to retrieve real-user Core Web Vitals field data for the URLs you choose to track. Once you enter your own Google API key, the plugin sends your tracked URLs (or your site's origin) together with that API key to <code>https:\/\/chromeuxreport.googleapis.com<\/code> once per day per URL. No visitor data, personal data or site content is sent. This service is provided by Google: <a href=\"https:\/\/developers.google.com\/terms\">Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a>. If no API key is configured, no request is ever made.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Aftercare \u2192 Settings<\/strong> and paste a Google API key with the Chrome UX Report API enabled (free).<\/li>\n<li>Optionally add up to 5 extra tracked URLs and enable real-user monitoring.<\/li>\n<li>Vitals appear after the first daily pull \u2014 or press \"Run daily checks now\" on the dashboard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20does%20the%20vitals%20data%20come%20from%3F\"><h3>Where does the vitals data come from?<\/h3><\/dt>\n<dd><p>From the Chrome UX Report (field data from real Chrome users), fetched daily with your own Google API key. Optionally, a small RUM beacon collects vitals from your own visitors as a second source.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20limit%20anything%3F\"><h3>Does this plugin limit anything?<\/h3><\/dt>\n<dd><p>No. Tracked URLs are unlimited, vitals are kept for thirteen months and the ledger is kept in full. Both retention windows can be shortened with the <code>aftercare_vitals_retention_days<\/code> and <code>aftercare_ledger_retention_days<\/code> filters if you would rather keep the tables small.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data when I delete the plugin?<\/h3><\/dt>\n<dd><p>By default all Aftercare tables and options are removed on uninstall. Tick \"Keep Aftercare data\" in Settings to preserve them.<\/p><\/dd>\n<dt id=\"can%20i%20run%20the%20checks%20from%20a%20server%20cron%20instead%20of%20wp-cron%3F\"><h3>Can I run the checks from a server cron instead of WP-Cron?<\/h3><\/dt>\n<dd><p>Yes. <code>wp aftercare run<\/code> executes the full daily pipeline (CrUX pull, RUM aggregation, breach detection, retention). Aftercare also uses Action Scheduler automatically when another plugin (such as WooCommerce) provides it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Removed every limit that depended on a licence check: tracked URLs are unlimited, vitals are kept for thirteen months and the change ledger is kept in full<\/li>\n<li>Settings fields are never disabled and are always saved. Settings belonging to the separate add-on are shown only when that add-on is installed, instead of being displayed in a locked state<\/li>\n<li>Removed the licensing code, the upgrade prompts and the reports screen that existed only to advertise the add-on. Features now appear when the code implementing them is present<\/li>\n<li>Removed the bundled translation files and the load_plugin_textdomain call, since translations come from translate.wordpress.org<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Vitals queries now bind the table name and the source ranking list as parameters instead of interpolating them into the SQL string<\/li>\n<li>Readme: a Frequently Asked Questions entry that had been placed inside the Screenshots section now renders where it belongs<\/li>\n<li>Declared compatibility with WordPress 7.1<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>CrUX samples now record which level they came from \u2014 <code>crux_url<\/code> (the tracked URL) or <code>crux_origin<\/code> (the whole site, used when the URL-level record is too thin)<\/li>\n<li>The 28-day baseline is built from a single source, so a URL-level reading is never compared against an origin-level average<\/li>\n<li>The baseline comparison stays muted until 7 days of same-source history exist, preventing a false \"20% regression\" the day CrUX switches levels<\/li>\n<li>Sparklines plot one point per day from the preferred source instead of blending levels together<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Vitals monitoring: daily CrUX p75 pull (LCP, INP, CLS, TTFB) with your own Google API key, optional ~2 KB real-user monitoring beacon<\/li>\n<li>Performance budgets with breach detection against budget and 28-day baseline; incidents with status workflow and email alerts<\/li>\n<li>Change ledger: plugin\/theme\/core updates, activations, theme switches, settings changes, publishes and new users<\/li>\n<li>Dashboard widget, admin bar status indicator, Site Health tests, first-run setup guide<\/li>\n<li>WP-CLI commands: pull, check, status, run<\/li>\n<li>Weekly digest email (opt-out)<\/li>\n<li>Privacy-policy content for the RUM beacon<\/li>\n<li>Pro: cause attribution, white-label client reports, Slack\/webhooks, extended retention<\/li>\n<\/ul>","raw_excerpt":"Daily Core Web Vitals monitoring, a complete change ledger and performance regression alerts. Catch problems before your visitors do.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343106"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/costibotez"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343106"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343106"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343106"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343106"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343106"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}