=== VidioPay ===
Contributors: frankhost
Tags: video, pay per view, vod, pesapal, paypal, flutterwave, multicurrency, streaming, subscriptions, hls
Requires at least: 6.5
Requires PHP: 8.1
Stable tag: 1.0.0
License: GPLv2 or later

VidioPay is a WordPress video-on-demand commerce plugin with Pesapal, PayPal and Flutterwave payment configuration, managed multi-currency pricing, pay-per-view products, rentals, subscriptions, multi-source playback and protected private streaming.

Plugin website: https://vidiopay.frankhost.us

== Description ==

VidioPay turns WordPress into a video storefront where a visitor can browse poster cards, select a title, choose an enabled compatible payment gateway and watch according to the purchased entitlement.

Version 0.8.0 adds automatic FX synchronization, managed currencies, a signed FRANKHOST licensing client, and a broader native Elementor component library. v0.7.0 separated FRANKHOST product-owner controls from website-owner controls. It adds a site-owner Monetization dashboard, hides vendor Feature Packaging from ordinary installations, and introduces a read-only License & Edition screen integrated with the live FRANKHOST licensing service. v0.6.2 customer authentication, secure guest checkout, no-payment testing and the OTT foundation remain intact. Customers can pay for PPV, rentals, view packs and subscription plans without first being sent to the WordPress login page. Administrators can enable the local VidioPay Test Gateway, simulate Completed, Pending or Failed checkout results, test PPV/rentals/view packs/subscriptions without charging real money, inspect simulated orders in the Testing Lab, and simulate recurring subscription renewals through VidioPay's normal renewal logic.

Core capabilities include:

* Poster-first storefront with Translated, Non-Translated and Subtitled presentation filters.
* Genre and VJ / Translator browsing.
* Featured, Latest, Popular and Continue Watching shelves.
* Selectable Video Commerce/PPV, OTT/Subscription Streaming, or Hybrid site mode.
* Administrator-managed OTT shelves sourced from Latest, Featured, Popular, Genre, VJ, Presentation, Series, manual titles, Continue Watching or My List.
* Customer My List/watchlist with frontend toggle buttons.
* Server-side viewer sessions with plan-based simultaneous-stream limits.
* Individual PPV/permanent purchases, rentals, limited view packs and per-title subscriptions.
* Recurring library subscription plans that can unlock selected titles or every published VidioPay video.
* Series taxonomy plus season and episode numbering and episode browsing.
* My Library and My VidioPay customer account views.
* Resume playback for VidioPay HTML5/HLS players.
* Revenue, purchase, play, watch-time and popular-title analytics.
* Protected private MP4 and HLS storage with expiring, session-bound playback URLs.
* Optional Nginx X-Accel-Redirect handoff for private media after VidioPay authorization.
* Pesapal API 3.0 order, callback, IPN and recurring-payment handling.
* PayPal Orders v2 configuration and verified one-time capture flow.
* Flutterwave Standard configuration, hosted checkout, return verification and webhook verification.
* Managed multi-currency display/checkout with optional automatic ExchangeRate-API or Open Exchange Rates synchronization, manual overrides/fallbacks and immutable order snapshots.
* Vendor-controlled Free / Pro / OTT / Enterprise / Disabled feature policy, hidden from ordinary customer installations.
* Site-owner Monetization dashboard for video prices, subscription-plan prices, currencies and gateways.
* License & Edition screen with installation UUID, signed remote activation/validation/deactivation support, cached license snapshot and daily refresh foundation.
* Vendor-controlled licensing endpoint, defaulting to https://license.frankhost.us and overridable at deployment level; Ed25519 signed responses are verified with a pinned public key.
* Local VidioPay Test Gateway for safe no-money checkout and recurring-renewal QA.
* Secure guest checkout with post-payment customer creation/association and one-time email sign-in links for existing accounts.
* Expanded Elementor component library including OTT Hero, Recommendations, Viewer Profiles, Devices and Series Navigator, with shared style controls for accent, text, surface, radius and spacing.

