NeoGrow: Loyalty Points, Rewards Program & Photo Reviews for WooCommerce
Full changelog

readme.txt carries the most recent releases only. WordPress.org displays at
most 5,000 words of a changelog section and silently truncates the rest, so
the complete history lives here. Newest first.

= 1.2.12 =
* New: A new screen, Marketing > NeoGrow > On your store, lists every change NeoGrow makes to your storefront — where each one appears, whether it is live right now, and where to change it. It exists because most of what this plugin does is invisible on a new store: four of the seven things it adds only appear once a customer has points, so an empty shop can look as though nothing happened.
* New: You can browse your own store as a customer sees it. Three settings — a sample balance, your real balance, or a customer with no points at all — so you can see the redemption panel and the My Account card without placing an order or giving yourself points. Nothing is written to your points history, no customer can ever see it, points cannot actually be applied to an order while it is on, and it switches itself off after thirty minutes.
* New: The dashboard of a store that has not traded yet now explains what is already running instead of showing seven figures all reading zero.
* Changed: The setup wizard now finishes on the new screen rather than the dashboard, and the notice on the Plugins screen says what has already happened rather than only asking you to configure something.
* Changed: The Guide tab's Quick Start no longer lists where each feature appears. That was describing the same things as the new screen, only without your store's own figures, so it now points there instead — and keeps the two details the new screen does not carry: points for an order arrive when it is marked Completed, and points for a review are credited when you approve it. The "why is the redemption form not visible" answer now tells you to use the preview rather than leaving you to wait for a customer to earn points.
* New: NeoGrow now appears in WooCommerce's own task list, which is where WooCommerce asks extensions to put this rather than redirecting you on activation.
* New: The same screen reports what might stop a change from showing on your particular store — a page cache, a currency switcher whose rate cannot be read, a block theme taking a different render path, or another active plugin that also awards points and therefore keeps a second balance.
* Developer: New filters `neogrow_store_changes` and `neogrow_competing_points_plugins`. Extension API 1.7.

= 1.2.11 =
* Fix: The points log now finds a customer by the name it shows you. The Customer column reads "Marcus Webb (marcus@example.test)", but searching for Marcus found nothing - the search read the login and the email address, never the name on screen. It now reads all three.
* Changed: This changelog now carries the four most recent releases, and the full history back to 1.0.0 has moved to changelog.txt, which ships with the plugin. WordPress.org displays at most 5,000 words of a changelog and ours had grown past it, so the oldest release was being cut off the listing.

= 1.2.10 =
* Fix: Searching the points log no longer reads your whole customer table twice for one page of results. On a large store the search could take seconds and got slower as the log grew; it now finds the customers first and reads only their entries, and a search matching nobody stops without touching the log at all.
* New: The dashboard leads with the two things waiting for you — how many orders need action (processing or on hold) and how many reviews are waiting for approval. The whole card is clickable, taking you straight to the screen where you deal with them. Both are read fresh every time the dashboard loads, not from the hourly cache the other figures use, so the number is never a stale to-do list.
* New: WooCommerce's Product Reviews screen now shows the photo a customer attached, beside their review, so you can approve a photo review without opening it. Clicking the thumbnail opens the full picture.
* Developer: The `neogrow_expiry_months` docblock said points expire after months of "inactivity". They expire six months after they were earned — ordering again does not extend points already on the clock. The wording is corrected; the behaviour is unchanged and always was this.

= 1.2.9 =
* Fix: The "Earn X points with this item!" message on the product page, and the "How to Earn" line in My Account, now quote the rate your store will actually pay at checkout. Both read the stored rate directly and skipped the step that prices the order, so a store paying one customer more advertised the lower figure to them and then paid the higher one — quietly paying out more than it promised.
* Fix: Every per-customer points figure is now worked out for the customer it is about, rather than for whoever's request happens to be rendering it. On a stock store these are the same person and nothing changes; on a store running an add-on that varies rates — a membership tier, a per-role rate — they were not. An order created by an admin, or placed through the block checkout, could take points at a stranger's rate, and the "worth $1.15" line under a balance could be priced at the logged-out rate on a cached page.
* Fix: The redemption limit could be worked out from two different rates inside one calculation — the customer's own, to decide whether they could redeem at all, and whoever was logged in, to decide how much the cart could absorb.
* Developer: New filter `neogrow_customer_tier`, a membership-tier carrier this plugin ships empty and never fills, so an export or a connector can read a customer's tier without knowing which add-on supplies it. Read it with `API\Points::get_tier()`, which guarantees the shape.
* Developer: New filter `neogrow_earn_rate_is_personal`. An add-on whose earn rate varies per customer turns it on, and the product-page message switches to the treatment balances have used since 1.2.1 — the page renders the store's own figure, and the customer's own arrives from `neogrow/v1/balance`, so a cached page cannot show one shopper another's rate. Default off, and with it off the product page is byte-for-byte what it was.
* Developer: `neogrow_review_points_quote` now receives the customer being quoted to. The added argument is additive — callbacks written for one argument are unaffected. `Redemption::points_to_amount()`, `amount_to_points()` and their `API\Points` equivalents take an optional user, and `neogrow/v1/balance` gains `earn_rate`, `review_quote` and `tier`. Extension API 1.6.

