// the find
badlogic/heissepreise
Jo eh.
A grocery price tracker for Austrian supermarkets — Billa, Spar, Hofer, Lidl, and others — that scrapes daily and lets you search, compare, and chart price history. It got enough media attention (radio interviews included) to end up with historical data donated by two external sources. This is a weekend project that became a public utility.
The canonical JSON format is clean and well-documented, making it trivial to pull the raw data for your own analysis. The front end is vanilla HTML/JS with no build-time framework tax, so the whole thing loads fast and is easy to modify. Store scrapers are isolated per-file under stores/, so adding a new chain or fixing a broken scraper doesn't touch anything else. Docker setup covers both dev and prod with separate compose files, which is more than most side projects bother with.
The scraping layer has no resilience to store API changes — when Billa or Spar rotates an endpoint, the fetch silently returns garbage or fails and there's no alerting. It's also geographically useless outside Austria/Germany; the store list is hardcoded and there's no abstraction for adding non-DACH chains. The front-end state management is roll-your-own vanilla JS with a custom model layer that's clever but fragile — site/model/model.js is doing a lot of work with no tests. Last push was February 2026, which is concerning for a scraper that depends on third-party APIs staying stable.