== How to Use ==

A comprehensive guide is built into WordPress at:

VidioPay > How to Use

The guide covers installation, no-payment testing, Pesapal/PayPal/Flutterwave configuration, page creation, monetization, License & Edition status, adding videos, all supported video sources, PPV/rental/view-pack/subscription products, library subscription plans, customer purchase flow, customer management, analytics, secure streaming, going live and troubleshooting.

== Pages Created by VidioPay ==

Open VidioPay > Dashboard and click "Create / verify VidioPay pages".

VidioPay creates or verifies these published WordPress Pages:

1. Movies
   Slug: vidiopay-movies
   Content: [vidiopay_home]
   Purpose: main storefront with shelves, subscription plans and filterable catalog.

2. My Library
   Slug: vidiopay-library
   Content: [vidiopay_my_library]
   Purpose: titles the logged-in customer currently has permission to watch.

3. Subscription Plans
   Slug: vidiopay-plans
   Content: [vidiopay_plans]
   Purpose: published recurring VidioPay library plans.

4. My VidioPay
   Slug: vidiopay-account
   Content: [vidiopay_account]
   Purpose: customer account overview with active plans, Continue Watching, My List, library and account security.

5. Sign In
   Slug: vidiopay-sign-in
   Content: [vidiopay_sign_in]
   Purpose: branded customer authentication with email/password and one-time secure email links.

The create/verify process does not automatically add these pages to the theme navigation menu. Add them to the site menu separately when required by the active theme.

== Elementor Compatibility ==

Elementor is optional. VidioPay works normally without it.

When Elementor is active, VidioPay adds a dedicated "VidioPay" category in the Elementor widgets panel with these native widgets:

* VidioPay Storefront
* VidioPay Movie Catalog
* VidioPay My Library
* VidioPay Subscription Plans
* VidioPay Account
* VidioPay Continue Watching
* VidioPay Single Video
* VidioPay Currency Switcher
* VidioPay My List
* VidioPay OTT Shelf
* VidioPay Sign In
* VidioPay OTT Hero
* VidioPay Recommendations
* VidioPay Viewer Profiles
* VidioPay Devices
* VidioPay Series Navigator

For the five automatically generated VidioPay pages, click VidioPay > Dashboard > Create / verify VidioPay pages after Elementor is active. If a page still contains only its untouched VidioPay shortcode, VidioPay safely prepares it as an Elementor page containing the matching VidioPay widget. Existing Elementor/custom layouts are never overwritten.

You may then use Edit with Elementor and move the VidioPay widget into any Elementor container, add headings/banners/images/buttons around it, set backgrounds and spacing, or add more VidioPay widgets. The same widgets can also be used on any other Elementor page.

== Initial Setup ==

1. Back up WordPress files and the database before installing an upgrade.
2. Upload the VidioPay ZIP through Plugins > Add Plugin > Upload Plugin.
3. Activate VidioPay. If upgrading, choose Replace current with uploaded when WordPress offers that option.
4. Open VidioPay > Settings.
5. Choose Pesapal Sandbox while testing or Live for production.
6. Enter the Pesapal Consumer Key and Consumer Secret.
7. Set the default currency, for example UGX.
8. Save settings.
9. Click Register Pesapal IPN. A successful registration stores the Pesapal IPN ID.
10. Open VidioPay > Dashboard and click Create / verify VidioPay pages. If Elementor is active, untouched VidioPay pages are also prepared for Elementor.
11. For no-money QA, enable the VidioPay Test Gateway under Settings and use VidioPay > Testing Lab.
12. Open VidioPay > How to Use for the complete administrator guide.

== Adding a Video ==