= 1.2.8 =
* Fix: WooCommerce's refund email no longer tells the customer "You earned 40 points on this order" and invites them to review what they have just sent back. Refund, partial-refund, cancellation and failed-order emails now carry no points line and no review invitation.
* Fix: The unsubscribe link in the plain-text review reminder works again. It arrived with `&#038;` in place of `&`, which dropped the token that identifies the customer, so clicking it did not unsubscribe them. The product links in the same email are fixed too.
* New: The review form now says what a review earns, and when — "Add a photo to earn 50 points instead of 10 points. Points are added once your review is approved." It is shown to signed-in customers only, since a guest's review earns nothing, and says nothing on a store that pays nothing for reviews.
* Fix: The Upload Photo button can now be reached and opened from the keyboard, with a visible focus ring. It used to take two presses of Tab, and the first stop did nothing on Enter.
* Developer: New filter `neogrow_review_earnings_note` for the review form's earnings line. Extension API 1.5.

= 1.2.7 =
* Changed: Activating NeoGrow no longer takes over your screen with the setup wizard. WooCommerce asks extensions not to redirect on activation, so a short notice on the Plugins screen now offers the wizard instead, and a "Set up" link sits beside NeoGrow on the Plugins screen until you have run it, skipped it or dismissed the notice. Stores updating from an earlier version are not asked again.
* New: Finishing the setup wizard now ends on a summary of what you set up, in money — "a $50 order earns 50 points, worth $0.50 off a later order" — with links to see it on a product page, turn on review reminders and change the design. The wizard shows which step you are on, has Back buttons, and can be run again any time from the Guide tab.
* New: Customers can now see what their points are worth before they spend them. The My Account balance reads "115 points, worth $1.15", and the redemption panel in the cart and checkout — classic and block — says "You have 115 points available, worth $1.15" with the rate beneath it ("100 points = $1.00"). Until now the value only appeared after points had been applied, so "Earn 55 points" turned out at checkout to be 55 cents. The value is shown in the currency the customer is browsing in.
* Fix: A review photo the store cannot accept no longer disappears without a word. The photo button now only offers the types the store accepts (JPG, PNG and WebP by default), and a file of the wrong type or over the size limit is refused as soon as it is chosen, with the reason, before the review is sent. A chosen photo shows its file name and a Remove button. If the server still cannot attach a photo, the customer is told on the page they return to that their review was kept without it — until now it vanished silently and the review was paid the text-review points.
* Fix: The "your order is complete" email told customers "You will earn 110 points once this order is complete" — in the very email saying it was. It now confirms the points they earned with their new balance, and carries the invitation to review what they bought, as it was always meant to.
* Fix: Saving NeoGrow's Settings or Design tab now shows "Settings saved." Until now the page reloaded looking exactly the same, with no sign the save had worked.
* Fix: On a phone, the Points History in My Account showed each value with no column name — ": 13 September 2026", ": -5". Each value is now labelled Date, Event and Points.
* New: Customers can now mark a review helpful. Each review shows how many people found it useful — "8 people found this helpful" — above a Helpful button, and clicking it again takes the vote back, so nobody is left wondering whether the first click registered. Voting needs an account: a signed-out visitor sees the same button, which takes them to sign in and returns them to the review they were reading. That is deliberate rather than a limitation. Identifying voters by cookie or IP address only stops casual repeat voting, blocks genuine customers who share an office or household connection, and would mean storing an IP for every visitor who clicks. Requiring sign-in means NeoGrow stores no IP address at all for this. You cannot vote on your own review, and the button never appears under a shop owner's reply.
* New: Customers can report a review to you. A Report link beside the Helpful button opens a small window asking why — spam or advertising, offensive or abusive, contains personal information, or not about this product — and you are emailed when a review is reported. Reporting does **not** hide the review, and no number of reports ever will: nothing is hidden automatically at any threshold. That is a deliberate refusal, not a missing feature. Automatically hiding reviews people complain about is review suppression, it is prohibited under the FTC's 2024 rule on consumer reviews, and it would let anyone bury an honest one-star review simply by reporting it. A report asks a person to look; you decide. The window says so in plain words, and so does the email. There is also no "inaccurate" or "I disagree" among the reasons, because those turn a moderation tool into a request to delete criticism.
* New: A Reported column on WooCommerce's Product Reviews screen, showing how many open reports each review has. Sort by it to bring anything needing attention to the top, follow "View review" to read it on your storefront in a new tab, then "Dismiss" once you have dealt with it — which clears the count without touching the review itself. Dismissed reports are kept as a record that something was questioned and handled. Hiding a review stays a separate, deliberate action using WooCommerce's own Unapprove, Spam and Trash controls, after reading it.
* New: One report per person per review, and at most ten reports per person per day, so a review cannot be buried under repeat complaints from one account. You are emailed once per review per day rather than once per report: a hundred people reporting the same review sends one email, while a hundred different reviews send a hundred, because that really is a hundred reviews to read.
* New: Helpful votes and review reports are included in WordPress's personal data export and erasure tools. An export tells a customer which reviews they voted on or reported and when — never who wrote them, because that is somebody else's information. Erasing a customer removes their votes and reports and corrects every count they had contributed to.
* Note for developers: the review actions bar is extensible through the new `neogrow_review_actions` filter, and the helpful tally is public API as `ReviewVotes::META_COUNT`. The extension API is now 1.4.

