=== CaptureRelay ===
Tags: media, photos, mobile, camera
Requires at least: 6.6
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 1.3.3
License: Proprietary

Securely approve CaptureRelay devices and deliver correctly sized images directly to the WordPress Media Library.

== Description ==

CaptureRelay works with any WordPress website running this plugin. Administrators approve each device before it can upload. Every device receives an independent, revocable credential and every upload is signed, replay-protected, rate-limited, and idempotent.

After activation, find all CaptureRelay controls under **Tools > CaptureRelay**. Open the **Settings** tab to establish image quality, upload limits, notifications, security limits, and retention before inviting app users.

CaptureRelay is developed and published by Skyrocket Radio in Mississippi. CaptureRelay is the product name of the mobile app and companion WordPress plugin.

The plugin creates normal WordPress attachments. It does not create or publish posts. Each website can choose its JPEG compression quality and maximum file size in KB, and can optionally email its notification recipients after every successful new upload.

== Installation ==

1. Upload `capture-relay.zip` through Plugins > Add New > Upload Plugin.
2. Activate CaptureRelay.
3. Confirm HTTPS is active.
4. Open Tools > CaptureRelay > Diagnostics.

Use Tools > CaptureRelay and its Settings tab to choose the website's JPEG quality, maximum upload size in KB, notification recipients, upload-email preference, abuse limits, and data-retention periods. Image dimensions are selected per website in the app. The Documentation tab contains the complete administrator and app-user guide.

No `wp-config.php` change is required. Activating the plugin enables CaptureRelay connections.

== Security ==

Only an administrator-approved device receives an upload credential. Approved-device requests use HMAC-SHA256 signatures, short-lived timestamps, one-time nonces, replay protection, revocable credentials, and persistent rate limits. Device credentials are encrypted at rest with AES-256-GCM using site-specific WordPress key material.

Uploads require HTTPS outside local development, accept JPEG files only, verify the signed file hash and dimensions, enforce compressed-file, pixel, and server-memory limits, and are rewritten through the WordPress image editor before entering the Media Library. Rewriting removes embedded image metadata.

Connection requests are public by design because an unpaired app has no credential yet. A public request cannot upload files and must be approved by a WordPress administrator. Optional Apple App Attest and Google Play Integrity verification requires a separately configured server-side verifier; it is never simulated with a secret embedded in the mobile app.

For security updates, install CaptureRelay only from `https://www.capturerelay.app/`. The plugin declares a non-WordPress.org Update URI so an unrelated repository plugin cannot replace this installation.

== Privacy ==

CaptureRelay stores device and delivery information needed to review connection requests, prevent abuse, and audit uploads. This may include a device display name, model, platform, operating-system and app versions, photo credit, timestamps, a pending request's internet address, a keyed hash derived from an internet address, and plugin activity records.

Plain internet addresses are cleared when a request is approved, rejected, cancelled, or expires. Closed connection requests, delivery records, rate-limit counters, and activity entries are removed according to the retention periods configured by the administrator. Uploaded images remain normal WordPress Media Library attachments until an administrator deletes them.

The plugin does not send telemetry or stored WordPress data to CaptureRelay. Optional approval and upload messages are sent using the website's normal WordPress email configuration. CaptureRelay adds suggested text to WordPress's Privacy Policy Guide. Its device records are not associated with a WordPress user email address and therefore are not included automatically in WordPress personal-data email exports or erasures.

CaptureRelay's public privacy policy is available at `https://www.capturerelay.app/privacy.html`, its terms at `https://www.capturerelay.app/terms.html`, and its contact form at `https://www.capturerelay.app/#contact`. Requests concerning images or operational records stored by a destination website must be directed to that website's administrator.

== Changelog ==

= 1.3.3 =
* Removed the redundant first-time setup card from the Documentation tab.
* Hid the tab strip's internal scrollbar while preserving horizontal navigation on narrow screens.

= 1.3.2 =
* Refined the approved-device table with clearer platform details and permanently inline revoke actions.
* Added distinct orange Revoke and red Revoke & Block button treatments.
* Corrected dark-mode contrast across the complete CaptureRelay administration page.

= 1.3.1 =
* Added the exact WordPress Settings location to the plugin description.
* Expanded the first-activation notice with direct links to Settings and Documentation.

= 1.3.0 =
* Consolidated Connections, Settings, Upload Activity, and Diagnostics into one Tools page with horizontal tabs.
* Added comprehensive in-plugin documentation covering setup, app use, device administration, settings, security, privacy, and troubleshooting.
* Added a persistent initial-setup notice that clears after an administrator saves Settings.

= 1.2.2 =
* Identified Skyrocket Radio as CaptureRelay's developer and publisher in plugin metadata and privacy guidance.

= 1.2.1 =
* Linked the live CaptureRelay privacy policy, terms, and contact form from WordPress privacy guidance and direct-distribution documentation.
* Clarified responsibility for privacy requests concerning data stored by independently operated destination websites.

= 1.2.0 =
* Hardened approved-device REST permissions, invalid-authentication throttling, database identifiers, recursive secret redaction, timestamp validation, and administrator notice visibility.
* Added an immutable image-pixel ceiling, PHP memory-budget checks, and WordPress-native JPEG rewriting.
* Added WordPress Privacy Policy Guide content and documented direct-distribution security expectations.
* Added a private Update URI to prevent an unrelated WordPress.org plugin from replacing CaptureRelay.

= 1.1.0 =
* Added permanent device blocking, atomic abuse limits, stricter image validation, metadata removal, and corrected security-data retention.

= 1.0.0 =
* Initial release.
