== Changelog ==

Older versions of Kukuriya, newest first. The most recent versions are listed in the Changelog section of readme.txt.

= 0.12.0 =

* New: a price now has a shelf life. A price older than 24 hours is no longer shown as current, and the card falls back to another store whose price is still fresh. Amazon drops API access whenever a site falls under ten qualifying sales in the trailing 30 days, and until now the last price fetched stayed on the page for good.
* New: products whose link has gone are marked in the product list and can be filtered out of it. A dead button becomes a search link for the same product rather than disappearing, so the card keeps its shape.
* New: a product can be tied to the same item at another store by searching for it, instead of pasting the URL by hand. Amazon, Rakuten and Yahoo! Shopping.
* New: a product can be repointed at a different code at the same store, keeping the same product. Posts that already reference it follow along; nothing has to be edited article by article.
* New: the product list shows how many posts use each product, and a product’s own screen lists those posts with a link to each editor.
* New: a Refresh button on a product fetches its price and every one of its offers again, without waiting for the scheduled run.
* New: product categories. Filter the product list by one, see them beside the product name, and add or remove them from the product’s own screen.
* New: a card’s image can be replaced with one from the media library. Remove it and the store’s own image comes back.
* Changed: the card preview on a product’s screen is now clickable, the same as the front end. Affiliate conversion is deliberately not applied — clicking your own links from your own admin screen is not something the ASPs welcome.

= 0.11.0 =

* Fixed: cards that Pochipp kept inside the block itself, rather than in its product list, were left behind when posts were rewritten — and would have vanished the moment Pochipp was switched off. They are now turned into products as the posts are rewritten. The same product used in several posts becomes one product, and a product you have already imported is reused rather than overwritten.
* Added: a card with no product in it is now left in the post untouched, with a line saying why, instead of being passed over in silence.
* Added: the rewrite step can be told to leave those cards alone (the toggle under Step 3).

= 0.10.0 =

* Added: an inline product link can now be aimed at one store (Amazon, Rakuten, and so on) instead of the product's own. The destination is still worked out when the page is drawn, and falls back to the product's own link if that store cannot be reached.
* Added: add-ons can place their own inline product links through the new `kukuriya_inline_link_content` filter. The destination, the affiliate conversion and the click attributes are handled here, so an add-on only marks the text.
* New: a Comparison tables screen lists every comparison table on the site — the post, the products in it, the layout and the heading — and takes you to the post that holds it.
* New: the dashboard lists every post that carries a card, a comparison table, a custom link or an inline product link, with a count of each. Revisions are not counted.
* New: a product's edit screen shows the posts that use it, so you can see what a change will touch.
* Fixed: the card preview on a product's edit screen now draws custom buttons (an official site, for example) with their own label and colour, as the published card does.
* New: change every inline link to one product at once, under Links. Point them at another product, send them to a different store, or take the links off and leave the words. It rewrites the posts, so it runs as a dry run until you say otherwise, and you can try it on one post first.

= 0.9.0 =

* New: comparison tables are now built from a list of rows you control. Reorder the built-in rows (image, name, price, rating, button), add your own from a custom field or by typing the values, and drop a row you do not need.
* New: mark a cell with ◎ ○ △ ×. The symbol is drawn large and pale; when the cell also has a value, the value sits on top of the symbol. Screen readers hear a word, not the symbol.
* New: write one item per line and the cell becomes a list. Start a line with `+`, `-` or `~` to prefix it with ○, × or △.
* New: put the products down the side instead of across the top, for tables with two or three products and many rows.
* New: a heading above the table, read before the table by screen readers.
* New: each column can have its own button text, button colour and label colour.
* New: a short line of copy can sit above a comparison table, the same way it can above a card.
* Changed: ratings now draw five stars and fill them by the share of the maximum, so 4.5 out of 5 reads at a glance.
* Changed: comparison buttons are larger (about 41px tall) and fill the column, in line with Apple's and Google's touch target guidance. The default store colours are a step brighter while keeping white text readable.
* Changed: the product photo in a comparison table is now a link, like the photo on a card.
* Changed: drag the table sideways with the mouse to scroll it. Shift and the wheel still work, and the hint now says so.
* Changed: adding products to a comparison table no longer closes the picker each time. Products already in the table are marked as added.
* Changed: public hook names are now all `kukuriya_*`. If you used one of the old `bcore_*` or `bcore/*` names, rename it; the old names no longer fire.
* Changed: DTOs can be built from an array with `from_array()`. Positional constructors are internal and may gain arguments.
* Changed: the custom fields REST route is now `/kukuriya/v1/custom-fields`.
* Removed: the short link redirect and its post type, and two post types that were registered but never used.
* Added: click measurement now records to your own site as well, with the store, link type and position of the button. Addresses and user agents are hashed, no cookie is set, and rows are pruned after 90 days. It can be turned off under Measurement.
* New: select some text in the editor and turn it into a product link from the toolbar. The selected words become the search term. Only the product is saved in the post — the destination is worked out each time the page is drawn, so changing where your links point does not mean editing posts.