= 1.2.6 =
* Fix: On the Astra theme, the "Earn X points with this item!" message appeared below the Add to cart button and the product details, instead of beside the price. Astra builds the product summary its own way, so NeoGrow now also uses Astra's own position straight after the price. Every other theme is unchanged: the message was already right after the price there.
* Changed: The review reminder setting now links straight to the reminder email's own screen in WooCommerce, where you edit its subject, heading and wording, instead of only naming the menu path.
* New: NeoGrow now knows how large a photo your server will actually accept, and says so. Settings shows the limit in force under Marketing > NeoGrow > Settings, with an (i) explaining that the ceiling comes from your server's PHP configuration rather than from WordPress or NeoGrow, so you know who to ask to raise it. If NeoGrow was set to allow more than the server does, the screen now says so plainly instead of letting uploads fail silently. A new "Show this limit on the review form" option, on by default, tells customers the maximum before they choose a file.
* Performance: NeoGrow's styles now load only on the pages that use them. There was one 7.4 KB stylesheet on every page of your site; there are now two small ones. The product-page styles (review photos, the photo upload, the "Earn X points" message) load on product pages, and the loyalty styles (the points card, the redemption form, My Account) load on the cart, checkout and My Account. Your home page, shop and blog no longer load any NeoGrow CSS at all. Both are minified, to 2.2 KB and 2.6 KB.
* Performance: NeoGrow's front-end scripts are minified too, 11.2 KB down to 5.0 KB across the five of them. They already loaded only where needed. For both styles and scripts, set SCRIPT_DEBUG to true and the readable versions are served instead, so debugging is unaffected.
* Note for developers: the `neogrow-frontend` stylesheet handle is replaced by `neogrow-reviews` and `neogrow-loyalty`, with the Design colours on `neogrow-design`. `neogrow-frontend` is still registered as an alias of both, so a stylesheet that depends on it keeps working, but dequeueing it no longer removes anything — dequeue the two new handles instead. NeoGrow markup rendered outside the pages above, such as the redemption shortcode in a sidebar, loads its own stylesheet.
* Performance: Posting a review with a photo no longer makes the customer wait while WordPress builds every thumbnail size for it. The review is saved and the points are awarded straight away, and the thumbnails are generated in the background moments later. A photo taken on a phone can take several seconds to process, and until now the customer sat on a loading page for all of it. Note that for the short period before the background job finishes, the photo is displayed at its original size, so it may take a moment longer to load on the product page. Nothing about which points are awarded has changed.

