{"id":203,"date":"2026-03-04T11:27:58","date_gmt":"2026-03-04T10:27:58","guid":{"rendered":"https:\/\/stefanescu.lu\/?p=203"},"modified":"2026-03-04T11:30:35","modified_gmt":"2026-03-04T10:30:35","slug":"well-on-the-wee","status":"publish","type":"post","link":"https:\/\/stefanescu.lu\/?p=203","title":{"rendered":"Well on the Wee!"},"content":{"rendered":"\n<p class=\"has-text-align-left\">Introducing my new,&nbsp;early-morning-before-the-kids-wake-up, AI-assisted project:<strong>&nbsp;<href a=\"www.wee.lu\"><a href=\"http:\/\/www.wee.lu\" target=\"_blank\" rel=\"noopener\" title=\"\">Wee.lu<\/a><\/href><\/strong>&nbsp;(<strong>Wee<\/strong>&nbsp;means &#8220;path&#8221; in Luxembourgish).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee-1024x683.png\" alt=\"The Wee\" class=\"wp-image-207\" srcset=\"https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee-1024x683.png 1024w, https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee-300x200.png 300w, https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee-768x512.png 768w, https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee-450x300.png 450w, https:\/\/stefanescu.lu\/wp-content\/uploads\/2026\/03\/anouncing-wee.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In June 2025, I came across the story of the&nbsp;<strong><a href=\"https:\/\/www.zug.lu\/zebra30\/\">Zebra30<\/a><\/strong>&nbsp;project.&nbsp;<strong><a href=\"https:\/\/www.zug.lu\">ZUG<\/a><\/strong>&nbsp;(Zentrum fir Urban Gerechtegkeet) had crowdsourced information about dangerous crossings in the city \u2014 and when the city refused to share its own analysis on crossing compliance, ZUG took them to court. After nearly four years of legal proceedings, they won, and turned that hard-won data access into a map letting residents see how they&#8217;re affected \u2014 giving them the power to pressure the administration into fixing things. The win mattered on multiple levels: it&#8217;s how many people first heard about ZUG (myself included), and it exposed just how far public data access still has to go. It may also have paved the way for broader access, establishing that:&nbsp;<em>&#8220;A database that describes &#8216;a factual situation at a specific moment in time&#8217; is public&#8221;<\/em>(see&nbsp;<strong><a href=\"https:\/\/zug.lu\/2025\/06\/04\/bureaucracy-vs-reality-we-just-won-our-transparency-case-finally\/\">here<\/a><\/strong>).<\/p>\n\n\n\n<p>Around the same time, I &#8220;attended&#8221; the&nbsp;<a href=\"https:\/\/scicloj.github.io\/scinoj-light-1\/\"><strong>SciNoj #1<\/strong><\/a>&nbsp;virtual conference and was struck by Heather Moore-Farley&#8217;s session on&nbsp;<strong><a href=\"https:\/\/youtu.be\/3HZ5rngHzWM\">&#8220;The Impact of Lane Reductions&#8221;<\/a><\/strong>. She showed how detailed, accurate public data \u2014 specifically, California crash data \u2014 analyzed and visualized with Clojure could help a community drive real change and improve safety. After 23 years of building software professionally, and all the talk about how &#8220;software is eating the world,&#8221; the belief that software could genuinely change things for the better \u2014 the very idea that had drawn me into this field \u2014 had somehow quietly faded. This talk, and the energy of the conference in general, rekindled that original spark.<\/p>\n\n\n\n<p>What I felt the&nbsp;Zebra30&nbsp;map was missing was traffic context: a way to measure the real consequences of current conditions, to show how risky each area truly is. A dangerous crossing in a quiet, remote corner of the city is arguably less urgent than one right next to a known accident hotspot. I wanted to add that layer \u2014 so I started looking for data on the geographical distribution of accidents across Luxembourg.<\/p>\n\n\n\n<p>Luxembourg has an open data policy (mandated by the Law of 14 September 2018), and several administrations do publish data for open access. Yet I couldn&#8217;t find detailed, historically accurate accident location data. There&#8217;s simply no public view of where accidents happen across the Grand Duchy.<\/p>\n\n\n\n<p>And yet&#8230; this data does exist. Accidents are traffic events, and traffic events are reported in real time by multiple sources in Luxembourg:&nbsp;acl.lu,&nbsp;cita.lu,&nbsp;rtl.lu\/mobiliteit\/trafic. What&#8217;s missing is the&nbsp;<em>memory<\/em>&nbsp;of these events \u2014 specifically, when and where they happened. Someone needs to record that; someone just needs to remember. And memory is everything: LLMs, if nothing else, have made abundantly clear over the past few years just how essential full context is to correctly planning the next step.<\/p>\n\n\n\n<p>But transforming live, real-time events into context \u2014 assembling that memory \u2014 used to take money, skill, and serious effort. At least, that used to be the case.<\/p>\n\n\n\n<p>&#8220;The Cloud&#8221; has spent the last decade driving down the cost and technical barrier to running persistent services and storing large amounts of data. Between GitHub Actions (thousands of free minutes) and Google Cloud Storage (tens of GB for a few cents), cost is no longer a barrier. And complexity? You used to need a machine somewhere, Linux skills, the whole deal. Now most of it is a few clicks or a few lines of YAML.<\/p>\n\n\n\n<p>The resources are there. The serverless platforms are ready. The storage is waiting. But you still needed to write the code, test it, and know how to handle every layer of a working solution: back-end, front-end, operations, design, security. Even if you were comfortable with some of it, chances are you dreaded the rest \u2014 or simply weren&#8217;t good at it.<\/p>\n\n\n\n<p>Enter Claude Code, Codex, Cursor, and friends. They don&#8217;t dread any of it \u2014 if anything, they&#8217;re a little&nbsp;<em>too<\/em>&nbsp;eager, sometimes reaching for things they shouldn&#8217;t touch. They&#8217;re not perfect at everything, but if you don&#8217;t rush, don&#8217;t try to do it all in one go, and force them to stay within guardrails \u2014 steering them with your real-world experience of what actually works (and what doesn&#8217;t), which is now the main missing ingredient \u2014 they&#8217;ll help you build all the pieces of a working solution.<\/p>\n\n\n\n<p>The emphasis has shifted slightly: less about raw energy, skill, and curiosity; more about clear vision, experience with the full software development cycle, and a method adapted to these new tools. Not that the first set no longer matters \u2014 it&#8217;s just increasingly offset by what the tools can do. And there&#8217;s a useful side effect of carefully managing context and history for your code assistant: you can always pick up right where you left off, whenever you have a spare hour. That&#8217;s ideal when your project only gets early mornings.<\/p>\n\n\n\n<p><strong>Where things stand (early March 2026):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I&#8217;ve been collecting accident data since July 2025 \u2014 so I&#8217;m finally starting to have enough to spot some trends.<\/li>\n\n\n\n<li>I have a first clean version of the visualization map, with the ZUG data layered in for context.<\/li>\n<\/ul>\n\n\n\n<p><strong>There are still bugs, some that I know:<strong><\/strong><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Translation errors in the interface<\/li>\n\n\n\n<li>Selection issues that vary depending on screen size and zoom level<\/li>\n\n\n\n<li>\u2026 and I&#8217;m sure plenty I don&#8217;t \u2026<\/li>\n<\/ul>\n\n\n\n<p><strong>What&#8217;s next:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Continue updating the data monthly<\/li>\n\n\n\n<li>Experiment with different visualisations (maybe highlighting road segments?)<\/li>\n\n\n\n<li>Improve data consolidation so that nearby markers on the same road don&#8217;t cluster awkwardly<\/li>\n\n\n\n<li>Improve positioning at intersections, to more accurately indicate which road is affected<\/li>\n<\/ul>\n\n\n\n<p><strong>Further evolution (my current ideas &#8211; others are welcomed!):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Could Wee.lu use historic Meteolux weather datasets to show how rainy days compare to dry ones? Or to see if certain roads are more accident-prone under specific conditions \u2014 snow, for instance?<\/li>\n\n\n\n<li>Maybe add some ways to select specific time frames for the visualisations: periods, night\/day selection.<\/li>\n<\/ul>\n\n\n\n<p>Of course, all of this means more early mornings \u2014 so I can&#8217;t really say when any of these ideas will actually make it onto the site.<\/p>\n\n\n\n<p><strong>An early conclusion:<\/strong><\/p>\n\n\n\n<p>It seems that now the present can become actionable memory\u2014community memory, community tools: the dream of Eric S Raymond of the citizen programmer is closer than ever. Will this dream transform our communities and make our lives better, fairer, happier? Or are we going to drown in AI slop? I cast my vote with the first\u2014 while admittedly risking to do the second&#8230;<br><\/p>\n\n\n\n<p>What do you think? Take a look at <a href=\"https:\/\/www.wee.lu\" target=\"_blank\" rel=\"noopener\" title=\"\">Wee.lu<\/a> and let me know in the comments.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducing Wee.lu  <a href=\"https:\/\/stefanescu.lu\/?p=203\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[23,21,20,16],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-agents","category-community","category-engineering","category-process"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=203"}],"version-history":[{"count":16,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":216,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=\/wp\/v2\/posts\/203\/revisions\/216"}],"wp:attachment":[{"href":"https:\/\/stefanescu.lu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stefanescu.lu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}