Little projects like this make accidental complexity really obvious to me. If 5 minutes with an LLM is enough to produce a little app, why is it not enough for a human programmer? There are many any reasons, some essential (computers have more memory and think faster than us), but it’s still the case that a lot of features are much harder to build than they are to describe because the tools are a poor fit for the programmer.
As someone who likes programming, asking “what if building the thing was as easy as describing the thing?” is a rich source of possible improvements.
LLMs are super helpful for “Sunday programmers”. The copypasted spaghetti code may be offensive to professionals, but even bad code is enabling non-programmers make tools and achieve things that they couldn’t do themselves before.
Programming has so many silly barriers. For example, basic tasks in Web app
JS have a trap of Netscape-era APIs that may look simple, but do a wrong thing. Inexperienced user will copy a legacy API from W3Schools, then find a StackOvefow answer and spend three days setting up React to run a component that just calls a newer built-in method.
Some tasks that sound simple like getting x/y position of an element on the screen and placing something next to it are a tour of the document model, rendering modes, concepts like containing blocks and z-index that won’t work, and there are several generations of different APIs trying to solve this problem, so when you search for answers about it, you’ll get a lot of different ones, mostly buggy.
@simonw I’ve played with Claude/Aider for similar one-off/glue code scripting. I hesitate to use it in any project I care about because of the uncertainty around copyright. Do you have a similar concern, or ideas about how it’ll shake out? (I’m aware of NYT v. OpenAI which hits this topic, but nothing more code-specific).
Wow, thanks for writing this up! I hit Claude’s artifact feature by accident a few weeks ago, and I was very impressed with the results in helping me with CSS flexbox
Some thoughts after clicking through, and checking out the code.
Edit: TBH I am detecting a theme of “shell + GUI”, hopefully that is not just me having it on my brain :-)
URL to markdown - works on my home page
feels like curl | html-to-md to me :)
sqlite: It’s cool you can just paste in the sqlite JS documentation, and it can follow it! The generated code looks pretty good.
this is basically making a little shell for sqlite JS
Extracting URLs - this is something I’ve wanted too, though it feels like this kind of thing is naturally done in some kind of shell/Emacs environment. It is weird to me that HTML feels “coupled” to JS/the browser, because they have the “authoritative” DOM APIs
This reminded me of a previous discussion about Puppeteer and JS being the best language for web scraping
clipboard viewer
I view this as another little REPL, plus showing data in a different debuggable format. Sort of like a repr() for an internal browser API.
PyOdide - another REPL, I also like having every tool I use “available” in a fast/shallow way like this
(no comment on Photo Camera Settings, pricing calcuator)
YAML to JSON - hm it’s cool it is live as you type. No source code for this one? I did “view source” on claude.site and it wasn’t very helpful
another shell / GUI problem :)
OpenAI audio
kind reminds me that I read some papers about automatically generating GUIs from command line interfaces a long time ago
QR code, Image converter and page downloader, HTML entity escaper - useful data transformations
text-wrap-balance-nav - makes sense, I often want some kind of live preview
ARES Phonetic alphabet converter - cool
I honestly wonder how you FIND all the tools when you need them. If I made 14 tools in 7 days, I might forget were I put them, or that I even made them. (That has happened to me with CLIs and git repos – occasionally I stumble across one I wrote and forgot about!)
To me, it would be nice to have a search bar where you can type “sqlite js”, ’yaml to json”, “pyodide”, or other free -form strings, and it would bring up the right tool
Sort of like OS X spotlight (is this getting any better?), what used to be Google desktop search, or how you can Google a mathematical formula like “1 + 3” and you get a calculator app:
I agree that these tools are filling a hole (IMO shell-like), so I could see it going 2 ways:
some kind of magic natural language interface to glue it all together, more like the google example
some kind of principled shell with typed data like :
…
URLs
YAML, JSON
clipboards
sqlite code, pyodide code
API descriptions like OpenAI audio
QR codes
It does seem to be “begging” for a better interface than one-off apps.
And to me it’s also begging for the data transformations to be reusable in programs, decoupled from the GUI, if a situation calls for it
And hopefully the apps could be improved over time, rather than being something that each person has to generate with an LLM! I do find it odd that we arrived here :)
Again I think finding/discovering such tool is a problem. Some of these probably exist as sudo apt-get install clipboard-tool, but nobody knows about them. And sharing/improving is a problem.
It also reminds me of Arcan FE by @crazyoglad a bit, as many of the use cases were around showing representations of programming/system data, and displaying them, and interacting with them
I think @matklad was also talking about an Emacs/terminal “replacement” as well. I feel like the fact that these apps are useful is pointing to “a hole” in computing UI
Having a UI that ties all of these little tools together is an interesting idea. I manually link to some of them from my https://tools.simonwillison.net/ homepage but it would be neat to have a UI for switching between them more easily. I’ll have a think about that.
Little projects like this make accidental complexity really obvious to me. If 5 minutes with an LLM is enough to produce a little app, why is it not enough for a human programmer? There are many any reasons, some essential (computers have more memory and think faster than us), but it’s still the case that a lot of features are much harder to build than they are to describe because the tools are a poor fit for the programmer.
As someone who likes programming, asking “what if building the thing was as easy as describing the thing?” is a rich source of possible improvements.
LLMs are super helpful for “Sunday programmers”. The copypasted spaghetti code may be offensive to professionals, but even bad code is enabling non-programmers make tools and achieve things that they couldn’t do themselves before.
Programming has so many silly barriers. For example, basic tasks in Web app JS have a trap of Netscape-era APIs that may look simple, but do a wrong thing. Inexperienced user will copy a legacy API from W3Schools, then find a StackOvefow answer and spend three days setting up React to run a component that just calls a newer built-in method.
Some tasks that sound simple like getting x/y position of an element on the screen and placing something next to it are a tour of the document model, rendering modes, concepts like containing blocks and z-index that won’t work, and there are several generations of different APIs trying to solve this problem, so when you search for answers about it, you’ll get a lot of different ones, mostly buggy.
@simonw I’ve played with Claude/Aider for similar one-off/glue code scripting. I hesitate to use it in any project I care about because of the uncertainty around copyright. Do you have a similar concern, or ideas about how it’ll shake out? (I’m aware of NYT v. OpenAI which hits this topic, but nothing more code-specific).
I’ve been mostly ignoring that issue myself on the basis that the LLM providers all have clauses like these now:
My stuff is generally open source so I feel like the risk is lower for me.
I hope I don’t come to regret this in the future!
Wow, thanks for writing this up! I hit Claude’s artifact feature by accident a few weeks ago, and I was very impressed with the results in helping me with CSS flexbox
Some thoughts after clicking through, and checking out the code.
Edit: TBH I am detecting a theme of “shell + GUI”, hopefully that is not just me having it on my brain :-)
URL to markdown - works on my home page
curl | html-to-mdto me :)sqlite: It’s cool you can just paste in the sqlite JS documentation, and it can follow it! The generated code looks pretty good.
Extracting URLs - this is something I’ve wanted too, though it feels like this kind of thing is naturally done in some kind of shell/Emacs environment. It is weird to me that HTML feels “coupled” to JS/the browser, because they have the “authoritative” DOM APIs
clipboard viewer
repr()for an internal browser API.PyOdide - another REPL, I also like having every tool I use “available” in a fast/shallow way like this
(no comment on Photo Camera Settings, pricing calcuator)
YAML to JSON - hm it’s cool it is live as you type. No source code for this one? I did “view source” on claude.site and it wasn’t very helpful
OpenAI audio
QR code, Image converter and page downloader, HTML entity escaper - useful data transformations
text-wrap-balance-nav - makes sense, I often want some kind of live preview
ARES Phonetic alphabet converter - cool
I honestly wonder how you FIND all the tools when you need them. If I made 14 tools in 7 days, I might forget were I put them, or that I even made them. (That has happened to me with CLIs and git repos – occasionally I stumble across one I wrote and forgot about!)
To me, it would be nice to have a search bar where you can type “sqlite js”, ’yaml to json”, “pyodide”, or other free -form strings, and it would bring up the right tool
Sort of like OS X spotlight (is this getting any better?), what used to be Google desktop search, or how you can Google a mathematical formula like “1 + 3” and you get a calculator app:
https://www.google.com/search?q=1+%2B+3
I agree that these tools are filling a hole (IMO shell-like), so I could see it going 2 ways:
…
It does seem to be “begging” for a better interface than one-off apps.
And to me it’s also begging for the data transformations to be reusable in programs, decoupled from the GUI, if a situation calls for it
And hopefully the apps could be improved over time, rather than being something that each person has to generate with an LLM! I do find it odd that we arrived here :)
Again I think finding/discovering such tool is a problem. Some of these probably exist as
sudo apt-get install clipboard-tool, but nobody knows about them. And sharing/improving is a problem.It also reminds me of Arcan FE by @crazyoglad a bit, as many of the use cases were around showing representations of programming/system data, and displaying them, and interacting with them
https://lobste.rs/domains/arcan-fe.com
I think @matklad was also talking about an Emacs/terminal “replacement” as well. I feel like the fact that these apps are useful is pointing to “a hole” in computing UI
Oops, thanks for pointing out the missing YAML to JSON code - I added a link to the chat transcript (which includes the code), that’s here: https://gist.github.com/simonw/d861edb70a3572cb03de6f98a0caf3bc
I do a whole bunch of LLM stuff on the CLI too - most frequently my llm-cmd command which looks like this:
Running that then outputs a command like this one, which you hit “enter” to run (so you can review it first):
Having a UI that ties all of these little tools together is an interesting idea. I manually link to some of them from my https://tools.simonwillison.net/ homepage but it would be neat to have a UI for switching between them more easily. I’ll have a think about that.