= 1.2.5 =
* Fix: On a phone or a narrow window the NeoGrow admin tabs were cut off with no way to reach them — the strip had no scrollbar, so Settings, Design and Guide were simply unreachable. The tabs now scroll sideways, and the tab you are on is brought into view when the page loads, so it is never stranded off-screen. Tabs and content padding are also tighter below 782px.
* New: Nothing on the storefront said that reviews can earn points — a disclosure gap regulators in several markets care about, and one the merchant carries. A short statement now appears directly above the review form on product pages: "Customers can earn points for leaving a review on this store." The wording is editable under Marketing > NeoGrow > Settings, where a "Show Review Disclosure" toggle (on by default) can switch it off entirely, and the statement only shows while review points are actually switched on — set both review point options to zero and it disappears, because it would no longer be true. It renders on classic and block themes alike.

= 1.2.4 =
* Fix: Review titles and photos now appear on block themes using the product reviews block. Until now they only rendered through the classic reviews template, so a shopper on a block-based product page could upload a photo, earn the higher photo-review points, and never see the photo on the page — it was stored and paid for but invisible. Photo capture and points were always unaffected; this fixes the display. Add-on media (extra photos, video from NeoGrow Pro) renders on the block path too, with no Pro update needed.
* Performance: The Loyalty Points column on the Users screen now reads all balances for the page in one query instead of one query per user.
* Developer: Orders now record the earn rate that was actually applied (after the neogrow_earn_rate filter) in the _ng_earn_rate_applied order meta, so a rate multiplier's contribution stays auditable later. Also documented how neogrow_earn_rate composes with neogrow_earn_points_for_order — if your code computes points itself on that filter, multiply by the $rate it receives or you will drop any rate multiplier. Extension API stays at 1.3.

= 1.2.3 =
* Fix: The points log screen no longer reads your whole points history to draw one page of it. It was sorting every entry you had ever earned or spent on every page load, and the dashboard chart was reading the whole table too. Both now use an index. On a store with 200,000 log entries the points log went from around 740ms to under a millisecond, and the chart from 800ms to 200ms; on a small store you will not notice a difference, which is why this ships now rather than later.
* Fix: Reactivating the plugin after its files were updated while it was switched off now applies any pending database changes, rather than recording the new version and skipping them.
* Note: This release adds a database index, so the first page load after updating takes slightly longer while it is created — a moment on a typical store, a few seconds on a very large one. It happens once.

= 1.2.2 =
* Changed: "Reviews Rewarded" on the dashboard now counts approved product reviews rather than reward entries in the points log. The two disagreed: a review left by a guest, or approved while the review reward was set to zero, is live on your site earning you trust without ever having created a log entry. Your number may go up slightly, and it now matches what NeoGrow Pro reports.
* Developer: Extension API raised to 1.3. Adds ReviewEarn::points_for_review(), ReviewEarn::best_review_points(), Points::get_review_points_quote() and the neogrow_review_points_quote and neogrow_reminder_review_url filters. Reminders gain `neogrow_reminder_sent`, `neogrow_should_send_reminder` and `neogrow_reminder_email_intro`, and a context array threaded from the send call to both templates — enough for an add-on to build a follow-up sequence, targeting rules and its own copy on top. Admin tabs also accept an `order` (lower is further left; Guide & Help is pinned last) and a `callback` that renders the tab body, so an add-on can take over an existing tab instead of adding another beside it. Tabs registered without a callback still render on `neogrow_settings_tab_{slug}` exactly as before.
* Fix: The dashboard chart skipped a month. On the 29th, 30th or 31st it drew two copies of one month and left another out entirely, and the bars after the gap belonged to the wrong months. It now always shows six consecutive months, and the oldest bar counts from the first of its month rather than from partway through it.
* New: A column on the Orders screen showing when the review reminder went out, so you can answer "did my customer get this?" without opening the order.
* New: A "Send now" button in that column, for inviting one customer by hand without waiting for the schedule — and "Send again" if they say they never received it. It appears only on completed orders, never on processing or on-hold ones, and sending updates the date shown in the column. A customer who has opted out is never shown the button and cannot be sent one.
* New: Review reminder emails. NeoGrow can now email a customer a while after their order asking them to review what they bought, and the email says how many points a review is worth. Off by default — turn it on under Marketing > NeoGrow > Settings. Customers who have already reviewed everything on their order are never emailed, and every message carries a one-click opt-out.
* New: The reminder works on every supported WooCommerce version. WooCommerce 10.8 added a review request of its own; where that is switched on and actually sending, NeoGrow steps aside and simply adds the points line to WooCommerce's email rather than sending a second one. On older WooCommerce, or where that feature is off, NeoGrow sends its own.
* Fix: The points figure quoted for a review is now the larger of the text and photo rewards everywhere it appears. One place quoted the text reward only, which understated a photo review by five to one on default settings.
* Changed: Reminders are now found by a daily check rather than a job queued per order, so changing "Send after (days)" applies to orders already waiting instead of only to future ones. Switching reminders on never reaches back over orders completed before you enabled it.
* Changed: The daily reminder check now queues each email as its own background job instead of sending the whole batch itself. On a store with a slow mail server the old approach could run out of time part-way through, and because the progress marker was only saved at the end, the next day's check would start from the same place and never catch up. Each email is now independently retried, and no customer is emailed twice.
* Fix: The Orders screen no longer runs an extra database query for every row. On a page of orders from twenty different customers that was twenty queries; it is now one.
* Fix: Deactivating the plugin now clears every job it has queued. Previously the expiry batch job could be left behind in the scheduler.
* Fix: Deactivating NeoGrow no longer cancels background jobs belonging to NeoGrow Pro. Both plugins share one job queue, and NeoGrow was clearing the whole of it — which could stop a review-invitation campaign or a review import that was still running.