1. Open VidioPay > Add Video.
2. Enter the movie/video title, description and excerpt.
3. Set the Featured Image. VidioPay uses it as the storefront poster.
4. Assign Genre, VJ / Translator and Presentation (Translated, Non-Translated or Subtitled).
5. Assign a Series plus season/episode numbers when applicable.
6. Set price and currency.
7. Choose the access model: PPV/permanent, Rental, View pack, or recurring per-title Subscription.
8. Configure the appropriate rental hours, number of views, or subscription schedule.
9. Choose the video source/delivery mode.
10. Add a trailer URL if available.
11. Publish the title.

== Video Sources ==

A VidioPay title can use:

* Self-hosted protected private MP4.
* Self-hosted protected private HLS package.
* YouTube.
* Vimeo.
* Cloudflare Stream.
* Bunny Stream.
* Mux.
* WordPress Media or another direct MP4 URL.
* Remote HLS/CDN .m3u8 URL.
* Generic external iframe/embed player URL.

Protected private MP4/HLS is recommended when VidioPay itself should authorize the media request. External providers remain subject to their own privacy and playback controls. Gating a YouTube, Vimeo or generic iframe behind VidioPay does not turn a public provider URL into DRM. For higher-value content, use protected private delivery or a video provider configured with signed/private playback.

== OTT / Netflix-Style Mode ==

Open VidioPay > Settings > Site Experience and choose:

* Video Commerce / PPV — classic pay-per-title storefront.
* OTT / Subscription Streaming — subscription-oriented storefront using managed OTT shelves.
* Hybrid — combines PPV/rentals with OTT shelves and subscription plans.

Manage dynamic homepage rows under VidioPay > OTT Shelves. Shelf sources include Latest, Featured, Popular, Genre, VJ / Translator, Presentation, Series, Manual selection, Continue Watching and My List. Use the WordPress Order field to control row order.

My List is available through the customer account, catalog/movie buttons, [vidiopay_watchlist], and the VidioPay My List Elementor widget. Individual shelves can also be placed with [vidiopay_ott_shelf id="123"] or the VidioPay OTT Shelf Elementor widget.

Subscription plans can define simultaneous streams, maximum resolution metadata, viewer profile allowance, device limit and future offline/download entitlement. v0.7.0 actively uses simultaneous streams in the viewer-session foundation; the remaining plan capabilities are stored for later provider/profile/device modules.

== Monetization and Licensing Separation ==

Open VidioPay > Monetization to manage this website's own viewer-facing business: video prices and selling models, subscription-plan prices, currencies and payment gateways.

Open VidioPay > License & Edition to view the installation's read-only edition/license state, installation UUID, activation usage and future renewal/expiry data. Ordinary website owners cannot edit FRANKHOST's Free / Pro / OTT / Enterprise packaging.

The vendor feature-policy editor is hidden by default and is honored only when FRANKHOST explicitly enables VIDIOPAY_VENDOR_DEVELOPMENT for development/QA. Signed licensing responses from license.frankhost.us are the production source of truth; local development policy remains limited to explicit development/QA mode.

== Product Models ==

PPV / Permanent access:
Customer pays once and retains access.

Rental:
Customer can watch until the configured access period expires.

View pack:
Customer buys a configured number of playback starts.

Per-title subscription:
Customer makes recurring payments for one title.

Library subscription:
A VidioPay Subscription Plan unlocks selected videos or every published VidioPay video according to the plan configuration.

== Creating a Library Subscription Plan ==

1. Open VidioPay > Subscription Plans > Add Plan.
2. Enter the plan title and description.
3. Set recurring price and currency.
4. Choose DAILY, WEEKLY, MONTHLY or YEARLY billing.
5. Set the Pesapal schedule length.
6. Choose Unlock all published VidioPay videos or select individual titles.
7. Optionally mark the plan Featured.
8. Publish the plan.

== Customer Purchase Flow ==

