Price intelligence on PC components. Every morning, a Java batch collects the price of about fifteen products from six French and European retailers, discards doubtful readings, then a strategy engine proposes a price and explains it rule by rule. This page reads the project database live.
A personal, educational project: "our price" and the purchase price are fictitious values, updated daily by the engine itself, and the strategies are textbook pricing strategies. The prices shown are those publicly listed on the retailers' websites on the indicated date.
Loading data…
An explicit catalogue. Every tracked product is described by its family and attributes, with its identifiers (GTIN, manufacturer part number) and the matching listing at each retailer. Products in the same segment, for instance the 12 GB RTX 5070 cards, are declared equivalent.
Polite, robust collection. A Java batch runs every morning on GitHub Actions. It honours robots.txt, spaces out its requests and identifies itself with a recognisable User-Agent. The price is read first from the page's structured data (JSON-LD), then from embedded JSON, then from the HTML: three extractors in cascade, to survive website redesigns.
Data you can trust. One reading per listing per day, collection failures stored, and a price that jumps abruptly is quarantined until confirmed the next day. A day without a reading stays a visible gap, never filled in.
A recommended price that explains itself. The engine has no server of its own: it is a module of the same batch, run right after collection on the day's market. It first builds that market: fresh, in-stock, new, non-quarantined offers. A strategy proposes a price (index on the median, alignment, undercut, target margin), then guardrails correct it: margin floor, ceiling, maximum daily move, rounding. Every step is stored and readable in the summary. Seven rule profiles are computed on each run, and the summary selector picks among them. The index next to each price relates it to the market median: 100 is the median; 95 is 5% below. And every morning, a rule drawn at random among the seven becomes "our price" for the day, so that the demo stays alive and our price has a history against the market.
No server to maintain. The batch runs on GitHub Actions, the database and its REST API are hosted by Supabase in the Paris region, and this site is served by GitHub Pages. Results are precomputed and exposed read-only on a dedicated schema of views, with a public key: this page reads them straight from the browser. Nothing is hosted by hand, and everything fits within free tiers. The same code, packaged with Spring, can be deployed as a permanent service the day a professional use calls for it.
The code is a modular monolith in hexagonal architecture: a pure domain, ports, swappable adapters (HTTP, scraping, files, PostgreSQL), and every structural decision recorded in an ADR. Choices, trade-offs and mistakes are written down at the moment they are made.