= 0.8.0 =

* Fixed: the animated frame and button effects (glow, pulse, shine, aurora, and the Shine sweep / Glow pulse button styles) could be selected but had no visible result. Their styles were still packaged with the paid add-on. The styles now ship here, which is what 0.7.0 already described.
* Changed: tabs added by add-ons now render their own screen. Previously an add-on could add a tab, but opening it showed the dashboard.
* Added: daily click totals can now be read per day, per store and per post. Nothing is sent anywhere; add-ons and reports use it locally.
* Changed: affiliate code pasted into a custom link is now filtered through an allow list of tags and attributes when it is printed, in addition to the existing permission check when it is saved. Link and banner code from Moshimo, A8.net, afb, ValueCommerce, Rakuten and Amazon is unaffected, including protocol-relative addresses and 1x1 impression images. Code that relies on a script tag is refused when you save it, with the tag named, rather than being dropped silently at display time. A site that needs such code can extend the allow list with the `kukuriya_link_allowed_html` filter.
* Changed: the visitor's address, user agent and referrer are now sanitized as they are read, rather than only being hashed before storage.
* Changed: the compatibility version is declared in this readme only. It was previously repeated in the plugin header, where a different value could have taken precedence.
* Fixed: a product registered from the block editor, by search or by pasting a URL, had no store buttons on its card. The product was saved but its offer was not, and the buttons are built from the offer. Products imported from Pochipp and products added from the admin screen were not affected.
* Added: the product block now previews the finished card in the editor instead of a grey box. Use the toolbar to swap the product or return to the search form.
* Added: the product picker now opens on the products you have already saved, so a product can be reused in another post without searching for it again. The old search is still there on the second tab.
* Changed: the Simple card template now shows the store buttons, like the other templates. It is the default for the block, and a card with nothing to click on is not much use. Its layout is unchanged otherwise: still no brand or rating.

= 0.7.0 =

* Renamed from the previous working title to **Kukuriya**. The text domain and REST namespace changed accordingly.
* Changed: frame and button animation effects (glow, pulse, shine, aurora) are now part of this plugin and work for everyone. They were previously reserved for the paid add-on.
* Removed: the "Cloud integration" tab and its code. The service it talked to is not in operation, so the plugin no longer ships an endpoint it cannot reach.
* Added: the TypeScript / SCSS sources for the bundled admin and block scripts, plus the build configuration, are now included in the plugin so the compiled files can be reproduced.
* Added: an "External services" section in this readme describing every outbound request, what triggers it, and the terms and privacy policy of each service.

= 0.6.0 =

* New: Links. Register text links, banners and ASP-issued code once, place them in articles with a stable key, and change them later from one screen. Articles only hold the key, so changing a link updates every article at once.
* New: Import links already written in articles (scan, dry run, then rewrite). ASP tracking pixels are kept together with their link.
* New: Convert every link reference back to plain HTML before uninstalling, leaving no trace of the plugin in your content.
* New: Links CSV export and import, for moving links between sites by key.
* New (Pro add-on): end dates with automatic pausing, replacement links, and bulk find-and-replace inside links.
* Changed: translations are no longer bundled. Japanese is delivered through translate.wordpress.org.

= 0.5.0 =

First public release on WordPress.org.

* Price refresh now updates the price shown on product cards (not only the Universal Link offers), limits itself to stores that can actually refresh, waits on the local rate gate instead of failing, and backs off on repeated failures
* Database schema is applied on plugin update as well as on activation
* Rakuten / Yahoo! links that are already affiliate links are no longer wrapped twice; the connection test and the route settings now warn when an affiliate ID is missing
* CSV: `offers` column for Universal Link round-trips, partial updates that keep ratings / extra images, unknown `source_id` is rejected, duplicate rows and unreadable prices are reported, Shift_JIS files are detected before upload
* Pochipp migration: rewrites `wp:pochipp/linkbox` blocks and `[pochipp id]` shortcodes in posts, copies API keys / affiliate IDs, runs in batches, keeps your edits on re-run, carries custom buttons over, ignores trashed posts
* Measurement tab shows whether the Analytics CORE tag is detected on the site
* Accessibility: button text colour is chosen by WCAG contrast, product images get a meaningful alt, ratings are announced to screen readers, outline buttons stay readable in dark mode
* Comparison table shows the "as of" note next to prices and respects the hidden-price setting
* Block editor warns when the referenced product has been deleted; wide / full alignment now works
* Click log is pruned after 90 days (filterable); description generation is rate-limited per user

= 0.5.0-beta.7 =

* Fix: the admin stylesheet is now cache-busted by its own file time, so CSS-only updates (like the form spacing fix) reliably reach the browser without a hard refresh

= 0.5.0-beta.6 =

* Admin UI: consistent form spacing across all tabs so each field's help text clearly belongs to its own control (help hugs the control above, larger gap between controls)

= 0.5.0-beta.5 =

* New "move the on-sale store to the front" option (Pro, off by default): while a sale is showing, that store’s button is placed first to boost clicks. Campaigns get a "target store" field; the automatic Amazon badge targets Amazon

