Lookit Page Watch
Scheduled screenshots of watched pages, compared to a locked baseline and emailed side by side.
by Lookit Design · github.com/lookit-design/page-watch · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/lookit-design/page-watch/archive/refs/heads/main.zipReadme
Lookit Page Watch
Scheduled screenshots of chosen pages, compared against a locked baseline and emailed side by side.
Supports WordPress >= 6.4 on PHP >= 8.1.
Table of Contents
Getting Started
Installation
This plugin is installed from GitHub, not from WordPress.org.
- Clone or copy this repository into
/wp-content/plugins/lookit-page-watch. - Activate Lookit Page Watch through the Plugins menu in WordPress.
Configuration
- Import
n8n/lookit-page-watch-capture-v2.jsoninto n8n, then set the shared token and allowed capture hosts in the Config node. Seen8n/SETUP.md. - Activate the workflow and copy its production webhook URL.
- In WordPress, go to Page Watch → Schedule and email. Paste the webhook URL and the same shared token, then save.
- Use Test the capture service to confirm the endpoint answers and the token matches. It takes no screenshot, so this site does not need to be in
allowed_hosts. - Add pages to the watchlist and run a capture. The first capture of each page becomes its baseline.
The token field stays blank after save; leave it empty to keep the stored value.
Features
- Watchlist of any URLs, on this site or elsewhere.
- Capture every 1, 6, 12 or 24 hours, anchored to a time you pick.
- A locked baseline image per page, replaced only on request.
- Side-by-side comparison in wp-admin, plus capture history.
- Whole-page and worst-area difference scoring, each with its own threshold.
- HTML digest email at a set time, or after every run.
- Retention window for old captures, with baselines exempt.
Security and Privacy
- The capture shared token is never rendered back into the settings form. Submitting the field blank keeps the saved value.
- Settings are not autoloaded.
- Capture payloads are checked as real PNG, JPEG, or WebP images before they are stored.
- Capture responses have byte, dimension, and pixel limits.
- The n8n workflow requires an explicit hostname allowlist and refuses its placeholder credentials.
- Admin screens and AJAX actions require
manage_options. - On uninstall, data is kept by default (configurable under Storage).
The plugin sends each watched URL, capture width, a whole-page flag, the site address, and the shared token to the capture endpoint you configure. No page content, user data, or WordPress credentials are transmitted.
Development
Setup
Install the development dependencies with Composer:
composer install
Running the Test Suite
The integration tests run against a real WordPress test install and a MySQL database. Install the test suite once, then run PHPUnit:
# bin/install-wp-tests.sh <db-name> <db-user> <db-pass> <db-host> <wp-version>
bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest
composer test
The authorisation logic in the bundled n8n workflow is tested separately, straight out of the workflow file, with Node 22 or newer and no dependencies:
node --test 'n8n/tests/*.test.mjs'
Coding Standards
This project follows the WordPress Coding Standards and checks PHP cross-version compatibility:
composer phpcs # check coding standards
composer phpcbf # auto-fix what can be fixed
composer compat # check PHP 8.1+ compatibility
composer lint # php -l syntax check on all files
Continuous Integration
Every push and pull request runs the following GitHub Actions workflows:
| Workflow | Purpose |
|---|---|
| Lint | php -l syntax check across the supported PHP versions, plus the n8n workflow authorisation tests |
| Coding Standards | WordPress Coding Standards (PHPCS) |
| Plugin Check | Official WordPress Plugin Check |
| Test | PHPUnit across a WordPress × PHP matrix |
A scheduled Version Monitor workflow watches for new PHP and WordPress releases so compatibility can be reviewed proactively.
Contributing
Bug reports and pull requests are welcome on GitHub.
License
This plugin is available as open source under the terms of the GPL-2.0-or-later License.
Lookit® is a registered trademark of ZENOVA CORP. n8n and FluentSMTP are trademarks of their respective owners; this plugin is an independent integration and is not affiliated with, sponsored by, or endorsed by either.