1. Customer selects a title or subscription plan.
2. VidioPay checks whether the customer is already signed in and already has access.
3. When Guest checkout is enabled, a logged-out customer enters first name, email and optional phone directly on the VidioPay checkout form. No WordPress login is required before payment.
4. VidioPay creates a pending local order. It does not create a viewing entitlement for a pending or failed payment.
5. The selected real gateway completes its hosted/verified payment flow; the VidioPay Test Gateway can simulate the same outcome without charging money.
6. Only after a verified Completed payment does VidioPay create or associate the WordPress customer account and call the normal entitlement-grant logic.
7. If the email is new, VidioPay creates the customer account and the verified checkout browser can be signed in automatically.
8. If the email already belongs to an existing account, VidioPay does not automatically sign the browser into that old account. Instead, the purchase is attached to the existing customer and a one-time secure sign-in link is emailed.
9. The entitlement then appears in My Library / My VidioPay according to its access model.

== Guest Checkout Security ==

Guest checkout is enabled by default and can be controlled under VidioPay > Settings > Site Experience.

The design deliberately separates payment from authentication:

* A customer can pay without first registering or visiting wp-login.php.
* Pending and failed orders never create viewing access.
* A new email can receive a new VidioPay customer account only after successful payment verification.
* An existing email is not treated as proof that the buyer owns the existing account. VidioPay therefore never auto-signs a guest into an existing account merely because that email was typed at checkout.
* Existing customers receive a one-time secure sign-in link by email after a verified guest purchase.
* The one-time sign-in token expires after 30 minutes and is invalidated after use.


== No-Payment Testing ==

VidioPay v0.7.0 includes a local Test Gateway so development and staging sites can exercise checkout without paying real money.

1. Open VidioPay > Settings > Payments · VidioPay Test Gateway.
2. Enable “VidioPay Test — No real payment”.
3. Choose a simulated result: Completed, Pending or Failed.
4. Optionally choose VidioPay Test as the Default gateway while testing.
5. Open a locked video or Subscription Plan in a logged-out/incognito browser.
6. Enter a customer name and email (phone is optional) directly in the VidioPay checkout form.
7. Choose “VidioPay Test — No real payment” and continue checkout; no WordPress login is required when Guest checkout is enabled.
8. A Completed simulation creates the normal order and entitlement records but never contacts Pesapal, PayPal, Flutterwave, a bank, card network or mobile-money provider.
9. Pending and Failed simulations do not grant access.
10. Open VidioPay > Testing Lab to inspect simulated orders and verify access.
11. For a completed test subscription, use Simulate renewal to extend the subscription through VidioPay's ordinary renewal logic without waiting for the billing period.

Test transactions remain visible in VidioPay > Payments and VidioPay > Customers on purpose, allowing administrators to inspect the same data structures used by verified real payments. Disable the Test Gateway before public production use.

== Secure Streaming ==

VidioPay supports protected private MP4/HLS with expiring playback URLs.

The Settings screen includes:

* Private storage path.
* Playback token lifetime.
* Optional Nginx X-Accel-Redirect.
* X-Accel internal prefix.

Do not enable X-Accel-Redirect until a matching internal Nginx location has been configured on the server.

VidioPay access control is not studio-grade DRM. Screen recording cannot be completely prevented by a normal WordPress plugin. High-value content should use protected HLS or a provider with signed playback/DRM capabilities.

== Customers and Analytics ==

VidioPay > Payments:
Displays payment reference, customer, product, amount, status, payment method and date.

VidioPay > Customers:
Displays video/plan entitlements, expiry, view usage and status.

VidioPay > Analytics:
Displays purchases, plays, watch time, revenue by currency and popular videos. Exact watch-time tracking is available for VidioPay HTML5/HLS playback; third-party iframe players are counted as launches.

== Going Live ==

1. Complete no-payment Test Gateway QA plus Pesapal Sandbox payment, callback, IPN and playback tests first.
2. Obtain production Pesapal credentials.
3. Change VidioPay > Settings > Environment to Live and save.
4. Enter the live Consumer Key and Consumer Secret.
5. Register the Pesapal IPN again in the Live environment.
6. Disable the VidioPay Test Gateway before public launch.
7. Make a low-value real transaction and verify end-to-end access before public launch.

