By Joel Dare - Written September 3, 2026
Today I had a breakthrough.
I watched as a small web app materialized, automatically, from a free large language model (LLM) running on my laptop.
It started with some stray thoughts, which I wrote into a new GitHub issue, describing a test app I had in mind.
I labeled the issue with “gemma”.
My router (a shell script) noticed the label and made a call to Pi, the minimal coding agent.
Pi read my static instructions then connected to an LLM running locally.
But, I wasn’t excited yet.
This was the planning pass. I had designed it into the system. It’s default mode.
It’s easy for a local model to write prose so it didn’t surprise me when it returned with a well-written plan based on the stray thoughts I had aimlessly typed into the issue description.
The complete plan it had written looked good to me.
I labeled the issue again. This time I selected “gemma” and “project”.
Again, my router noticed the labels and made a call to Pi.
About five minutes later the model wrote a comment on the issue telling me a prototype was ready.
Honestly, I still didn’t think it was going to work. I doubted it would run, if it existed at all.
I opened the link and found a working web app exactly as the plan had described.
It was a tic-tac-toe game. The simplest example I could think of without being completely trivial.
The game wasn’t perfect. There were only two rows of three squares for X’s and O’s. I needed a 3x3 grid. But I quickly realized this was a typo in my original request, not an error the model had made. I had asked for a 3x2 grid.
I added a comment to the GitHub issue outlining several changes, including fixing the grid.
I labeled the issue as “gemma” and “project” and watched as it picked it up again, made my changes, and then commented that the new prototype was ready.

JoelDare.com © Dare Companies Dotcom LLC
(formrobin.com)