Document Expiry Reminder

Description

Document Expiry Reminder helps you keep track of documents that expire —
licences, certificates, contracts, permits, insurance policies and
similar records — and reminds the right people before they lapse.

This plugin assists with document-expiry tracking and reminders. It does
not provide legal advice or guarantee regulatory compliance.

Major features

  • Document tracking — title, reference number, category, owner
    (a WordPress user), issue date, expiry date, workflow state, and notes,
    with a calculated status (Active, Expiring Soon, Critical, Expired, or
    No Expiry) that recalculates automatically as dates approach.
  • Automated reminders — a daily scan sends email reminders on
    configurable days-before/after-expiry offsets, to configurable
    recipients (site administrator, document owner, or a custom email
    address), either globally or overridden per document.
  • Renewal history — renewing a document records the previous dates
    and file as an immutable history entry; nothing is ever overwritten
    or lost.
  • Secure file uploads — attach a scanned copy of a document, stored
    outside the web-servable uploads path and served only to authorized
    users.
  • CSV import and export — bulk-load documents from a spreadsheet, or
    export the current list, with a preview-before-import safety step.
  • Role-based access — an Administrator role and a Document Manager
    role (everything except plugin settings), built from nine
    independent capabilities so access can be tuned further if needed.
  • Notification history — every reminder ever sent, failed, or
    skipped is recorded and reviewable, with a manual retry action for
    failures.
  • Privacy-aware — integrates with WordPress’s built-in personal-data
    export and erasure tools.
  • Accessible — audited against WCAG 2.2 AA (see
    docs/ACCESSIBILITY.md in the plugin’s source repository).
  • Deactivating the plugin never deletes your data. Uninstalling it only
    deletes data if you explicitly opt in beforehand.

Who this is for

Anyone tracking documents with a hard expiry date and a real cost of
missing it: compliance certificates, professional licences, insurance
policies, contracts, permits, domain/SSL-adjacent internal records, or
similar. It is a WordPress-native alternative to a spreadsheet with a
manually-checked “renew by” column.

Configuration

All configuration lives on Document Expiry Settings:

  • Expiring soon days / Critical days — how many days before expiry a
    document is considered “expiring soon” or “critical”, for the
    calculated status shown throughout the admin.
  • Reminder processing time — the time of day (in your site’s
    configured timezone) the daily reminder scan runs.
  • Batch size — the maximum number of reminder emails sent per
    processing run, to bound how long any one run takes.
  • Global reminder rules — one or more “N days before/after expiry,
    send to X” rules that apply to every document left on the default
    “inherit” reminder mode. Individual documents can instead be given
    their own document-specific rules, or have reminders disabled
    entirely.
  • File uploads — enable/disable, maximum size, and allowed file
    extensions.
  • Email sender name / reply-to — used on outgoing reminder emails.
  • Delete data on uninstall — off by default; see “Privacy” below.

All dates entered anywhere in the plugin are interpreted, calculated,
and displayed in your site’s configured timezone (Settings General
Timezone in WordPress core), not UTC and not the server’s local time.

See docs/ADMIN-GUIDE.md in the plugin’s source repository for a full
walkthrough of every screen.

Privacy

This plugin stores documents, categories, reminder rules, renewal
history, uploaded files, and notification records in its own database
tables. The only personal data involved is the association between a
document and its “owner” (a WordPress user) and the recipient email
addresses reminder notifications were sent to.

  • It registers wp_add_privacy_policy_content() suggested policy text.
  • It supports WordPress’s built-in “Export Personal Data” tool for a
    document owner’s associated documents.
  • It supports WordPress’s built-in “Erase Personal Data” tool: erasing a
    user anonymizes their owner_user_id reference on documents (the
    documents themselves, and their history, are never deleted by an
    erasure request — only the personal-data linkage is removed).
  • It makes no external network calls and uses no third-party analytics,
    advertising, or tracking service of any kind.
  • Deactivating never deletes data. Uninstalling only deletes data if you
    have explicitly opted in via Settings beforehand.

Support

Please use the plugin’s WordPress.org support forum for questions.
Include your WordPress version, PHP version, and (if reporting a bug) the
steps to reproduce it and any relevant error messages — never include
real document contents, email addresses, or other personal data in a
public support request.

License

This plugin is licensed under the GPLv2 (or later). See
https://www.gnu.org/licenses/gpl-2.0.html for the full license text.

Installation

  1. Upload the plugin to the /wp-content/plugins/ directory, or install
    it through the WordPress “Add New Plugin” screen (Plugins Add New
    Upload Plugin).
  2. Activate the plugin through the “Plugins” screen in WordPress.
    Activation creates the plugin’s database tables and the
    “Document Manager” role; it never modifies any other plugin’s or
    WordPress core’s data.
  3. A new “Document Expiry” menu appears in the admin sidebar. Start on
    its Settings screen to configure reminder timing, thresholds, and
    recipients (see “Configuration” below), then add your first document
    from Document Expiry Add New.

Requirements

  • WordPress 6.5 or later.
  • PHP 8.1 or later.
  • Outbound email configured on the server (or an SMTP plugin) for
    reminders to actually leave the server — see “Email delivery” below.
  • If using file uploads: a hosting environment where a
    non-web-servable directory can be created under wp-content/uploads/
    — see “Secure upload requirements” below.

FAQ

Does this plugin guarantee legal or regulatory compliance?

No. This plugin assists with document-expiry tracking and reminders. It
does not provide legal advice or guarantee regulatory compliance. You
remain responsible for verifying your own compliance obligations.

Does deactivating the plugin delete my data?

No. Deactivation never deletes data. Data is only removed on uninstall
(deleting the plugin after deactivating it), and only if you have
explicitly enabled “Delete data on uninstall” in Settings beforehand. By
default, uninstalling also preserves all data.

Does a “Sent” notification mean the email was actually delivered?

No. “Sent” means WordPress’s wp_mail() function accepted the message
for processing and reported success — it does not mean the message was
delivered to, or arrived in, the recipient’s inbox. Actual delivery
depends on your server’s mail transport, DNS/SPF/DKIM configuration, and
the receiving mail server, none of which this plugin controls or can
verify. If reminders are not arriving, check your site’s outbound-email
configuration (an SMTP plugin is strongly recommended over PHP’s default
mail() function) and the Notifications screen for recorded failures.

Why didn’t my reminder send exactly on schedule?

By default, WordPress uses WP-Cron, which only fires on a site visit —
on a low-traffic site, a scheduled event can run late. For reliable
timing, configure a real system cron job to trigger WordPress’s
scheduler instead of relying on site traffic. See docs/CRON-SETUP.md
in the plugin’s source repository for exact instructions. The
Notifications screen shows a warning if scheduling looks unhealthy or
stale.

What are the server requirements for secure file uploads?

Uploaded files are stored in a dedicated directory
(wp-content/uploads/document-expiry-reminder-private/) that must not
be directly reachable by URL — files are only ever served through the
plugin’s own authenticated download handler. The plugin attempts to
verify this automatically and warns in the admin if it cannot confirm
protection. On Apache, this typically requires directory listing and
direct access to be disabled (an .htaccess file, generated
automatically, handles this in most configurations); on Nginx, a
matching server-block rule needs to be added manually. See
docs/FILE-STORAGE-SETUP.md in the plugin’s source repository for exact
configuration examples.

Where do I report a bug or request a feature?

Through the plugin’s support forum on WordPress.org, or the issue
tracker of its source repository if you installed it from source
control.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Document Expiry Reminder” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.1.0

Initial release candidate. See CHANGELOG.md in the plugin’s source
repository for the full, itemized list of what this version includes.