= 1.2.1 =
* Fix: On a variable product the "Earn X points with this item!" message showed the range for the whole product and never changed, so a product priced $20 to $200 still read "Earn 20 - 200 points" after the $200 option had been chosen. The message now updates to the points that option actually earns, and returns to the range when the selection is cleared. This works with any variation swatch plugin, because it follows WooCommerce's own variation form rather than integrating with a particular one.
* New: The order confirmation page now tells the customer about their points — "You will earn 40 points once this order is complete" before you mark the order complete, and "You earned 40 points on this order" afterwards. Previously the product page promised points and nothing ever confirmed them.
* New: The order emails WooCommerce already sends now carry the same line, so a customer whose order you complete days later is actually told when their points arrive, along with their new balance. The completed-order email also invites them to review what they bought, quoting what a review is worth. This adds a paragraph to your existing emails — NeoGrow does not send any email of its own.
* Both are shown only to logged-in customers, never on guest orders (which cannot earn), never on orders that are cancelled, failed or refunded, and never in the copies sent to you as the shop admin.
* Fix: A customer's points balance is no longer written into the page. If you use a page caching plugin and it was set to cache pages for logged-in visitors, a cached page carrying the `[neogrow_points_balance]` or `[neogrow_points]` shortcode could show one customer another customer's balance. The number is now fetched for each shopper after the page loads, so the cached page contains nobody's balance. Nothing to configure. Your My Account page was never affected, because WooCommerce already tells caches not to store it.
* New: A Site Health check under Tools > Site Health reports whether your points balances are safe from your page cache, and names the caching plugin it found.

= 1.2.0 =
* Fix: Points are now calculated on the order **subtotal**, as the documentation has always stated. Earlier versions used the order total, so tax, shipping and fees earned points too. On a store charging tax or postage this reduces what new orders award — a $50 order with $10 postage now earns 50 points rather than 60. Points already awarded are not changed. Use the `neogrow_earn_base_amount` filter to award on the order total instead, if that is what you want.
* Fix: Correct point earning and redemption on multi-currency stores. Points were previously calculated on the order total in the customer's selected currency while the earn rate is configured in the store's base currency, so a store selling in more than one currency awarded too many or too few points by the exchange rate. Orders are now converted back to the base currency (using the exchange rate recorded on the order where available) before points are calculated. Points already awarded by earlier versions are not changed.
* Fix: The redemption discount is now converted into the customer's selected currency before it is applied to the cart, so the discount shown and charged matches the rest of the cart instead of being a base-currency figure on a converted total.
* Fix: The redemption cap, the product page "Earn X points" message and the My Account earn-rate text now convert between the selected and base currency, so the numbers quoted match the points actually awarded.
* New: If a currency switcher is converting your prices and NeoGrow cannot read the rate it is using, an admin notice now says so, rather than letting points be silently miscalculated. It names the currency, is dismissible, and disappears on its own once the rate can be read.
* New: Native support for three currency switchers, with no configuration needed: the multi-currency built into **WooPayments**, **CURCY (Multi Currency for WooCommerce)** and **FOX – Currency Switcher Professional** (formerly WOOCS). Other switchers can integrate through the new `neogrow_currency_rate` and `neogrow_order_exchange_rate` filters; with no switcher active, behaviour is unchanged.
* Changed: NeoGrow now lives under **Marketing > NeoGrow** (or WooCommerce > NeoGrow when the Marketing menu is disabled), following the WooCommerce navigation guidelines, instead of adding its own top-level menu. All existing links and bookmarks to the page keep working.
* New: The Plugins screen now offers both a Dashboard and a Settings link for NeoGrow.
* Changed: The read-only "Points Expiry (Months)" row has been removed from the settings screen. Point expiry is unchanged — points still expire after 6 months on a FIFO basis; the plugin simply no longer displays a setting that could not be edited. The NeoGrow Pro add-on provides the configurable expiry window.
* Changed: Reworded parts of the plugin description and FAQ.
* Compatibility: Tested up to WordPress 7.1.