== Troubleshooting ==

Pesapal checkout does not open:
Check environment, Consumer Key, Consumer Secret, IPN ID, currency and outbound HTTPS connectivity.

Payment completes but video remains locked:
Check VidioPay > Payments and confirm the Pesapal callback/IPN URLs are publicly accessible over HTTPS.

Poster missing:
Set the VidioPay video's Featured Image.

External provider will not play:
Confirm embedding is enabled for the WordPress domain and use a valid provider player/embed URL.

Private video will not stream:
Confirm the private directory is writable and keep X-Accel-Redirect disabled until Nginx is configured.

Created VidioPay pages do not appear in navigation:
Add Movies, My Library, Subscription Plans, My VidioPay and Sign In to the active WordPress navigation/menu manually if the theme does not add pages automatically.

== Shortcodes ==

[vidiopay_home]
Full storefront with hero, Continue Watching, Featured, Latest, Popular, plans and the filterable catalog.

[vidiopay_catalog]
Filterable poster catalog. Optional attributes include columns and per_page.

[vidiopay_video id="123"]
VidioPay offer/player for one video.

[vidiopay_plans]
Published recurring subscription plans.

[vidiopay_my_library]
All titles the logged-in customer can currently watch, including titles inherited from a plan.

[vidiopay_continue_watching]
Unfinished titles for the logged-in customer.

[vidiopay_watchlist]
The logged-in customer's My List/watchlist.

[vidiopay_ott_shelf id="123"]
Render one published OTT shelf by ID.

[vidiopay_account]
Customer account view with active plans, Continue Watching, My List, library and account security.

[vidiopay_sign_in]
Branded VidioPay customer sign-in with email/password and one-time secure email links.

[vidiopay_hero]
Render the currently selected managed OTT Hero, or pass an id attribute for a specific hero.

[vidiopay_recommendations]
Profile-aware recommendation shelf. Optional attributes include title and limit.

[vidiopay_profiles]
Viewer-profile selector/management for OTT accounts.

[vidiopay_devices]
Registered-device management for the logged-in customer.

[vidiopay_series_navigator]
Season/episode navigator for the series associated with a VidioPay episode/video.

== Plugin Links ==

Plugin website: https://vidiopay.frankhost.us
Developer: https://frankhost.us
Telephone: +256 784 975 651

== Upgrade Notice ==

= 0.8.0 =
Adds automatic managed FX, signed FRANKHOST licensing-client support and a broader Elementor component library while preserving the v0.7 payment/OTT baseline.

= 0.7.0 =
Separates FRANKHOST vendor controls from website-owner monetization controls and adds the read-only License & Edition foundation.

= 0.3.4 =
* Added native Elementor widgets for the VidioPay storefront, catalog, library, plans, account, Continue Watching and single-video output.
* Added safe Elementor preparation for untouched VidioPay-generated pages.
* Added direct Edit with Elementor links on the VidioPay dashboard when Elementor is active.
* Existing custom Elementor layouts are never overwritten by Create / verify VidioPay pages.

= 0.3.3 =
* Standardized VidioPay admin cards and card-like panels to a 6px corner radius.
* Removed the blue left accent band from the main VidioPay title card.
* Added Playfair Display for headings/titles and Quicksand for VidioPay admin body/UI text.

= 0.3.2 =
Adds the professional VidioPay light administration interface and branded management screens.

= 0.3.1 =
Adds a comprehensive administrator How to Use guide, explicit page-creation information, Plugins-screen Settings/How to Use action links, and dedicated VidioPay website metadata.

== Changelog ==

