Skip to content

Add “Switch to Free version” option and license backup / recovery after key expiry #354

@RealRaven2000

Description

@RealRaven2000

Currently, when a user’s license expires, the only option displayed is to renew. Based on user feedback, we want to introduce a more discoverable, reversible way to switch to the Free version while preserving the renewal-first UX and backup of the license key.

Benefits

  • Preserves renewal-first behavior for users who may want to renew.
  • Makes Free version discoverable after a reasonable grace period.
  • Communicates that switching to Free is reversible.
  • Minimal changes to the existing UI and l10n.

Proposed changes

  1. Grace period for renewal-first UX

    • For 28 days after license expiry, only the renewal path is shown.
    • Yellow expired label remains:
      "The license key you entered is expired. Please press the button below to renew your license."
  2. After 28 days

    • Append a hint string to the expired label:
      "Alternatively, you can try the Free version for now — you can restore your license anytime."
    • Display a [Switch to Free version] button.
    • Confirm action with a dialog explaining license backup:
      "Switch to Free version?\nYour license key will be kept on this computer so you can renew it later at the discounted renewal price."
  3. License backup & recovery

    • Keep the expired license key in prefs when switching to Free version.
    • Display a [Recover license key] button if a backup exists.
  4. L10n entities

These are all strings related to license expiry / recovery. (qf.licenseValidation.expiredalready existed)

  "qf.licenseBackup.confirmation": {
    "message": "{P}Switch to Basic version?{br}Your license key will be kept on this computer so you can renew it later at the discounted {b}renewal price{/b}.{/P}{P}Thank you for having supported quickFilters — licenses make independent software development possible and help keep the project going. Even when expired, you can renew your license or upgrade from a Standard license anytime to use the {a class=features}Pro Features{/a} for a full year.{/P}"
  },
  "qf.licenseBackup.recover": { "message": "Recover license key" },
  "qf.licenseBackup.recoverable": {
    "message": "You can restore your previous license to get cheaper renewal conditions."
  },
  "qf.licenseBackup.restored": {
    "message": "Your key was safely restored. Even though it expired, you can get a fresh key for a discount."
  },
  "qf.licenseBackup.switch": { "message": "Switch to Basic version" },
  "qf.licenseValidation.expired": {
    "message": "The license key you entered is expired. Please press the button below to renew your license."
  },
  "qf.licenseValidation.expired.freeHint": {
    "message": "Alternatively, you can use the Basic version for now — you can still restore your license later."
  },

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions