Roadmap Product site

Surfaces

WordPress plugin v0.26.0

The flagship surface and the most complete implementation of Red Pen. A logged-in Dev Mode overlay on the site front end, plus a full notes repository in wp-admin - all from a single self-contained plugin file.

User manual (PDF)

At a glance Editors and admins flip on Dev Mode and drop typed notes, pinned to elements, anywhere on the front end. Every note collects on the post's edit screen and in one shared repository. The plugin is free and open source with no third-party services and no key. Dev credit: Lincoln Tracy / Tracy Digital Media LLC.

What it is

Reviewing a WordPress site usually means a messy spreadsheet, a thread of "the about page has a typo", or comments scattered across email. Red Pen puts the note where you found the problem - on the page itself - and collects every note in one place your whole team can see. It is good for editorial review, client hand-offs, content audits, QA passes, and shared to-do lists.

The plugin has two halves that share one data store:

Install and activate

  1. Copy the wp-red-pen folder to wp-content/plugins/ (or upload the zip via Plugins -> Add New -> Upload).
  2. Activate it. There is no build step and no settings you must configure to start - it is a single self-contained wp-red-pen.php with inline CSS and JS.
  3. Click Red Pen: Off in the admin bar to turn Dev Mode on for your account.
  4. Open any post or page on the front end and use the floating button.
  5. Review everything under the Red Pen repository in wp-admin (under Tools).
Running many local sites? Red Pen works well as a default-workflow plugin across a local development fleet. Because it is a single self-contained file, a small script that copies the current build into each install's wp-content/plugins/ (and activates it with WP-CLI) keeps every local site on the same version.

Dev Mode

Red Pen is invisible until a logged-in user with the edit_posts capability (editors and admins) turns on Dev Mode from the admin-bar toggle. Dev Mode is per user - flipping it on affects only your account, so a client and a developer logged into the same site can have it on or off independently.

Leaving a note

With Dev Mode on, the floating button opens the note panel. From there you can:

Every note also records auto-context - the browser, OS, and viewport it was created in - so a layout bug carries the environment it happened in.

Editing a note

Any note can be edited after it is added - change the text, type, priority, or assignee; swap, remove, or add a screenshot; and re-pin, move, or clear the attached element. The front-end panel has full editing.

Statuses, priorities, and replies

Every note carries a status, a priority, and its own reply thread.

Assignee and agent

WordPress is the surface where assignment is fully implemented today. A note carries two distinct, complementary fields:

Why two fields Keeping a human assignee separate from an agent slug lets a board distinguish manual from automated tasks at a glance. This model is the reference the other surfaces and the Hub will adopt as assignment rolls out to them.

The repository

The shared repository admin page lists every note across the site. You can filter by Open / In progress / Resolved / All, by priority, and by assignee ("Assigned to me"), and resolve or reopen any note with one click. A CSV export dumps the current view (honouring the active filters) for handing off or archiving - generated locally, with no external service, and carrying a Client visible column. Each post's edit screen also carries a meta box listing that page's notes inline.

The reason this surface exists for client work: you can let a non-technical client leave pinned notes on a site without a WordPress login. From the "Client review links" panel (under Tools, alongside the Hub settings) you generate a labelled, shareable link. Send it privately to your client; they open it, click the red button, and leave typed notes and replies pinned to the page - the same overlay you use, in a restricted "reviewer mode". This is free core, never gated. Since v0.26.0 the link is a one-way door by default: it collects your client's feedback and shows them their own reports, and it shows them nothing of yours unless you deliberately share it.

What a reviewer can and cannot do

Reviewer mode is a deliberately narrow door. A link holder can open the overlay, pin notes to elements, leave typed notes (type and priority), and reply. A link holder cannot resolve, reopen, edit, delete, or assign notes, cannot open the admin repository, cannot view screenshots, and never sees the user list, the agent options, or any other reviewer link. The boundary is enforced on the server, not just hidden in the interface.

What a reviewer can see changed in v0.26.0

Two rules decide whether a note reaches a reviewer link, and both are checked on the server through one gate:

