Skip to content

Releases: christinoleo/semantic-posts

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 21 May 12:12

Cosmetic fix for 0.2.0 / 0.2.1

After a user activated a Pro license, the Freemius admin UI rendered a "Download latest pro version" CTA whose link 404'd. The link tried to fetch a separate premium zip from Freemius's release deployment system — but SemanticPosts is distributed via GitHub Releases, not Freemius Deploy, so nothing was ever uploaded.

Root cause

The SDK init had is_premium: false, signaling "this is the free build, premium is a separate zip." For a single-codebase freemium plugin (Pro features live inline, gated by if checks) the correct flag is is_premium: true — telling the SDK that the code currently running already contains every Pro feature; the free tier is enforced by our own PaywallGate, not by Freemius's split-build mechanism.

Fix

- 'is_premium'      => false,
+ 'is_premium'      => true,
+ 'is_premium_only' => false,  // free users still work

Same pattern that WPForms Lite, MonsterInsights, and most modern WP freemium plugins use.

Impact

  • Paying users: no more misleading "Download latest pro version" link. UI shows "Pro Active" cleanly.
  • Free users: unchanged. Plugin works, paywall banner still appears at 200 posts, Upgrade CTA still visible.
  • No functional change to indexing, the paywall gate, or any data.

Upgrade

Dashboard → Updates → Update now. Safe in-place — no data migration.

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 21 May 12:01

Critical hotfix for 0.2.0

The 0.2.0 release zip was missing the bundled Freemius SDK because bin/build-zip.sh only copied src/ templates/ assets/ languages/ includes/ and silently skipped freemius/. Sites that auto-updated from 0.1.x saw sp_fs() return null at runtime — the paywall banner and Upgrade CTA never rendered, but no fatal error was thrown either (PaywallGate gracefully falls back to "not paying" when the SDK is missing).

Fix

  • Added freemius to the directory list in bin/build-zip.sh.
  • Prunes Freemius dev-only files (gulp tooling, README, .editorconfig, etc.) before zipping so the runtime payload stays small.

Upgrade

Required if you installed 0.2.0. Dashboard → Updates → Update now. The paywall banner will appear on Settings after the update completes.

Verification

Demo deploy confirmed:

  • version: 0.2.1
  • freemius/start.php: ✓
  • sp_fs(): ✓ slug=semantic-posts
  • gate.is_locked(200): yes

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 21 May 11:58

What's new

Free-tier paywall. SemanticPosts now ships with a free tier capped at 200 indexed posts — enough for personal blogs and small businesses to use the plugin indefinitely without paying. Beyond that, a Pro license is required to keep adding new posts to the Similarity Graph.

Pricing

Plan Price Best for
Free $0 Up to 200 posts
Pro Monthly $4.99 / mo Trial or short-term sites
Pro Annual $29.99 / yr Standard — ~50% off vs monthly
Pro Lifetime $89.99 once Long-term sites that prefer no renewals

How the gate behaves

  • Existing widgets keep working regardless of license state. Already-indexed posts are never touched.
  • Cold start halts gracefully when the gate engages; posts simply stay in the unindexed queue.
  • Resumes automatically as soon as Pro is activated — no manual re-trigger needed.
  • Filter override: hosting partners can raise/lower the cap via semantic_posts_free_post_limit.

Settings page UI

A tri-state banner now appears above the form:

  • 🟢 Pro active — indexed count displayed, no warnings
  • 🔵 Free tierX / 200 posts indexed
  • 🔵 Approaching — same display when ≥80% used, with upgrade CTA
  • 🟡 Locked — warning that indexing has paused, prominent Upgrade button

Privacy & WP.org compliance

  • Freemius opt-in modal is off by default (anonymous_mode: true). The plugin works immediately — users can opt in to analytics later from Settings.
  • uninstall.php now invokes the Freemius SDK uninstall hook before clearing plugin data, so no account/option residue is left behind.
  • readme.txt adds the required Freemius disclosure for WP.org plugin review.

Internal changes

  • New SemanticPosts\Paywall\PaywallGate class encapsulates all license-gate logic; the rest of the codebase never touches Freemius types directly.
  • ColdStartProcessor::run_batch checks the gate per-post so the limit kicks in mid-batch as the count crosses 200.
  • Bundled Freemius WordPress SDK at freemius/ (5.6 MB).
  • 6 new PHPUnit tests in PaywallGateTest pin the gate behavior; full suite stays at 290 / 290 green.

Upgrade

Dashboard → Updates → Update now (the auto-updater finds this release via the GitHub Releases API). Safe in-place — no data migration. Sites already above 200 indexed posts continue serving widgets without interruption; only new posts get the gate.

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 21 May 10:00

What's new

Ships a small, opinion-light frontend stylesheet so the related-posts widget looks polished out-of-box without fighting the theme's design.

What it adds

  • assets/css/frontend.css — structural only (grid, hover lift, image sizing, radius), enqueued on the public site
  • Five CSS variables for trivial restyling: --sp-gap, --sp-radius, --sp-shadow, --sp-shadow-hover, --sp-accent
  • New filter semantic_posts_enqueue_styles for complete opt-out

Why

The previous philosophy ("the theme decides") meant the widget looked broken on themes that didn't already style .related-posts. This release fixes that without imposing colors or typography — those still inherit from the theme. Industry standard (Jetpack Related Posts, YARPP, Yoast all ship base styles).

Opt out

add_filter( 'semantic_posts_enqueue_styles', '__return_false' );

Architectural notes

  • AR-14 unaffected — that rule restricts jQuery on the render path, not CSS.
  • NFR-PERF-3 unaffected — that rule was about outbound HTTP per render, not plugin-local assets.
  • ~1 KB gzipped contribution to page weight.

Upgrade

Dashboard → Updates → Update now. Safe in-place; no data migration.

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 20 May 23:29
5723ac7

SemanticPosts release.

sha256: fb52f2d7b25386dd792b89d42e1115b4ec699c40fdc5250f9a8e86e1b805510d
size: 122254 bytes

Built from 5723ac7.

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 20 May 23:24
e9311e6

SemanticPosts release.

sha256: 894da5068e2c6f9a4651d7561830811a28efde4447195769c7576bcbd949ab9f
size: 121910 bytes

Built from e9311e6.

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 20 May 22:52
ad52cf9

SemanticPosts release.

sha256: f3d76b9ccb91b49f674e4256b45a0c18a1565a8ab1327b50ab3537a8c7b7e8e1
size: 121220 bytes

Built from ad52cf9.

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 20 May 22:44

SemanticPosts release.

sha256: 70ffd0f64b6d2cdbdeacb8d0fdb4e78311d466dafe75bb290c3b9ab5af6c5a05
size: 118221 bytes

Built from 54c5290.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 20 May 21:54
48924ba

SemanticPosts release.

sha256: 9eb98456b431c3979031969f3dd6db05848187b7b8b45e4536ab88ec157f2930
size: 117895 bytes

Built from 48924ba.