Skip to content

Optional Reader Signals

Nick Hamze edited this page Sep 2, 2026 · 1 revision

Optional reader signals

Dashless for WordPress includes small, privacy-minded server-side building blocks that a customized Astro frontend can call. They are optional and stay out of the core publishing path.

They are not a hosted audience platform and do not create a Dashless account.

Endpoint summary

Feature Method and route Purpose
Private mailbox POST /wp-json/dashless/v1/mailbox Email a private note about one published story
Receiver List request POST /wp-json/dashless/v1/receiver-list Begin double opt-in for story notices
Confirm or unsubscribe GET /wp-json/dashless/v1/receiver-list/confirm Consume an emailed token
Private reaction POST /wp-json/dashless/v1/reaction Email one count-free signal
Receive Webmention POST /wp-json/dashless/v1/webmention Verify and queue one source/target pair
List Webmentions GET /wp-json/dashless/v1/webmention Return approved mentions for a target URL
Moderate Webmention GET /wp-json/dashless/v1/webmention/moderate Approve or delete through an emailed token

Public endpoints share a privacy-preserving rate limiter. The bucket key is a salted HMAC of the connection address rather than the raw address. The default limit is five requests per 15 minutes and can be changed with WordPress filters.

Private mailbox

The mailbox accepts a published Post ID, reader name, reply email, message up to 4,000 characters, and a honeypot field named website.

Valid messages are sanitized and sent as plain-text mail to the WordPress administrator address. The reader's email becomes Reply-To. Dashless does not create a WordPress comment, post, or public record.

The recipient can be customized with the dashless_mailbox_recipient WordPress filter.

Frontend forms should preserve the reader's text when the endpoint reports mail failure so it can be retried.

Receiver List

The Receiver List is intentionally small and tracker-free:

  1. A reader submits an email address.
  2. WordPress stores a pending record keyed by a salted email HMAC.
  3. WordPress sends a plain-text confirmation link.
  4. The confirmation token expires after seven days.
  5. A confirmed address becomes active.
  6. A newly published Post schedules a plain-text story notice.
  7. Every notice includes a token-only unsubscribe link.

There is no tracking pixel, secret redirect, open count, or click count. Pending records older than seven days are removed during later signup requests.

The current implementation stores list state in a non-autoloaded WordPress option and uses wp_mail. It is suited to a small personal publication, not bulk campaign delivery.

Private reactions

The reaction endpoint accepts a published Post ID and one of three keys:

  • hell-yes
  • questions
  • reminded-me

It sends a plain-text email to the WordPress administrator address. No reaction row, aggregate counter, leaderboard, or public social proof is stored.

Webmentions

The receiver accepts public HTTP source and target URLs. It:

  1. requires the target host to match the WordPress home host;
  2. fetches the source with safe WordPress HTTP handling, a six-second timeout, three-redirect limit, and 512 KiB response limit;
  3. verifies that the source HTML actually links to the target;
  4. stores the mention as hidden and pending;
  5. emails opaque approve and delete links to the administrator; and
  6. returns only approved source, title, and domain fields from the public list endpoint.

The moderation response uses Cache-Control: no-store. Re-receiving an already approved source/target pair does not make it pending again.

To make discovery automatic, add a standards-compatible Webmention endpoint link to the Astro document head when you wire this feature into the frontend.

Search and feed discovery

Every Astro build creates sitemap.xml, rss.xml, and robots.txt. On WP Cloud the companion redirects WordPress core sitemap URLs to the static sitemap so crawlers see one canonical tree.

If the Astro public directory contains indexnow-key.txt with one valid 8–128 character IndexNow key, the WP Cloud release manifest records it. After activation, the companion submits same-host URLs from the static sitemap to IndexNow without blocking publication.

Release activation also sends non-blocking WebSub publish notices for rss.xml and broadcast.xml when present. Failure of any third-party discovery service never fails or rolls back a publication.

Operational requirements

  • Configure reliable WordPress mail delivery before exposing mailbox or Receiver List forms.
  • Keep the WordPress administrator email current.
  • When Astro and WordPress use different hosts, configure only the narrow cross-origin behavior your frontend needs.
  • Present success and failure responses without leaking subscriber or moderation state.
  • Add abuse controls at the edge if the publication receives more traffic than the built-in personal-site rate limit is designed for.

Clone this wiki locally