If you used review links before v0.26.0 Any note that was open, on a public page and not aimed at an agent was readable by anyone holding a reviewer link - including a developer's own working notes. That is fixed, and the fix is retroactive: notes are internal unless opted in. A one-time migration backfills the flag on notes a client filed through a link, so feedback they sent you before the release stays visible to the link that sent it. Legacy notes from before links carried that stamp stay open-only, which is exactly what they had before.

The checkbox sits on the note form in both the front-end panel and the repository edit panel, off by default. A shared note carries a badge in the front-end list, the edit-screen meta box and the repository table, and a Client visible column rides along in the CSV export - so "what has the client actually seen?" is answerable from the same screens you triage on.

Managing links

Share it privately A review link is a bearer link - anyone who has it can leave notes, so share it with your client directly rather than posting it publicly. Abuse is bounded by a per-visitor rate limit and the instant revoke, and an optional expiry adds a second backstop. Because it is a link, the token appears in the URL, so it can show up in that browser's history.

Client report v0.21.0

The deliverable you hand a client. From the Client report panel (under Tools, alongside the review links) you generate a clean, printable summary of the site's notes - Generate report (all) for everything including resolved items, or Open items only. It opens in a new tab; use the browser's Print / Save as PDF to send it. This is the "here is what you asked for, here is what is done" document, drawn straight from the notes you have been triaging.

The report groups notes by status (Open, In Progress, Resolved) with summary counts, and shows each note's type, its severity when set, the page it is on, its screenshot, and the dates it was added and resolved. It is deliberately client-facing: the agent queue and internal-only fields (assignee, agent, code scope, browser context) are left out.

Plain and branded reports

The report comes in two styles, both free. The plain report carries the tool's credit; the branded report lets you set a custom report title, your logo, an accent colour, and hide the "Generated with Red Pen" credit, so it goes out as your own deliverable rather than the tool's. You set these in the same panel.

REST API

The front-end button talks to a small REST API under the wprp/v1 namespace. The same routes are what the Red Pen Hub uses for two-way write-back. Every route is gated by an edit_posts capability check. The front-end button authenticates with the standard wp_rest nonce; a server-to-server client (such as the Hub) authenticates with a WordPress Application Password over HTTP Basic auth.

Method + routePurpose
GET /wp-json/wprp/v1/notesList notes for a view. Accepts target, status, context keys, or an agent slug to fetch an agent's queue. Also accepts scope=all so the Hub can pull every note on the site, not just site-wide (target=0) ones. Notes carry an ISO createdAt and, once resolved, resolvedAt + resolvedBy.
POST /wp-json/wprp/v1/notesCreate a note (body, type, priority, target, anchor, screenshot, agent, and more).
POST /wp-json/wprp/v1/notes/{id}Edit an existing note - text, type, priority, assignee, anchor (re-pin / clear), screenshot, and context.
POST /wp-json/wprp/v1/notes/{id}/statusSet the status (open, progress, or resolved). The Hub's Resolve / Reopen calls this route.
POST /wp-json/wprp/v1/notes/{id}/repliesAdd a threaded reply to a note.

Connect to Hub

To see this site's notes alongside every other project, connect it to the Red Pen Hub. Under the plugin's Display settings, fill in "Connect to Red Pen Hub" with the Hub URL and the shared connect token. The plugin then pushes its notes to the Hub whenever a note changes - the site sends to the Hub, so no Application Password or inbound access is needed.

What the push sends. A push includes every top-level note on the site - all pages and posts, not just site-wide ones - each with its full data: type, priority, severity, anchor, the ISO created and resolved timestamps, statusAt (when the status last moved), the custom type's typeLabel, the resolver, and the assignee. So the board shows the same detail no matter how the site is connected.

There is a second way to connect: instead of the site pushing, the Hub can pull from the site using a WordPress Application Password (see the REST /notes route above). A pull uses the ?scope=all parameter added in v0.19.0 to get the whole note set - before it, a pull saw only site-wide (target=0) notes and page/post-attached ones went missing. Pull connections are also how the Hub writes a resolve back into the WordPress database over REST.

Known gotcha The Hub URL must include the scheme - write http://localhost:3900, not localhost:3900. A schemeless URL is silently rejected by WordPress sanitisation, which saves the token but blanks the URL, so the push quietly no-ops. Recent versions auto-prepend http://, but include it to be safe.

Architecture and data

The plugin keeps everything in standard WordPress structures - no custom tables:

Troubleshooting