= 1.0.0 =
* First commercial VidioPay 1.0.0 release derived from the certified WooCommerce bridge baseline.
* Added optional WooCommerce lifetime / PPV product mapping so verified WooCommerce orders can grant VidioPay viewing entitlements while native VidioPay checkout and gateways remain available.
* Added idempotent WooCommerce entitlement creation, full refund / cancellation / failed-order revocation, guest customer resolution, quantity-one lifetime-product enforcement and HPOS-compatible WooCommerce CRUD integration.
* Added official VidioPay brand assets and the branded VidioPay administration dashboard header.


= 0.8.0 =
* Added automatic FX scheduling with ExchangeRate-API and Open Exchange Rates providers.
* Added managed currency checkboxes, custom ISO codes, sync frequency, API-key storage, manual overrides and manual fallback rates.
* Automatic rates are cached; checkout never requires a live FX API call.
* Added FX provider/source timestamps to immutable order rate snapshots.
* Added server-side signed license activation, validation and deactivation client for license.frankhost.us using Ed25519 verification.
* Added daily license refresh foundation while retaining the cached snapshot during temporary network failures.
* Ordinary unlicensed installations run the Free edition; full development access requires the explicit VIDIOPAY_VENDOR_DEVELOPMENT flag.
* Added HTTPS trust-on-first-use bootstrap/caching of the FRANKHOST Ed25519 public verification key, with VIDIOPAY_LICENSE_PUBLIC_KEY available for stricter hard pinning.
* Expanded native Elementor widgets with OTT Hero, Recommendations, Profiles, Devices and Series Navigator.
* Added shared Elementor style controls to VidioPay widgets.


= 0.7.0 =
* Replaced the ordinary Products menu with a consolidated VidioPay > Monetization control centre for site-owner video pricing, subscription-plan pricing, currencies and gateways.
* Removed Feature Packaging from ordinary customer installations. The vendor policy editor is exposed only when VIDIOPAY_VENDOR_DEVELOPMENT is explicitly enabled.
* Added a read-only VidioPay > License & Edition screen with edition/status, masked key, licensed-to field, installation UUID, activation usage, renewal/expiry/grace fields and licensing-service endpoint.
* Added the client-side license snapshot contract that became the basis for the signed FRANKHOST licensing integration.
* Moved the licensing endpoint out of ordinary website-owner Settings; the vendor controls the endpoint, defaulting to https://license.frankhost.us.
* Preserved existing v0.6.2 guest checkout, branded customer sign-in, Test Gateway, OTT and real payment flows.

= 0.6.2 =
* Added a branded VidioPay customer Sign In page with email/password and secure email-link sign-in.
* My Library, My List, My VidioPay and login-required subscription/purchase links no longer send customers to wp-login.php.
* Added in-account password setting and VidioPay sign-out flow.
* Added an exclusive Test Gateway switch so real gateways can stay configured and automatically return when testing is turned off.


= 0.6.1 =
* Added secure guest checkout for video and subscription-plan purchases.
* Removed the forced pre-payment WordPress login redirect when Guest checkout is enabled.
* Added post-verification customer account creation/association.
* Added one-time secure email sign-in links for purchases made using an email that already belongs to a customer account.
* Added automatic sign-in for a newly created customer only when the verified checkout return carries the matching checkout token.
* Added guest-customer fields and customer provisioning state to VidioPay orders.
* Kept Pesapal, PayPal, Flutterwave and Test Gateway verification as the gate before access is granted.


= 0.6.0 =
* Added the local VidioPay Test Gateway for no-money checkout QA.
* Added configurable Completed, Pending and Failed simulated payment outcomes.
* Completed simulations use the ordinary VidioPay order-to-entitlement flow.
* Added VidioPay > Testing Lab with simulated order inspection and testing instructions.
* Added simulated recurring renewal for completed Test Gateway subscriptions.
* Added explicit customer-facing TEST MODE notices so simulated transactions cannot be confused with real payments.
* Added Test Gateway to configurable feature packaging and the gateway selector, including recurring checkout.
* Fixed a duplicated Movies row on the VidioPay Dashboard page list.
* Preserved the v0.5 OTT/session/watchlist foundation and the previously verified real payment architecture.

