github mikeknight85/PriceStalker v2.0.0

latest releases: v2.2.0-beta.1, v2.1.0-beta.12, v2.1.0-beta.11...
one month ago

First stable release since v1.4.0 in June. Everything that has been running on the beta channel is now on stable.

Read this before upgrading

Deployments now default to stable instead of beta.

beta tracks every merge to main. Schema migrations run automatically when the backend container starts, block startup until they succeed, and are never reversed — so tracking beta meant an unreviewed migration could run against your database on any container restart. For self-hosted software that risk lands on you, not on a maintainer.

stable moves only on a versioned release like this one.

stable   versioned releases only (new default, recommended)
beta     every merge to main; expect schema changes without notice
v2.0.0   pin an exact version and choose your own upgrade moment

If you want the old behaviour, set PRICESTALKER_TAG=beta.

Take a database backup before upgrading. deploy/swarm-stack.yml has the pg_dump command in a comment at the top.

Upgrade safety

Migrations 010 through 015 are additive or value-only — new nullable columns, and a repair of selector settings that the baseline schema had stored as invalid JSON. Nothing in this release drops or moves data, so rolling the image back would leave you with a slightly newer schema that the older code tolerates.

Highlights

Scraper correctness

  • Generic stock, AI price and AI image selectors were stored as invalid JSON by the baseline schema, so the scraper silently fell back to a smaller built-in list. Stock detection was running on 5 generic selectors instead of 12. Repaired automatically on upgrade.
  • Product images are resolved against the page they came from, so relative and protocol-relative URLs no longer render broken.
  • Custom regex selectors match the denoised page instead of the raw response, so a rule written for the product area stops picking up prices from carousels and footers.
  • Per-retailer "Prefer JSON-LD Images" override.

Data integrity

  • Price history is written inside the same transaction as the product update it belongs to. It previously used a separate connection and could survive a rollback.
  • Dashboard sparklines and the all-time-low price use standard prices only; a member-only price could previously become a product's all-time low.
  • A price change that is only a currency change is now recorded.

Admin

  • "Global Selectors" is now "Extraction Rules", grouped by what each rule does, stating rule priority and stock detection order.
  • Retailers, Users and API Tokens refresh in the background.
  • Administrators can open any tracked product; cross-account access is written to the event log.
  • SSO accounts refuse local password and email changes at the API.
  • "Re-run auto-map" regenerates a retailer's selectors without deleting it first.
  • New DB_LOG_LEVEL, SQL query tracing, and slow-query warnings.

Interface

  • Dates follow your saved locale instead of always rendering US format.
  • The dashboard and product pages refresh in the background.
  • Browsers no longer offer to save API keys as passwords, or to overwrite an administrator's own login when editing another user.

Full detail in CHANGELOG.md.

Don't miss a new PriceStalker release

NewReleases is sending notifications on new releases.