[{"data":1,"prerenderedAt":277},["ShallowReactive",2],{"project-42935218":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":27,"sentiment":28,"stance_mix":29,"scored_comments":33,"aspects":34,"strip":42,"post_text":45,"what":46,"said":81,"maker_in_thread":179,"shape":191,"grid":195,"attempts":239,"same_week":240,"maker_shows":36,"maker_hidden":269,"reader_version":270,"card":271},"42935218","Haystack Code Reviewer","Perform code reviews on a canvas","title","Show HN: Haystack Code Reviewer – Perform code reviews on a canvas","https:\u002F\u002Fhaystackeditor.com\u002Fcode-reviewer","haystackeditor.com","akshaysg",1738688540,2025,55,22,1184,3837,31,"notable","dev_tools","code review","web_app",[21,24,25,26],"pull request","diff visualization","call graph","curious",0.207,{"positive":30,"neutral":31,"mixed":32,"critical":32},4,6,1,12,{"idea":35,"docs":38,"privacy":39,"execution":40,"design":41},{"positive":36,"critical":37},2,0,{"positive":37,"critical":32},{"positive":32,"critical":37},{"positive":37,"critical":37},{"positive":37,"critical":37},[43,32,37,44,37,44,44,37,37,37,37,44,37,44,37,43,44,37,44,37,43,43],5,3,"Hi HN!\n\nWe’re building Haystack Code Reviewer, a tool that lays out code diffs for a GitHub pull request on an interactive canvas. Instead of scrolling through diffs line-by-line, you can view all changes in a more connected, visual format – similar to viewing a call graph. We hope this will make it easier and less cognitively taxing to understand how different changes across files work together.\n\nFor a quick overview, check out our short demo video: https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=QeOz70x0WPE. If you would like to give it a spin, head over to https:\u002F\u002Fhaystackeditor.dev, click the “Review pull",{"problem":47,"audience":53,"pricing":57,"motivation":58,"time_to_build":57,"stack":62,"openness":78,"stage":79,"team_size":80},{"value":48,"source":49,"evidence":50},"Pull request diffs are hard to review in line-by-line text, especially across multiple files.","maker",[51],{"id":52},"post",{"value":54,"source":49,"evidence":55},"Developers reviewing GitHub pull requests.",[56],{"id":52},null,{"value":59,"source":49,"evidence":60},"Pull requests are difficult to review in a purely textual format.",[61],{"id":52},[63,72],{"value":64,"source":49,"evidence":65},"Ruby support added (language server based)",[66,69],{"id":67,"by":11,"text":68},"43026502","Ruby is now supported on Haystack!",{"id":70,"by":11,"text":71},"43026509","Ruby is now supported on Haystack and it should have a graph connected correctly!",{"value":73,"source":49,"evidence":74},"Kotlin support requested, not yet installed",[75],{"id":76,"by":11,"text":77},"42938031","Language support relies on the same language servers that VS Code uses (i.e. language extensions)! Servers come pre-installed with a variety of extensions, but I believe we do…","unknown","launched","team",{"praise":82,"objections":121,"requests":136,"questions":164,"alternatives":173},[83,102],{"value":84,"source":85,"evidence":86},"Interesting visual approach to understanding how changes connect","commenter",[87,91,95,98],{"id":88,"by":89,"text":90},"42938100","hassleblad23","I have always wanted to do something like this! Great work.",{"id":92,"by":93,"text":94},"42943412","jerryhomelab","What does it do apart from the call graph? If I had jump-to-definition and find-references in the line-by-line code review UI, what extra benefits would I have by using Haystack?",{"id":96,"by":11,"text":97},"42950448","> If I had jump-to-definition and find-references in the line-by-line code review UI I think the main benefit of Haystack is that it allows you to keep a model of how the pull…",{"id":99,"by":100,"text":101},"42937979","etwigg","This looks incredible! How does language support work? (I'm curious about Kotlin in particular)",{"value":103,"source":85,"evidence":104},"Looks great and promising",[105,109,113,117],{"id":106,"by":107,"text":108},"42938798","rwparris2","Looks great! I'll be looking out for gitlab integration",{"id":110,"by":111,"text":112},"42948366","hemc4","This is promising. Does it works on local without any login? I review github pull requests in vscode and this seems extention of that workflow where I can visualise the PR",{"id":114,"by":115,"text":116},"42983159","afatparakeet","Looks really great! I'm definitely interested in self hosting",{"id":118,"by":119,"text":120},"42942446","samactionbase","Nice job guys!",[122,129],{"value":123,"source":85,"evidence":124},"Demo video makes review look superficial",[125],{"id":126,"by":127,"text":128},"42939516","groby_b","This looks interesting - looking forward to see where it heads! An entirely nitpicky nitpick: The demo GIF rubs me the wrong way. I know, you want to show of all the features…",{"value":130,"source":85,"evidence":131},"Unclear what the groups and arrows mean",[132],{"id":133,"by":134,"text":135},"42940670","Kkoala","Maybe this is not for me, but I don't understand what it does What do those groups and arrows mean?",[137,141,145,156,160],{"value":138,"source":85,"evidence":139},"Self-hosting",[140],{"id":114,"by":115,"text":116},{"value":142,"source":85,"evidence":143},"GitLab integration",[144],{"id":106,"by":107,"text":108},{"value":146,"source":85,"evidence":147},"Ruby support",[148,152],{"id":149,"by":150,"text":151},"42948426","midnightmonster","I think I understand what it does and it looks interesting and appealing. My team would need Ruby support. Not sure if you'll be able to connect the graph properly in Ruby, but…",{"id":153,"by":154,"text":155},"42948885","watercolorblind","We would need ruby support too. Beyond that, if my MR\u002FPR has two (or more) logical commits, will the tool support reviewing each in isolation? Often times, I will do a refactor…",{"value":157,"source":85,"evidence":158},"Review individual commits in isolation",[159],{"id":153,"by":154,"text":155},{"value":161,"source":85,"evidence":162},"Login-free use for public repositories",[163],{"id":110,"by":111,"text":112},[165,169],{"value":166,"source":85,"evidence":167},"How does language support work, e.g. Kotlin",[168],{"id":99,"by":100,"text":101},{"value":170,"source":85,"evidence":171},"What does it offer beyond a call graph with jump-to-definition",[172],{"id":92,"by":93,"text":94},[174],{"value":175,"source":85,"evidence":176},"VS Code jump-to-definition and find-references",[177,178],{"id":92,"by":93,"text":94},{"id":110,"by":111,"text":112},{"comments":180,"answered":31,"key":181},10,[182,185,188],{"id":183,"text":184},"42939630","Good point! Yeah I think I should record myself doing an actual review while balancing showing the complete feature set. Thank you!",{"id":186,"text":187},"42949060","I'll let you know when we have this up!",{"id":189,"text":190},"42949057","You can review each commit in isolation! Also, you can CMD+Click on that new function and it should create a view of that function on the canvas, along with a connector.",{"commenters":192,"max_depth":44,"maker_replies":180,"first_comment_mins":193,"lifespan_hours":194},13,193,302,[196,200,202,204,206,208,210,211,213,215,217,218,219,220,222,225,227,229,230,233,235,237],[197,37,43,198,199,37],"43075944","project\u002Fpositive\u002Fidea","redwyvern",[126,32,32,201,127,37],"project\u002Fcritical\u002Fdocs",[183,32,37,203,11,32],"maker\u002Fneutral\u002Fdocs",[106,36,44,205,107,37],"project\u002Fneutral\u002Fidea",[186,36,37,207,11,32],"maker\u002Fneutral\u002Fnone",[149,44,44,209,150,37],"project\u002Fmixed\u002Fidea",[153,44,44,205,154,37],[189,44,37,212,11,32],"project\u002Fneutral\u002Fexecution",[67,44,37,214,11,32],"maker\u002Fneutral\u002Fexecution",[216,44,37,214,11,32],"42949039",[70,44,37,214,11,32],[92,30,44,205,93,37],[96,30,37,198,11,32],[110,43,44,221,111,37],"project\u002Fneutral\u002Fprivacy",[223,43,37,224,11,32],"42949029","maker\u002Fneutral\u002Fprivacy",[114,31,43,226,115,37],"project\u002Fpositive\u002Fprivacy",[99,228,44,212,100,37],7,[76,228,37,212,11,32],[133,231,44,232,134,37],8,"project\u002Fneutral\u002Fdesign",[234,231,37,232,11,32],"42940876",[88,236,43,198,89,37],9,[118,180,43,238,119,37],"maker\u002Fpositive\u002Fnone",[],[241,246,251,255,259,264],{"id":242,"name":243,"points":244,"category":245},"42918902","videotoflip",513,"consumer_social",{"id":247,"name":248,"points":249,"category":250},"42901007","ESP32 RC Cars",335,"hardware",{"id":252,"name":253,"points":254,"category":20},"42908061","Lume",309,{"id":256,"name":257,"points":258,"category":20},"42889407","Uscope",262,{"id":260,"name":261,"points":262,"category":263},"42877399","Audiocube",253,"creative",{"id":265,"name":266,"points":267,"category":268},"42946918","HN hell",170,"productivity",false,"v2",{"id":272,"name":5,"line":6,"ai":269,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":273,"top":18,"kw":274,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":275,"url":9,"mix":276,"praise":84,"objection":123,"sub":21},42935218,0.21,[21,24,25,26],"5103033000030305303055",[30,31,32,32],1793991112271]