= 0.5.0 =
* Added selectable PPV, OTT and Hybrid site modes.
* Added administrator-managed OTT Shelves post type with Latest, Featured, Popular, Genre, VJ, Presentation, Series, Manual, Continue Watching and My List sources.
* Added My List/watchlist database storage, REST toggle endpoint, catalog/movie controls, shortcode and Elementor widget.
* Added plan capabilities for simultaneous streams, maximum resolution, viewer profiles, registered devices and future downloads.
* Added viewer-session database and REST start/heartbeat/end endpoints with plan-based concurrent stream enforcement in OTT/Hybrid mode.
* Expanded feature packaging to Free, Pro, OTT, Enterprise and Disabled.
* Added VidioPay OTT Shelf shortcode and Elementor widget.
* Preserved PPV mode as the default and kept the v0.4 payment/multi-currency gateway architecture intact.

= 0.4.0 =
* Added configurable Free / Pro / Disabled feature policy.
* Added deployment-independent licensing-service URL and local/remote policy source settings.
* Added managed multi-currency base currency, enabled currency list and manual rate table.
* Added per-order product price, charge price, gateway and FX snapshot fields.
* Added customer currency switcher shortcode and Elementor widget.
* Added PayPal Sandbox/Live Client ID and Secret configuration with Orders v2 create/capture verification for one-time purchases.
* Added Flutterwave keys, payment options, webhook secret hash and verified Standard checkout flow for one-time purchases.
* Kept Pesapal as the currently supported recurring gateway while PayPal Subscriptions and Flutterwave plan mapping remain future recurring phases.

= 0.3.5 =
* Removed the blue left accent band from the Elementor detected information card.


= 0.3.4 =
* Added a dedicated VidioPay Elementor widget category.
* Added seven native VidioPay Elementor widgets.
* Added automatic, non-destructive Elementor preparation for untouched generated VidioPay pages.
* Added Elementor guidance to the built-in administrator manual.
* Added Edit with Elementor page shortcuts on the VidioPay dashboard.

= 0.3.3 =
Refined VidioPay admin styling and typography with 6px cards, a cleaner title card, Playfair Display headings and Quicksand body text.

= 0.3.2 =
* Added a scoped VidioPay admin design system using #96CBE0 as the primary brand color.
* Restyled VidioPay dashboard, settings, guide, products, payments, customers and analytics screens with light cards, soft borders, branded buttons and improved tables.
* Restyled VidioPay video/plan post type and taxonomy administration screens without affecting unrelated WordPress admin pages.
* Preserved the dark cinematic public storefront/player design.

= 0.3.1 =
* Added VidioPay > How to Use with comprehensive administrator instructions.
* Added exact page titles/slugs/shortcodes beside the Create / verify VidioPay pages button.
* Added Settings and How to Use links beneath VidioPay on the WordPress Installed Plugins screen.
* Changed Plugin URI to https://vidiopay.frankhost.us.
* Added VidioPay website link to plugin metadata.

= 0.3.0 =
* Added recurring subscription plan post type and multi-video entitlements.
* Added YouTube, Vimeo, Cloudflare Stream, Bunny Stream, Mux and generic external players.
* Added direct MP4 and remote HLS source choices alongside private MP4/HLS.
* Added Presentation and Series taxonomies plus season/episode fields.
* Added storefront home shelves and StoryAfrica-style presentation chips/poster actions.
* Added My VidioPay account and Continue Watching/resume.
* Added optional Nginx X-Accel-Redirect for authorized private files.
* Added external-player entitlement launch endpoint.
* Preserved Pesapal order/IPN verification and v0.2 source compatibility.

= 0.2.0 =
* Added protected MP4/HLS, catalog, VJ/genre taxonomies, library and analytics.

= 0.1.0 =
* Initial Pesapal PPV foundation.

Developed by FRANKHOST (https://frankhost.us) - +256 784 975 651