= 1.1.0 =
* New: Native support for the WooCommerce Cart and Checkout blocks. The redemption panel now appears automatically in both blocks and updates order totals live through the Store API. The old workaround of pasting a shortcode into a Shortcode block is no longer needed, and the notice asking you to do so has been removed.
* New: In the Cart and Checkout blocks the redemption panel now sits directly above the "Add coupons" row, so points are applied alongside coupons and before shipping, tax and the order total are worked out.
* New: The panel now states the discount your points are worth, for example "You are using 200 points for a $2.00 discount", formatted in your store's currency.
* New: Two filters for add-ons, neogrow_review_media_ids and neogrow_review_media_html, allowing the media shown with a review to be extended or replaced.
* New: A documented developer API of hooks and filters, plus the NeoGrow\API\Points class, so add-ons can extend earning, redemption, reviews, expiry and the admin screens. See the plugin's HookDocs reference.
* New: You can rename "points" to anything you like from a single filter.
* Security: Review photo uploads now require a logged-in user and are restricted to product reviews. The temporary upload permission granted during an upload is scoped to the review author instead of being granted site-wide.
* Fix: Points are no longer over-deducted when the redeemed amount exceeds the cart value. The points debited now always match the discount actually granted, and the balance is re-checked at the moment of purchase.
* Fix: Resolved a fatal error on PHP 7.4 caused by a PHP 8.0-only function on the settings screen.
* Fix: Resolved a fatal error when cart totals are calculated without a customer session (Store API, cron and WP-CLI).
* Fix: The points balance cache now uses a dedicated cache group, preventing collisions with other plugins.
* Fix: Applying no points, or fewer than a required minimum, no longer reports "Applied" on the classic cart and then quietly leaves the discount off. Both are now refused with an explanation, matching how the Cart and Checkout blocks already behaved.
* Fix: Database updates now run on any request rather than only inside wp-admin, so stores administered entirely over WP-CLI or a headless front end are no longer left on an older database version.
* Tweak: The redemption form now shows a message when the requested points cannot be applied, and caps the input at the redeemable amount.
* Tweak: Removed the 500-point seed previously granted to the administrator who activated the plugin. Existing balances are unaffected.
* Tweak: Database tables are now versioned so that future schema changes reach existing installations, and uninstalling now cleans up review photos, review meta and per-site data on multisite.
* Performance: The daily expiry job is now batched instead of loading every customer at once, and the review photo lookup no longer runs one query per review on product pages.

= 1.0.4 =
* Enhancement: Dynamic Admin Colors. settings page now adapts dynamically to match the active WordPress user's selected "Administration Color Scheme".
* UI: Implemented neo-unified-table striped layouts for both the Loyalty & Rewards Settings page and Design Customization page.
* Compatibility: Fully tested and declared compatible with WordPress 7.0.

= 1.0.3 =
* New: Dynamic strategy preview in settings (Real-time ROI calculation).
* Enhancement: Added decimal support for points-per-dollar ratios.
* Stability: Improved input sanitization to prevent calculation errors.

= 1.0.2 =
* Fix: Resolved undefined variable warnings in Frontend Assets.
* New: Added FAQ to documentation.
* Tweak: Optimized asset loading logic.

= 1.0.1 =
* Added 500 bonus points for admin users upon first-time installation.
* Improved WooCommerce Blocks compatibility (Cart and Checkout support).
* Added Official Documentation links in the Guide & Help dashboard.
* Fixed minor UI layout issues in the settings panel.

= 1.0.0 =
* Initial Release.
* Loyalty Points Engine (FIFO Expiry).
* Viral Photo Reviews & Lightbox Display.
* Full HPOS (High-Performance Order Storage) Compatibility.
* Custom Database Table architecture.
* Integrated Setup Wizard.
