Component library / License Key·9 states General tab · first card

Canonical component · one anatomy, nine states

License Key

Always the same card — heading “License Key”, subheading “Your license key provides access to updates and support.” Only the control area changes, driven by the EDD statuses the plugins already use (valid / invalid / invalid_item_id / expired, error missing) plus the shared 14-day grace period. Expand Spec under any state for triggers, actions, and code grounding.

01Lite — no license needed Free version, no key ever entered

License Key

Your license key provides access to updates and support.

You’re using the Lite version — no license needed. Enjoy! 🙂

As a valued Lite user you get 50% off Pro, applied automatically at checkout.

Spec

Trigger: free version installed, no key ever entered. Actions: upgrade to Pro (Lite-loyalty discount auto-applied), or ignore forever.

Copy from Twitter Lite: “You are using the Lite version of the plugin–no license needed. Enjoy! 🙂”. Social Wall ships Pro-only — never shows this state. TikTok is one codebase whose tier falls back to free, so its Lite state is this same card.

02Pro key not activated Pro installed, key field empty

License Key

Your license key provides access to updates and support.

Already purchased? Simply enter your license key below to activate Pro.

Your key is in your purchase confirmation email, or under Account → Licenses on smashballoon.com.

Spec

Trigger: Pro installed (or a Lite user just purchased), field empty. Actions: paste a key and Activate; “Where’s my key?” link to the account.

Placeholder “Paste license key here” and lead copy are existing Twitter Lite strings. On Lite installs a verified key also installs Pro — the button becomes Install Pro.

03Activating Activate request in flight — resolves to 04, 05 or 08

License Key

Your license key provides access to updates and support.

Verifying your key with smashballoon.com…

Spec

Trigger: the AJAX activate call is in flight. Actions: wait — field and button lock to prevent double submits.

Activation is an AJAX round-trip everywhere (e.g. TikTok’s wp_ajax_sbtt_activate_license → relay auth/license). No plugin shows this in-flight state today — this standardizes one.

04Active API returned valid, site registered

License Key

Your license key provides access to updates and support.

Active

Instagram Feeds Pro — Personal · Renews Mar 12, 2027 · Test connection · Recheck license · Manage license

Spec

Trigger: API returned valid. Actions: Deactivate (frees the site slot), Test connection, Recheck license, Manage on smashballoon.com.

All action labels exist today: Deactivate, Test Connection, Recheck license, Manage License (Twitter licenseBox). Already used on the converged Instagram / YouTube pages.

05Invalid key API: invalid / invalid_item_id / missing

License Key

Your license key provides access to updates and support.

This license key isn’t valid for Instagram Feeds Pro. Check for typos, or copy the key from Account → Licenses.

Spec

Trigger: API answers invalid, invalid_item_id (key belongs to another product), or error missing (no such key). Actions: fix the key and retry — the bad key stays in the field for editing.

On invalid_item_id, name the product the key does belong to (“This key is for Facebook Feeds Pro”) so cross-plugin paste mistakes self-resolve.

06Expired API: expired, 14-day grace over

License Key

Your license key provides access to updates and support.

Expired

Your license expired on Jun 30, 2026. You are no longer receiving updates that protect you against upcoming platform changes, and access to some Pro features is now limited. Why renew?

Spec

Trigger: API answers expired and the grace period (state 07) has ended — updates, support, and some Pro features off. Actions: Renew (checkout pre-filled with edd_license_key), Re-check after renewing, read “Why renew?”.

Renew License, Re-check License and Why renew? are the existing YouTube Pro expired-notice actions. Social Wall today shows a bare red “Expired” label — this replaces that.

07Grace period Expired under 14 days ago — everything still works

License Key

Your license key provides access to updates and support.

Expired — grace period 9 days left

Your license expired on Jun 30, 2026. You are no longer receiving updates that protect you against upcoming platform changes. There’s a 14 day grace period before access to some Pro features will be limited.

Spec

Trigger: key expired fewer than 14 days ago (is_license_grace_period_ended() false). Feeds keep rendering; only the settings page nags. Actions: Renew before features are limited, or Re-check if already renewed.

The 14-day window and copy are the existing YouTube / Twitter Pro grace logic (*_check_license_api_post_grace_period).

08Network error Licensing server unreachable — key unchanged

License Key

Your license key provides access to updates and support.

Spec

Trigger: licensing server unreachable (WP HTTP error, firewall, outage). Stored key and status are not changed — distinct from state 05: the key is never judged. Actions: Retry, View error, Test connection.

Grounded in the existing Connection failed / View error / Test Connection strings (Twitter licenseBox).

09Tier-limited Key valid, plan doesn’t cover the feature or site count

License Key

Your license key provides access to updates and support.

Active Basic tier

Your Basic plan doesn’t include Trustpilot and Yelp sources. Upgrade to the Plus tier to display reviews from them — your key and settings carry over.

Compare tiers
Spec

Trigger: key valid and active, but the plan tier doesn’t cover a feature (e.g. Yelp needs Plus) or this site exceeds the plan’s site count. Nothing breaks. Actions: Upgrade Plan (peach PRO path), Compare tiers, or keep using what the tier covers.

Tiers are real: TikTok maps item names to basic / plus / pro (plus the All Access Bundle); Reviews gates Yelp behind “Upgrade to our ‘Plus’ tier”. Site-count variant inferred — standard EDD no_activations_left, not found verbatim in these codebases.

Rules that hold across all nine

The heading and subheading never change. Success / warning / error always use the feedback tokens — never raw hex (today Social Wall hardcodes color:red / color:green). The key is masked whenever stored, editable whenever being corrected. States 5, 6, 8 never silently discard the stored key. Peach is reserved for the upgrade path (states 1 and 9); it never signals an error.