[{"data":1,"prerenderedAt":469},["ShallowReactive",2],{"project-47571183":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":45,"post_text":48,"what":49,"said":93,"maker_in_thread":198,"shape":208,"grid":212,"attempts":431,"same_week":432,"maker_shows":34,"maker_hidden":461,"reader_version":462,"card":463},"47571183","korb","CLI to order groceries via reverse-engineered REWE API (Haskell)","title","Show HN: CLI to order groceries via reverse-engineered REWE API (Haskell)","https:\u002F\u002Fgithub.com\u002Fyannick-cw\u002Fkorb","github.com","wazHFsRy",1774853158,2026,205,85,280,4366,7,"notable","consumer_social","grocery shopping cli","cli",[24,25,26,27,28],"rewe api","grocery cli","haskell","mtls","grocery shopping","mixed",0.304,{"positive":32,"neutral":33,"mixed":34,"critical":35},12,16,1,4,33,{"idea":38,"design":41,"execution":43,"privacy":44},{"positive":39,"critical":40},9,2,{"positive":42,"critical":42},0,{"positive":34,"critical":40},{"positive":42,"critical":42},[46,47,47,42,42,42,46,47,47,46,47,47,42,42,46,47,47,34,42,42,42,47,42,42,46,34,34,46,47,46,46,47,42,42,47,42,46,46,46,47],5,3,"I just had the best time learning about the REWE (German supermarket chain) API, how they use mTLS and what the workflows are. Also `mitmproxy2swagger`[1] is a great tool to create OpenAPI spec automatically.\n\nAnd then 2026 feels like the perfect time writing Haskell. The code is handwritten, but whenever I got stuck with the build system or was just not getting the types right, I could fall back to ask AI to unblock me. It was never that smooth before.\n\nFinally the best side projects are the ones you actually use and this one will be used for all my future grocery shopping.\n\n[1]https:\u002F\u002Fgithub",{"problem":50,"audience":59,"pricing":70,"motivation":71,"time_to_build":70,"stack":75,"openness":90,"stage":91,"team_size":92},{"value":51,"source":52,"evidence":53},"Ordering groceries from REWE takes time; the CLI fills baskets via the REWE API","maker",[54,56],{"id":55},"post",{"id":57,"by":11,"text":58},"47599612","I mean, fixing small issues is not a big deal – during my ordering sessions, if something comes up, I actually just let Claude create an issue for it, and then when I have time,…",{"value":60,"source":61,"evidence":62},"REWE customers who want to automate grocery shopping","inferred",[63,67],{"id":64,"by":65,"text":66},"47601381","aweiher","I hope REWE is seeing this and offers an official MCP server. In the end we pay real money there. :D I wrote a skill some time ago to support me with \"agentic groceries\" on my…",{"id":68,"by":11,"text":69},"47599567","I am using it exactly like this. I tell Claude: \"Add all things for this recipe to the basket.\"",null,{"value":72,"source":52,"evidence":73},"Learning about the REWE API and mTLS, and using it for personal grocery shopping",[74],{"id":55},[76,80],{"value":77,"source":52,"evidence":78},"Haskell",[79],{"id":55},{"value":81,"source":52,"evidence":82},"Lean 4 (formal verification of suggestion engine)",[83,86],{"id":84,"by":11,"text":85},"47599532","I want to add something else to this. In the process of writing this, I also played with formal verification and formally verified the suggestion engine, which was a really nice…",{"id":87,"by":88,"text":89},"47602941","vessenes","``` > The suggestion engine (korb suggestion threshold) is re-implemented in Lean 4 with five mathematically proven properties: suggestions have positive frequency, are sorted…","open_source","launched","solo",{"praise":94,"objections":116,"requests":138,"questions":164,"alternatives":179},[95,108],{"value":96,"source":97,"evidence":98},"Useful for personal grocery shopping; agentic groceries idea","commenter",[99,100,104],{"id":64,"by":65,"text":66},{"id":101,"by":102,"text":103},"47599485","ramon156","Serious good use of an AI. Just let them do the grey area (like repeated purchase). I'd even let an algo pick better groceries for me. Cools tuff!",{"id":105,"by":106,"text":107},"47598504","tietjens","Love this! Super cool.",{"value":109,"source":97,"evidence":110},"Impressive Haskell and Lean formal verification",[111,112],{"id":87,"by":88,"text":89},{"id":113,"by":114,"text":115},"47598474","sigr_","Really cool to see things still being built in Haskell! How do you find using it compared to some of the newer languages that have more modern tooling? Did you implement your own…",[117,131],{"value":118,"source":97,"evidence":119},"Reverse-engineered API may break or be locked down",[120,124,128],{"id":121,"by":122,"text":123},"47598602","Bewelge","Cool project, but have mixed feelings about publishing ever easier ways to access this API. They've locked down the API a while ago for a reason. Also there already exists this…",{"id":125,"by":126,"text":127},"47598715","rvz","> Finally the best side projects are the ones you actually use and this one will be used for all my future grocery shopping. Until it breaks in a few weeks.",{"id":129,"by":126,"text":130},"47599973","Well you don't control the API so it will still break.",{"value":132,"source":97,"evidence":133},"Could enable excessive orders like 300 avocados",[134],{"id":135,"by":136,"text":137},"47598898","son3tt","Really cool, but this is also how you end with 300 avocados and 500 L of detergent.",[139,147,157],{"value":140,"source":97,"evidence":141},"Compare basket prices across markets",[142,143],{"id":121,"by":122,"text":123},{"id":144,"by":145,"text":146},"47599723","gigatexal","An aggregator like this that could surface the same good for the cheapest price all inclusive of delivery would be something I would pay for!",{"value":148,"source":97,"evidence":149},"Sort items by unit price",[150,154],{"id":151,"by":152,"text":153},"47598907","duskdozer",">I do have a suggestion for your app though: Have it compare your basket of goods across different markets in your region to show you the cheapest option. I'd settle for just…",{"id":155,"by":11,"text":156},"47604940","there is this \"400g (1 kg = 3,48 €)\" - would be pretty easy to sort results by that I'd guess, good idea!",{"value":158,"source":97,"evidence":159},"Official REWE MCP server",[160,163],{"id":161,"by":65,"text":162},"47601463","Please pitch internally for an official Rewe MCP server. This is the future of doing groceries. Let us login with our credentials and let us do the search\u002Ffilling the cart with…",{"id":64,"by":65,"text":66},[165,172],{"value":166,"source":97,"evidence":167},"How stable is the API in practice",[168],{"id":169,"by":170,"text":171},"47630256","silbercue","been ordering from REWE for years =) always wished the app was less annoying. all my programm skills - for what? lol. probs for reverse engineering the mTLS part, most people…",{"value":173,"source":97,"evidence":174},"Does Austrian BILLA use the same API",[175],{"id":176,"by":177,"text":178},"47597980","wklm","Nice! Do you know if the Austrian billa (REWE's subsidiary) is using the same api?",[180,184,191],{"value":181,"source":97,"evidence":182},"rewerse-engineering existing REWE reverse-engineered project",[183],{"id":121,"by":122,"text":123},{"value":185,"source":97,"evidence":186},"asdabot for Asda UK",[187],{"id":188,"by":189,"text":190},"47598536","splike","That's funny, I've just built the same thing for Asda in the UK https:\u002F\u002Fgithub.com\u002FmarkDunne\u002Fasdabot It can search for items, add them to the basket, picks a delivery slot and…",{"value":192,"source":97,"evidence":193},"heissepreise price comparison for Austrian retailers",[194],{"id":195,"by":196,"text":197},"47603965","dewey","There's this one which got some publicity, doesn't seem to be updated any more but it worked for all these retailers listed and is open source:…",{"comments":199,"answered":35,"key":200},17,[201,204,207],{"id":202,"text":203},"47601465","This is also my exact workflow here. Thank you. I'm adding things that should be in the basket via Siri to my Obsidian notes. I also add recipes to that list or anything else.…",{"id":205,"text":206},"47603393","It is extremely simple. I just tell Claude: \"Use korb to look at my order history and create a table with my most frequently bought items. Next time, fill my basket with the…",{"id":155,"text":156},{"commenters":209,"max_depth":18,"maker_replies":199,"first_comment_mins":210,"lifespan_hours":211},45,2930,120,[213,215,217,221,223,225,227,230,234,237,238,240,242,244,245,248,251,253,257,259,261,264,267,270,272,273,275,278,280,281,285,287,289,291,294,296,299,300,303,307,310,312,314,316,318,320,321,325,327,329,332,334,336,339,343,346,347,348,350,353,355,357,360,362,365,369,372,376,377,380,382,384,386,388,390,393,397,400,402,404,408,409,411,415,419,422,427],[64,42,46,214,65,42],"project\u002Fpositive\u002Fidea",[202,42,42,216,11,34],"project\u002Fneutral\u002Fidea",[218,42,47,219,220,42],"47603139","maker\u002Fneutral\u002Fnone","robonot",[205,42,42,222,11,34],"project\u002Fneutral\u002Fnone",[121,34,47,224,122,42],"project\u002Fmixed\u002Fidea",[151,34,47,226,152,42],"project\u002Fneutral\u002Fdesign",[228,34,42,229,122,42],"47599444","commenter\u002Fneutral\u002Fnone",[231,34,42,232,233,42],"47604248","other\u002Fneutral\u002Fpricing","tstenner",[235,34,42,236,122,42],"47604765","commenter\u002Fneutral\u002Fpricing",[155,34,42,216,11,34],[239,34,42,232,152,42],"47611192",[241,34,42,222,11,34],"47599553",[243,34,42,229,122,42],"47599667",[144,34,46,214,145,42],[246,34,47,216,247,42],"47599835","abdusco",[249,34,42,250,65,42],"47601136","other\u002Fneutral\u002Fnone",[252,34,47,216,122,42],"47601222",[254,34,34,255,256,42],"47604604","project\u002Fcritical\u002Fidea","randomNumber7",[87,40,46,258,88,42],"project\u002Fpositive\u002Fexecution",[260,40,42,219,11,34],"47603067",[262,47,46,214,263,42],"47599968","atollk",[265,47,42,266,11,34],"47600055","project\u002Fpositive\u002Fnone",[268,47,47,222,269,42],"47600195","kleiba",[271,47,42,232,126,42],"47600740",[161,47,47,216,65,42],[274,47,42,250,263,42],"47623981",[276,47,42,277,11,34],"47624396","other\u002Fneutral\u002Fidea",[279,47,42,250,263,42],"47636631",[188,35,42,277,189,42],[282,35,42,283,284,42],"47598904","other\u002Fneutral\u002Fdesign","Latitude7973",[84,46,42,286,11,34],"project\u002Fneutral\u002Fexecution",[101,288,46,214,102,42],6,[290,288,42,216,11,34],"47599590",[292,288,47,216,293,42],"47599932","aprilnya",[295,288,47,216,196,42],"47602568",[297,288,42,298,11,34],"47602711","project\u002Fneutral\u002Fdocs",[135,18,34,255,136,42],[301,18,42,250,302,42],"47598976","stavros",[304,305,47,216,306,42],"47600259",8,"hk1337",[308,39,42,277,309,42],"47599370","rmoriz",[311,39,42,277,122,42],"47599427",[313,39,42,277,309,42],"47599499",[315,39,42,232,122,42],"47599644",[317,39,42,277,196,42],"47602596",[319,39,42,277,122,42],"47603842",[195,39,47,216,196,42],[322,39,42,323,324,42],"47599912","commenter\u002Fneutral\u002Fidea","traceroute66",[326,39,42,323,122,42],"47600988",[328,39,42,323,324,42],"47601616",[330,39,42,331,122,42],"47603782","commenter\u002Fpositive\u002Fnone",[333,39,42,277,309,42],"47629607",[335,39,42,277,11,34],"47599560",[337,39,42,232,338,42],"47601884","PurpleRamen",[340,341,46,266,342,42],"47598042",10,"Dominik1001",[125,344,34,345,126,42],11,"project\u002Fcritical\u002Fexecution",[57,344,42,286,11,34],[129,344,34,345,126,42],[349,344,42,286,11,34],"47623623",[351,32,46,214,352,42],"47598526","danielszlaski",[354,32,42,216,11,34],"47599571",[176,356,47,222,177,42],13,[358,356,42,229,359,42],"47598178","fractallyte",[361,356,42,229,302,42],"47598982",[363,356,42,250,364,42],"47599350","elAhmo",[366,367,46,214,368,42],"47599388",14,"braedonwatkins",[370,367,42,250,371,42],"47606836","bronco21016",[373,374,46,214,375,42],"47598348",15,"kls0e",[113,33,47,219,114,42],[378,33,42,229,379,42],"47598852","yakshaving_jgt",[381,33,42,250,114,42],"47601486",[383,33,42,229,379,42],"47601580",[385,33,42,250,114,42],"47604935",[387,33,42,250,379,42],"47605016",[389,33,42,258,11,34],"47599606",[391,199,47,216,392,42],"47603505","karim79",[394,395,42,250,396,42],"47598551",18,"ramonga",[398,395,42,229,399,42],"47598737","picografix",[401,395,42,214,11,34],"47599598",[169,403,47,286,170,42],19,[405,406,46,214,407,42],"47599151",20,"a012",[68,406,42,214,11,34],[105,410,46,266,106,42],21,[412,413,47,222,414,42],"47611080",22,"grimm8000",[416,417,46,214,418,42],"47602732",23,"kylex-ken",[420,417,42,229,421,42],"47604569","sgbeal",[423,424,47,425,426,42],"47600454",24,"project\u002Fneutral\u002Fprivacy","volume_tech",[428,429,42,250,430,42],"47599953",25,"zephyrwhimsy",[],[433,438,442,447,452,457],{"id":434,"name":435,"points":436,"category":437},"47593422","1-Bit Bonsai",430,"ai",{"id":439,"name":440,"points":441,"category":437},"47536761","nullclaw",340,{"id":443,"name":444,"points":445,"category":446},"47557921","Git bayesect",337,"dev_tools",{"id":448,"name":449,"points":450,"category":451},"47580350","30u30.fyi",256,"other",{"id":453,"name":454,"points":455,"category":456},"47589856","pg_textsearch",203,"data",{"id":458,"name":459,"points":460,"category":456},"47534283","Turbolite",185,false,"v2",{"id":464,"name":5,"line":6,"ai":461,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":465,"top":18,"kw":466,"maker":11,"domain":10,"tier":19,"attempts":42,"strip":467,"url":9,"mix":468,"praise":96,"objection":118,"sub":21},47571183,0.3,[24,25,26,27,28],"5330005335330053310003005115355300305553",[32,33,34,35],1794036697285]