Code Monkey home page Code Monkey logo

checkjebon's Introduction

Checkjebon.nl

Comparing food prices across multiple supermarkets is made a lot simpler using Checkjebon.nl. Simply scan your receipt, or enter your shopping list manually and you can instantly compare how much you would spend at each supermarket on the exact same products. You can query for generic products like milk or be more exact and specify the brand and amount.

The project can freely be used on https://www.checkjebon.nl/

This will bring up the amount due per supermarket for the shopping list.

After setting up your shopping list and selecting your preferred supermarket, simply check off items as you collect them from the store.

You can share your current shopping list with family members or friends at any time, or use the sharing functionality to use the shopping list created on your desktop or tablet to your phone as you go out to get groceries.

Supported supermarkets

Checkjebon.nl is aimed at the Dutch market, and currently aims to provide accurate and recent prices for:

Some supermarkets do not provide prices for their products online or are not yet indexed on a daily basis, and therefor are currently not included in the data set:

  • Boni - No online assortment.
  • Boon's Markt (MCD) - No online assortment.
  • Butlon - Not yet indexed.
  • Crisp - No online assortment without an account.
  • Dagwinkel - Not yet indexed.
  • EkoPlaza - Not yet indexed.
  • Flink - Not yet indexed.
  • GORILLAS - No online assortment without an account.
  • Hanos - No online assortment without an account.
  • Makro - Not yet indexed.
  • Marqt - No online assortment.
  • LIDL - No online assortment.
  • Nettorama - No online assortment.
  • Odin - Not yet indexed.
  • Poiesz - Not yet indexed.
  • Sligro - No online assortment without an account.

Product selection algorithm

For any product added to the shopping list, Checkjebon.nl tries to take a best guess at what you actually meant. Sometimes this may result in not seeing what you expect, simply because other products come up cheaper. In general, first an exact match by name is attempted. If there was no exact match, a fuzzy search will be applied, compiling a list of all products that contain the words from the shopping list item. The fuzzy search finds products based on if they contain all the letters from your shopping list item in the same order as they are given, but not necessarily right next to each other. For example, milk will find skiM mILK as well as whole MILK. When an amount in liter or kilogram is given, all products below the given amount are filtered out unless this returns zero results, in which case the filter is undone. Finally, products are first ordered by the string length of the fuzzy search (so whole MILK=>4 goes before skiM mILK=>6) in an attempt to find the closed possible match, those results are then ordered by price, and finally the top item from that list is returned.

The algorithm works better when supplying exactly what you are looking for. Note that generic names like milk are not well suited for this even though in in day to day live that would be enough to write down since you will make the choice between skim milk or whole milk once you get to the cooling compartment. The same goes for products like butter (salted butter, whipped butter, cream butter, etc).

When no prices are found for a specific product for any of the given supermarkets, a price estimate is used based on the average price for that product among other supermarkets.

Receipt scanning

When scanning receipts, Tesseract.js is used in order to detect text. After that, some processing is done to align the recognized text with true product names. Adjust any errors where necessary.

Privacy

When entering your shopping list, you data never leaves your computer. All processing is done in the browser. This means no one can keep track of your purchases or build an advertisement profile based on your searches. Upon opening Checkjebon.nl, all available prices will be downloaded. You will notice that reloading the page will not empty your shopping list; this is stored in your browser using the localStorage API.

Open data

Product price data is updated frequently and may be reused in other projects. For example, you can get a price alert when a product you don't buy often is discounted, such as cleaning supplies or personal care products, or more expensive products with long expiration dates such as (soft) drinks or bake-off pizzas. Data journalists may use the data to see trends or verify claims from supermarkets.

checkjebon's People

Contributors

sjoerdvanderhoorn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

checkjebon's Issues

Aanbieding plus

Dag ik zie dat een aanbieding niet goed herkend wordt. Bv plus-sperziebonen-500-gram-114032

Ik kan wel helpen een parser hiervoor te maken maar ik zie geen source voor de crawler.

touch werkt niet

Ik kan niks intypen in het veld waar de boodschappenlijst moet komen. Het gaat hier om touch input. Ik heb dit al geprobeerd met zowel Chrome als Brave.

Refreshing the dataset

Hey, I have noticed that the current data does not represent actual prices. Are you planning to refresh the datasets at some point?

supermarkt.json data scrape

Ik zie dat je een .json bestand inlaad die je af en toe update. Hoe scrape je precies de data, als ik vragen mag? Is dat iets wat open source is?

Grocy en barcode scanner

Kun je mij uitleggen hoe ik de data van Nederlandse supermarkten kan koppelen aan Barcode Buddy en Grocy?

Please add sales description data

Hi,

Your open source repo is great, however, it is missing the sales information if products are on bonus which is vital for people to find when it comes to best groceries/ cheapest products.

