[{"data":1,"prerenderedAt":192},["ShallowReactive",2],{"writing-\u002Fwriting\u002Fthe-tours-matchmaker":3,"writing-surround-\u002Fwriting\u002Fthe-tours-matchmaker":187},{"id":4,"title":5,"body":6,"date":174,"description":175,"draft":176,"extension":177,"image":178,"meta":179,"navigation":180,"path":181,"pillar":182,"readingTime":183,"seo":184,"stem":185,"__hash__":186},"writing\u002Fwriting\u002Fthe-tours-matchmaker.md","The Matchmaker: AI route generation in a closed loop",{"type":7,"value":8,"toc":162},"minimark",[9,13,31,36,39,43,46,49,52,64,68,71,74,77,80,90,94,97,100,110,114,117,120,124,127,138,142],[10,11,12],"p",{},"LLMs are easy to use for inspiration. Accuracy is where it still falls apart. Take a concrete\nrequest: a rider wants a motorcycle tour heading south, roughly three hours long. That is not\nsomething an LLM gets right on its own. Which is why the Matchmaker in The Tours is more than a\nprompt.",[14,15,16,17,16,27],"figure",{},"\n  ",[18,19],"img",{"src":20,"alt":21,"width":22,"height":23,"loading":24,"className":25},"\u002Fimages\u002Fwriting\u002Fthe-tours-matchmaker\u002Fmatchmaker-inputs.png","The Matchmaker input screen: a distance slider at 150 km, a curviness slider set to twisty, a difficulty stepper at 3, and a compass dial with north selected",320,693,"lazy",[26],"img--framed",[28,29,30],"figcaption",{},"What the rider gives the Matchmaker: distance, curviness, difficulty, direction.",[32,33,35],"h2",{"id":34},"the-idea","The idea",[10,37,38],{},"The AI handles inspiration and selection. But all of it runs inside a closed loop that checks\nwhether the result matches the brief, across several iterations if that is what it takes.",[32,40,42],{"id":41},"how-it-runs","How it runs",[10,44,45],{},"Passes and POIs that are interesting to motorcyclists sit in the database. They get pre-filtered\nfirst — they have to fall within a certain radius of the starting point, for instance, or suit the\nbike the rider picked for this tour.",[10,47,48],{},"The AI works from that pre-filtered pool and assembles a tour out of it. It picks any number of\npoints, and it puts them in an order that makes sense, so you are not criss-crossing the same\nregion twice.",[10,50,51],{},"Every point carries coordinates in the database. Those coordinates go to the GraphHopper Directions\nAPI, which computes the full tour from them — including the real time and distance, rather than\nsomething the AI made up.",[14,53,16,54,16,61],{},[18,55],{"src":56,"alt":57,"width":58,"height":59,"loading":24,"className":60},"\u002Fimages\u002Fwriting\u002Fthe-tours-matchmaker\u002Floop-diagram.png","Flow diagram: user brief and pre-filtered pool feed into AI point selection, then GraphHopper measurement, then a check that either returns the tour to the rider or sends feedback back to the AI, with a hard break after three attempts",700,618,[26],[28,62,63],{},"The loop: the AI selects, GraphHopper measures, the check decides.",[32,65,67],{"id":66},"the-check","The check",[10,69,70],{},"Before a tour reaches the rider, it gets checked. Is the rough direction right? And does it land\nwithin a tolerance of 10% on time or distance?",[10,72,73],{},"If it does not, what failed gets recorded. The whole tour goes back to the AI together with that\nfeedback, so it can correct its selection of points.",[10,75,76],{},"The principle underneath: the AI supplies the creativity, a hard measurement validates the result,\nand the AI has to conform to that, not the other way around. That is what keeps hallucinations in\ncheck.",[10,78,79],{},"Depending on the region, generating a tour exactly to the brief can be difficult — a mountainous\narea with more or less a single valley road will produce unsuitable results quickly. So there is a\nhard break for now: after three attempts the loop stops and returns the last tour.",[14,81,16,82,16,87],{},[18,83],{"src":84,"alt":85,"width":22,"height":23,"loading":24,"className":86},"\u002Fimages\u002Fwriting\u002Fthe-tours-matchmaker\u002Fgenerated-tour.png","A generated tour in the app: a loop drawn over the map of the Appenzell hills, titled Appenzeller Hügelland Rundtour, with a 65% match rating and buttons to regenerate or start the tour",[26],[28,88,89],{},"A finished generated tour, including its match rating.",[32,91,93],{"id":92},"why-use-ai-at-all","Why use AI at all",[10,95,96],{},"The main reason: the selection of points comes out better and more interesting with AI than it does\npurely algorithmically. The order of the points makes more sense, and what you get is a noticeably\nmore interesting tour that flows.",[10,98,99],{},"The AI does make generation measurably slower, though. A tour can take up to 30 seconds, depending\non how many iterations it needs to satisfy the brief. I cover that in the frontend with a nice\nanimation.",[14,101,16,102,16,107],{},[18,103],{"src":104,"alt":105,"width":22,"height":106,"loading":24},"\u002Fimages\u002Fwriting\u002Fthe-tours-matchmaker\u002Floading-animation.png","The generation screen: the app logo above the line Deine Tour wird generiert, with a checklist stepping through traffic, bike capabilities, weather and preferences",696,[28,108,109],{},"Something is always happening, so the wait feels shorter than it is.",[32,111,113],{"id":112},"two-weak-points","Two weak points",[10,115,116],{},"First, the Matchmaker depends heavily on the passes and POIs in the database. The data is okay, but\nit is not extensive. For it to work well anywhere in the world, it has to become less dependent on\nthat data.",[10,118,119],{},"Second, the tours get a little restless when the loop has to iterate several times. Instead of a\nclean round trip you end up riding the given points in a jagged line. There is definitely room to\nimprove that.",[32,121,123],{"id":122},"what-comes-next","What comes next",[10,125,126],{},"Next up is being able to adjust a generated tour through an interface — either with predefined\noptions or in free text. That will make the tours better again for the person actually riding them.",[14,128,16,129,16,135],{},[18,130],{"src":131,"alt":132,"width":22,"height":133,"loading":24,"className":134},"\u002Fimages\u002Fwriting\u002Fthe-tours-matchmaker\u002Ftour-feedback.png","The Tour anpassen sheet: chips like too short, too long, too twisty and too much motorway, a free-text field for keywords, a bike picker, and a regenerate button",1081,[26],[28,136,137],{},"New ways to give feedback on a generated tour.",[32,139,141],{"id":140},"tools","Tools",[143,144,145,155],"ul",{},[146,147,148],"li",{},[149,150,154],"a",{"href":151,"rel":152},"https:\u002F\u002Fwww.graphhopper.com\u002Fproducts\u002Fdirections-api\u002F",[153],"nofollow","GraphHopper Directions API",[146,156,157],{},[149,158,161],{"href":159,"rel":160},"https:\u002F\u002Fthetours.ch",[153],"The Tours",{"title":163,"searchDepth":164,"depth":164,"links":165},"",3,[166,168,169,170,171,172,173],{"id":34,"depth":167,"text":35},2,{"id":41,"depth":167,"text":42},{"id":66,"depth":167,"text":67},{"id":92,"depth":167,"text":93},{"id":112,"depth":167,"text":113},{"id":122,"depth":167,"text":123},{"id":140,"depth":167,"text":141},"2026-07-08","An LLM cannot tell you how long a motorcycle tour actually takes. So the Matchmaker lets the AI pick the points and a hard measurement decide whether the result is allowed through.",false,"md",null,{},true,"\u002Fwriting\u002Fthe-tours-matchmaker","BUILDING WITH AI",4,{"title":5,"description":175},"writing\u002Fthe-tours-matchmaker","52fnAJHGH_OJnTxt4FA6StffGZGwGlpzciUILaTDP_g",[188,178],{"title":189,"path":190,"stem":191,"children":-1},"Jev: first steps","\u002Fwriting\u002Fjev-first-steps","writing\u002Fjev-first-steps",1792666226078]