= 0.5.0-beta.4 =

* Sale campaigns can now recur on days of the month (e.g. Rakuten "5 & 0 days", Yahoo! "5 days") — one-click built-in presets included. The sale shows automatically on those days every month with no date entry, and works on cached pages

= 0.5.0-beta.3 =

* New automatic sale badge (Pro): shows a sale badge when a store's API reports a discount off its list price (Amazon, via the reference price it provides). Only the ASP-provided list price is used, shown live with the "as of" timestamp — no price history is stored, so it stays within each store's API terms

= 0.5.0-beta.2 =

* The product editor preview now shows the sale (ribbon / badge / countdown / coupon) as it will appear on the card
* Apply a sale campaign to many products at once from the Products list (select rows, pick a campaign, apply — or remove the sale from the selection)

= 0.5.0-beta.1 =

* New Sale display (Pro): show a sale badge or corner ribbon, a live countdown, and a tap-to-copy coupon on product cards, with a start/end schedule that switches automatically — even on cached pages
* New Sale tab: define reusable sale campaigns (label, schedule, badge, coupon) once and apply them to products from the Products tab; products can also override any field or run a one-off sale
* The automatic strike-through list price and %OFF badge stay free; the sale campaign layer is Pro

= 0.4.0-beta.5 =

* The product editor preview is now sticky and scales to fit while you scroll through the settings, matching the Design tab

* New Products admin tab: browse and search saved products, rename their display name, and manage per-product card overrides (template / price emphasis / review links). Overrides sit between the site-wide design settings and block-level overrides
* Add offers from other stores by pasting a product page URL — the store’s button switches from a search link to a direct product link
* Remove offers per product
* Full per-product design overrides — every design setting (preset, colors, button style, frame & effects, layout) can now be overridden per product, with a live preview using the product's real data
* Per-store link URL overrides and up to 5 custom buttons (label / URL / color) per product, output without affiliate conversion
* Editable offer product-page URLs
* The design form is now a single shared component, so future design options appear in both the Design tab and the product editor automatically

= 0.3.0-beta.7 =

* New "Frame & effects" design settings: give cards a custom frame (width 0-8px, any color) on the Neo / Outline / Glass presets. Bold keeps its signature thick frame
* New frame effects (Pro): Glow (soft breathing light), Pulse (slow blink), Shine (light sweep) and Aurora (rotating gradient frame). All effects pause for visitors who prefer reduced motion
* New button styles: Solid fill / Outlined / Glossy gradient / Raised (3D press) for everyone, plus animated Shine sweep and Glow pulse in Pro. Set site-wide or per block
* One-tap recommended frame recipes in the Design tab
* Review link: an optional "See reviews" link with a speech-bubble icon between the price and the purchase buttons (Amazon via its review page URL, Yahoo! Shopping when the API provides one) — free for everyone
* Click measurement now sends a fixed event name with structured properties (Phase B of the analytics integration); the temporary encoded event names are gone

= 0.2.0-beta.1 =

* All 5 official connectors (Amazon / Rakuten Ichiba / Yahoo! Shopping / Moshimo / manual entry) are now built into the core plugin — no separate connector plugins to install. Each connector can be toggled on or off in the Connectors tab
* New Connectors admin tab: enter and test each ASP's API credentials from an auto-generated settings form
* New monetization routes: choose which connector generates the affiliate link for each source (for example, route Rakuten product links through Moshimo Affiliate)
* Moshimo Affiliate settings now hold a separate set of IDs per merchant (Rakuten Ichiba / Yahoo! Shopping / Amazon), because Moshimo issues different IDs for each partnership — a Rakuten set would not track conversions on Amazon. Paste one ad link per merchant to fill each set, and each source only offers Moshimo as a route once its own set is filled in
* Affiliate URLs are now generated at render time, so changing a route updates existing cards without re-registering products
* Third-party / add-on connectors can still be installed as separate plugins via the `kukuriya_register_connectors` hook

= 0.1.0-beta.1 =

* First beta release
* 5 MVP connectors: Amazon (Creators API) / Rakuten Ichiba / Yahoo! Shopping / Moshimo / manual entry (Generic)
* Block Editor product block + comparison table block
* One-action product registration by URL paste (Rakuten / Amazon / Yahoo product page URLs, plus Amazon SiteStripe short URLs)
* 4 built-in card templates (Simple / Card / Compact / Pochipp compatible)
* Universal Link foundation (`wp_bcore_offers` table)
* WP-Cron automatic price refresh (every 6 hours, with manual trigger)
* Click tracking (anonymized, short URLs, Beacon)
* Automatic product description service (vendor-neutral Messages API)
* Custom fields (text / number / select / boolean / date)
* CSV import / export (custom fields supported, dry-run)
* Pochipp migration (CPT `pochipps` → products + offers)
* Admin dashboard (cron status / click summary / custom field CRUD)
* Cloud integration (Phase 2) skeleton (UI only; backend not yet live)
* Internationalization (all strings translatable via i18n functions)

= 0.1.0-alpha =

* Initial alpha (internal testing)