Could you please add this under each product with "s": and then the sales text
If not there then do not include or do null.

Thanks so much in advance @sjoerdvanderhoorn

[REQ] Boodschappenlijstje uitgesplitst waar je de boodschappenhet goedkoopste kan halen

Ik zou t top vinden als er een optie was om een boodschappenlijstje bij te houden.
Aangeven wat "mijn" supermarketen zijn, bijvoorbeeld; Jumbo & AH

Wanneer ik dan boodschappen zou doen kan ik mijn lijstje "splitten" op goedkoopste optie waarbij ik 2 lijstjes krijg, 1 voor elke opgegeven supermarkt zodat ik op die manier het goedkoopste uit ben.

Picnic, plus en spar zijn leeg

Allereerst, geweldig materiaal! Dit helpt mij om wat leuke dingen bij elkaar te rapen.
Ik was bezig met wat knutselen, toen het mij opviel dat de picnic, plus en spar lijst leeg zijn:

Supermarket: picnic
{'n': 'picnic', 'd': [], 'u': 'https://picnic.app/nl/deeplink/?path=store/products/', 'c': 'Picnic', 'i': 'https://picnic.app/nl/wp-content/uploads/sites/18/2020/11/logo.svg'}

Supermarket: plus
{'n': 'plus', 'd': [], 'u': 'https://www.plus.nl/product/', 'c': 'PLUS', 'i': 'https://www.werkenbijplus.nl/WBP/img/plusMarker.png'}

Supermarket: spar
{'n': 'spar', 'd': [], 'u': 'https://www.spar.nl/', 'c': 'SPAR', 'i': 'https://www.spar.nl/Content/img/favicon/android-icon-192x192.png'}

Verder vroeg ik mij af of er in de json een timestamp gevonden kan worden van de laatste succesvolle refresh?

Ik hoor graag of je er nog uit komt!

Product niet gevonden update niet altijd

Als je de naam van een product wijzigt in je boodschappenlijst (de lijst van een supermarkt, het potloodje) naar iets wat bij een andere supermarkt niet beschikbaar is, wordt dat niet bijgewerkt in de lijst van supermarkten.

Voorbeeld:

  1. Vul in 'bananen' in de boodschappenlijst.
  2. Kies Jumbo, wijzig product in 'g'woon'.
  3. Kies Albert Heijn. Er is geen product met 'g'woon' in de naam bij Albert Heijn, maar de '1 product niet gevonden' tekst ontbreekt in de lijst met supermarkten.

Boodschappenlijstje niet goed herkend

Bij het volgende boodschappenlijstje:

  • 1L Halfvolle verse melk
  • 1L Caramelvla
  • Bloemenhoning
  • Griekse yoghurt 10% vet
  • Bananen
  • Keukenrol
  • Plastic rietjes
  • Brood

(https://www.checkjebon.nl/#1L%20Halfvolle%20verse%20melk%0A1L%20Caramelvla%0ABloemenhoning%0AGriekse%20yoghurt%2010%%20vet%0ABananen%0AKeukenrol%0APlastic%20rietjes%0ABrood)

Maakt hij er het volgende van:

Screenshot_2022-12-24_10-52-49

  • Van de vla heeft hij geloof ik een "melk drank" gemaakt.
  • De halfvolle verse melk heeft hij "langlekker" (houdbaar) van gemaakt (ook nog eens dure campina)
  • Die "aardbei bietjes" kan ik daadwerkelijk niet plaatsen.
  • Prijsindicatie voor plastic rietjes lijkt wat hoog
  • 1 kaiserbroodje voor "brood" is technisch gezien wel correct, maar ik bedoelde meer "een heel volkoren of tijgerbrood oid, wat maar goedkoop is".
  • Ik zie de keukenrol ook niet terug.

Wel grappig maar denk dat dit een bug is :)

Results are good if I can work out what to ask for

Not an issue as such, but a feature request
Due to multiple burnouts in a NL startup I find can no longer learn, or retain Dutch. I rely on Google translate and mentors to live in my adopted country.
The website is awsome for budget living, and translates nicely in Chrome, apart from the popups.
Unfortunately Google Translate only works in one direction i.e. the results. It doesn't translate what I need to buy.
Currently I do this manually but it's exhausting in my current state, and all mental energy is spent on this task. None is left for the actual shopping.

Could a future feature be translation in both directions.

P.S.
Please don't get me wrong I'd love to go back to learning Dutch, as I live in, love and respect the community, but it's no longer a realistic aim for me. I'm not just a 'lazy' foreigner ๐Ÿ˜‰

Filteren op supermarkt

Niet iedereen heeft alle supermarkten in de buurt. Ik zou willen kunnen filteren zodat je bijvoorbeeld alleen resultaten van Dirk, Albert Heijn en Vomar ziet.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.