<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0"><channel><title>Victor's Notes</title><description>Writing about product design, technology, and experiments.</description><link>https://web.replaceme.com</link><item><title>Please authorize this update</title><link>https://web.replaceme.com/posts/Please%20authorize%20this%20update.html</link><guid>https://web.replaceme.com/posts/Please%20authorize%20this%20update.html</guid><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;A few times a day, something on my computer stops what I am doing to ask permission to update itself. Not once a month. &lt;strong&gt;A few times a day.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The two worst offenders in my setup are &lt;a href="https://claude.ai"&gt;Claude&lt;/a&gt; and &lt;a href="https://cursor.com"&gt;Cursor&lt;/a&gt;. Both ship daily. Claude sometimes ships twice before lunch.&lt;/p&gt;
&lt;p&gt;So there I am, in the middle of a paragraph or halfway through a video call, and a dialog slides over everything: &lt;em&gt;Claude wants to make changes. Type your password.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;I remember installing things&lt;/h2&gt;
&lt;p&gt;You installed a program and then you used it. Months went by. Sometimes years. It never once asked you to stop and look at it.&lt;/p&gt;
&lt;p&gt;I know software is built differently now, and the AI tooling in particular is moving faster than anything I have used before. Fine. &lt;strong&gt;But the update UX is broken&lt;/strong&gt;, and shipping fast is not a licence to interrupt someone several times a day.&lt;/p&gt;
&lt;h2&gt;The web got this right without trying&lt;/h2&gt;
&lt;p&gt;You reload the page and you have the newest version. Nobody asks. Nobody wants your password. Nobody puts a modal between you and the thing you came to do.&lt;/p&gt;
&lt;p&gt;Desktop apps kept the whole ceremony and lost the reason for it. If a program interrupts me while it is running, or greets me with an upgrade prompt every single time I open it, &lt;em&gt;that is not the computing I signed up for&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Who decides when my machine changes&lt;/h2&gt;
&lt;p&gt;This is why I keep coming back to open source and to Linux. Not because everything there is beautiful, but because &lt;strong&gt;I get to decide when my machine changes&lt;/strong&gt;. The alternative, right now, is openly hostile to the person using it.&lt;/p&gt;
&lt;p&gt;I hope the companies rethink it. I hope more people stop treating it as the price of owning a computer, because it is not a law of nature. It is a choice somebody made in a meeting.&lt;/p&gt;
</description></item><item><title>Creative Coding</title><link>https://web.replaceme.com/posts/Creative%20Coding.html</link><guid>https://web.replaceme.com/posts/Creative%20Coding.html</guid><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;I love creative coding. This is the way I got hooked into programming, with &lt;a href="https://processing.org"&gt;Processing&lt;/a&gt; and &lt;a href="https://www.arduino.cc"&gt;Arduino&lt;/a&gt;, and what got me was &lt;strong&gt;how short the loop is&lt;/strong&gt;. You write a few lines, you look at the screen, something moved.&lt;/p&gt;
&lt;p&gt;Small iterations and you see the result immediately. I think &lt;em&gt;the shorter the loop between coding and seeing the result, the more satisfying it is&lt;/em&gt;. I did lots of creative coding projects over the years, and I even made a creative coding app for Android, &lt;a href="https://phonk.app/"&gt;Phonk&lt;/a&gt;, so this is not exactly a new love.&lt;/p&gt;
&lt;h2&gt;It started as a viewer&lt;/h2&gt;
&lt;p&gt;So a while ago I started something small. I made a viewer for &lt;a href="https://p5js.org"&gt;p5.js&lt;/a&gt; sketches, and then a gallery of ten one-liner sketches to put inside it. Nothing ambitious, just a nice place to look at them.&lt;/p&gt;
&lt;p&gt;Then, because I am a designer and I cannot help it, I spent a while trying different visual directions for that gallery (an MSX one, a ZX Spectrum one, a studio one, a minimal one) and I screenshotted all of them before picking one.&lt;/p&gt;
&lt;p&gt;(image gallery themes)&lt;/p&gt;
&lt;p&gt;At some point I was looking at the gallery and I thought, &lt;em&gt;this is nice, but what if somebody else could type here too?&lt;/em&gt; So I built a shared arena where more than one person can edit the same sketch at the same time, synced with &lt;a href="https://crdt.tech"&gt;CRDTs&lt;/a&gt;, with live cursors so you see who is writing what.&lt;/p&gt;
&lt;h2&gt;And then it became a game&lt;/h2&gt;
&lt;p&gt;Because once two people can edit the same sketch, the obvious question is whose turn it is. So it became a game, &lt;strong&gt;SketchJam&lt;/strong&gt;. Everybody starts from the same seed sketch and then you pass the pen: one player on the keyboard at a time, on a clock, with everybody else watching the code change live.&lt;/p&gt;
&lt;p&gt;The part I enjoyed designing the most is &lt;strong&gt;the two budgets&lt;/strong&gt;. A turn ends when either the time or the characters run out, and then the sketch locks as it is.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The time does not start when your turn opens&lt;/strong&gt;, it starts on your first keystroke, so reading the code you were handed is free. I did not want people to panic while they were still understanding what they inherited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The characters are counted as edit distance&lt;/strong&gt; against the sketch you received, with the leading whitespace stripped before measuring, so reformatting and moving things around is not charged as new work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;There is no revert.&lt;/strong&gt; Whatever you leave behind is what the next player has to work with.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I played it with people and it was great. Seeing a small sketch morphing into something else turn after turn is &lt;em&gt;really really fun&lt;/em&gt; to watch, and the constraints add a lot. The time and the number of characters put you in a bit of a pressure mode, and &lt;strong&gt;that pressure is what makes it engaging&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;(video a game session)&lt;/p&gt;
&lt;p&gt;At the end you can scrub the replay from the seed to the final frame, with credits showing what each turn cost, and a finished game can seed a new one, so &lt;strong&gt;games end up having ancestry&lt;/strong&gt;. It is not online yet, but it will live here: https://changeme.placeholder&lt;/p&gt;
&lt;p&gt;I built almost all of it through the Forgejo agent workflow I wrote about in &lt;a href="https://web.replaceme.com/posts/Forgejo%20with%20agents.html"&gt;Forgejo with agents&lt;/a&gt;, opening issues from wherever I was and reviewing the PRs later. &lt;em&gt;Around seventy commits in three weeks.&lt;/em&gt;&lt;/p&gt;
</description></item><item><title>Hub</title><link>https://web.replaceme.com/posts/Hub.html</link><guid>https://web.replaceme.com/posts/Hub.html</guid><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;This one started as a continuation of &lt;a href="https://web.replaceme.com/posts/Grocery%20Shopping.html"&gt;Grocery Shopping&lt;/a&gt;. That little app worked so well for us that I started thinking, &lt;em&gt;why not expand it with more small modules and replace some of the other apps I use every day?&lt;/em&gt; Also I love self hosting and the whole homelab thing, so the idea of having all of that running on my own servers was very attractive.&lt;/p&gt;
&lt;h2&gt;The shape of it&lt;/h2&gt;
&lt;p&gt;So I made a &lt;strong&gt;modular personal hub&lt;/strong&gt;. First I built the core, the part that lives on my server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One small kernel&lt;/strong&gt;, with the modules plugged into it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Everything stored in a single &lt;a href="https://www.sqlite.org"&gt;SQLite&lt;/a&gt; file.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The surfaces connect to that core over an API.&lt;/strong&gt; The two that really matter to me are the phone and the TUI &lt;em&gt;(I love TUIs, mostly for ergonomics reasons, as I wrote in &lt;a href="https://web.replaceme.com/posts/On%20computer%20ergonomics.html"&gt;On computer ergonomics&lt;/a&gt;)&lt;/em&gt;, and the webapp came out naturally once the API was already there.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(image the TUI)&lt;/p&gt;
&lt;h2&gt;The modules&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Todo&lt;/strong&gt; was the first one I added. Having a todo list I can reach from my phone and from the TUI is super valuable, and honestly that alone would have justified the whole project.&lt;/p&gt;
&lt;p&gt;Then I added a &lt;strong&gt;Wiki&lt;/strong&gt;. Not to replace &lt;a href="https://obsidian.md"&gt;Obsidian&lt;/a&gt;, which I use every single day, but more as an exercise of feasibility, &lt;em&gt;could I even do this?&lt;/em&gt; And it got quite far. Hub can read my Obsidian vault now and almost everything works. The only thing missing is the plugins, which is also exactly the reason why I have not quit Obsidian.&lt;/p&gt;
&lt;p&gt;Something else I used a lot in Obsidian was the &lt;strong&gt;daily notes&lt;/strong&gt;. But when I looked at how I was actually using them, most of the times it was just to capture random single items: a picture of something I saw in the street, a movie somebody recommended me, some quick thought. For that, the daily notes were a bit cumbersome, both the capture part and the retrieval part. So I made a very specific module for this very specific use case.&lt;/p&gt;
&lt;p&gt;From there I kept adding more and more modules. My favourites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flows&lt;/strong&gt;, which is basically a UI-less &lt;a href="https://n8n.io"&gt;n8n&lt;/a&gt;. You drop a small Python script in a folder and it runs on a schedule, or on an event, or on a webhook.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chat&lt;/strong&gt;, an agent that via tool calling can reach into all the other modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The chat is where it started to be really fun, because now I can say something like &lt;em&gt;&amp;quot;create a wiki entry about Wanza Mian (a noodle dish from Chongqing), and add the ingredients to the grocery shopping module&amp;quot;&lt;/em&gt; and it just does it.&lt;/p&gt;
&lt;p&gt;(image the chat)&lt;/p&gt;
&lt;p&gt;It is not online, but you can have a look here: https://changeme.placeholder&lt;/p&gt;
</description></item><item><title>Forgejo Overview</title><link>https://web.replaceme.com/posts/Forgejo%20Overview.html</link><guid>https://web.replaceme.com/posts/Forgejo%20Overview.html</guid><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;Since I started using &lt;strong&gt;blipblip&lt;/strong&gt;, my agent, to do tasks inside my &lt;a href="https://forgejo.org"&gt;Forgejo&lt;/a&gt; instance, I ran into a problem.&lt;/p&gt;
&lt;p&gt;The issues live across several repos, each one moving through a label workflow (&lt;code&gt;status/research&lt;/code&gt;, then &lt;code&gt;status/doing&lt;/code&gt;, then &lt;code&gt;status/review&lt;/code&gt;, then closed) and the Forgejo UI does not give you any way to see all of that from a bird's eye perspective. If I wanted to know what was in flight I had to go repo by repo, and if I wanted to read a thread I had to navigate into it.&lt;/p&gt;
&lt;h2&gt;What already existed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Forgejo's native Projects boards.&lt;/strong&gt; Their columns are manual board columns, &lt;em&gt;not labels&lt;/em&gt;, so moving a card does not change anything about the issue, and closing an issue does not move the card. The board and the reality drift apart.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The kanban tools&lt;/strong&gt;: &lt;a href="https://vikunja.io"&gt;Vikunja&lt;/a&gt;, &lt;a href="https://planka.app"&gt;Planka&lt;/a&gt;, &lt;a href="https://wekan.github.io"&gt;Wekan&lt;/a&gt;, &lt;a href="https://www.focalboard.com"&gt;Focalboard&lt;/a&gt;. None of them sync two ways with Forgejo, so they copy the issues into a second store, and now you have two truths.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I made my own.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/Forgejo%20Overview/forgejo-overview.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;One page&lt;/h2&gt;
&lt;p&gt;The repos are the rows, my status labels are the columns. &lt;strong&gt;There is no database&lt;/strong&gt;, Forgejo stays the only source of truth, and the board writes almost nothing back.&lt;/p&gt;
&lt;p&gt;It cannot change the status of an issue. That happens in Forgejo, and I preferred it over a nice drag and drop that silently disagrees with the labels. The untriaged issues are not hidden either, they get their own strip on top of each project with one-click chips, so &lt;strong&gt;triaging is one click and not a trip into the repo&lt;/strong&gt;. And if Forgejo becomes unreachable, the last good board stays on the screen with a staleness banner instead of blanking out.&lt;/p&gt;
&lt;p&gt;Design matters to me, so &lt;em&gt;even if this is an internal tool that only I use, I did not want it to look like an internal tool that only I use&lt;/em&gt;. I designed it as a standalone HTML file before building the real thing. This is the change I mentioned in &lt;a href="https://web.replaceme.com/posts/LLM%20Party.html"&gt;LLM Party&lt;/a&gt;, I do not prototype these things in Figma anymore, I iterate directly in code. There are three themes, and the vivid one gives each status column its own tinted lane, so you can tell where a card lives from its colour.&lt;/p&gt;
&lt;h2&gt;Then it kept growing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comments&lt;/strong&gt;, so I can read and answer a thread without leaving the board.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Merging PRs&lt;/strong&gt;, and seeing the source code of a PR in a diff overlay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Status markers&lt;/strong&gt;, a pill that lights up when blipblip is working on an issue, a marker when it stalled with an error, and a badge counting the open PRs it has left me to review.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At this point it has almost replaced the main Forgejo UI for me. I still go there for corner cases, but most of my interactions with blipblip happen here now. It runs as a single Go binary on the same machine as Forgejo and I reach it over &lt;a href="https://tailscale.com"&gt;Tailscale&lt;/a&gt;, so &lt;strong&gt;it works the same from my phone as from my laptop&lt;/strong&gt;. That is what makes the workflow I described in &lt;a href="https://web.replaceme.com/posts/Forgejo%20with%20agents.html"&gt;Forgejo with agents&lt;/a&gt; work from anywhere.&lt;/p&gt;
&lt;h2&gt;Routines&lt;/h2&gt;
&lt;p&gt;The last thing I added is routines. The idea is to give blipblip standing orders per repository, written in plain language, like &lt;em&gt;upgrade the dependencies, suggest improvements, refactor the long files&lt;/em&gt;, and let it work out for itself when to run them and what they mean. Whatever it does comes back as normal issues and pull requests, which the board already knows how to show.&lt;/p&gt;
&lt;p&gt;It is a new feature and it is not well tested yet, so &lt;strong&gt;for now this is more an idea than a result&lt;/strong&gt;. But I like where it points. As the models get better, the projects could keep improving over time on their own.&lt;/p&gt;
&lt;p&gt;The code is not public, but I'm happy to share it if somebody is interested.&lt;/p&gt;
</description></item><item><title>Bespoke design tools</title><link>https://web.replaceme.com/posts/Bespoke%20design%20tools.html</link><guid>https://web.replaceme.com/posts/Bespoke%20design%20tools.html</guid><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;I started to make a very simple computer game, and then I wanted to process the assets rapidly. I wanted to give it an aesthetic of &lt;strong&gt;collage&lt;/strong&gt;, so I wanted to grab a lot of images from the internet and quickly cut them out.&lt;/p&gt;
&lt;p&gt;I could have done the cutouts using some open source image editing program like &lt;a href="https://krita.org"&gt;Krita&lt;/a&gt;, but instead I thought it would be interesting to create a bespoke application for this specific workflow. So I quickly vibe coded a tool where I can drop an image and, using a &lt;a href="https://segment-anything.com"&gt;SAM&lt;/a&gt;-like model, segment anything in the image. Just with a couple of clicks, I can have my collage cutout ready in my game asset folder.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/Bespoke%20design%20tools/bespoke-cutout.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;Why bother, when general purpose tools exist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I can tailor the tool to the specific need&lt;/strong&gt; I have at that moment, and only to that need.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I do not own Photoshop.&lt;/strong&gt; More boring, but very real, and the other tools I could use do not have the things I want, like the segmentation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I can be much more experimental&lt;/strong&gt;, and make things that traditional tools cannot do. This is the one I enjoy the most.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That third reason is why the little cutout tool did not stay little. Once the segmentation was working I added a library to keep the cutouts, and from there it kept growing into a small suite of modules.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Shaders&lt;/strong&gt;, with dither, where I can pick my own ink and paper colours, knock the highlights or the shadows out to transparency, and add a boiling wobble so the image moves a bit like old animation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fracture&lt;/strong&gt;, which shatters an image into regions and paints each region with a different style. The regions can be a grid, hexagons, voronoi cells, organic shapes, noise, or a &lt;em&gt;Mondrian&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Icons&lt;/strong&gt;, for drawing small icons, with smoothing, simplification, the same wobble, and an SVG export that stays under a kilobyte.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/Bespoke%20design%20tools/beskpoke-fracture.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;None of that is a menu item you find in Photoshop. &lt;em&gt;A Mondrian fracturer is not a filter anybody would ship&lt;/em&gt;, because almost nobody needs it. But I wanted to see what it looked like, and &lt;strong&gt;that is a good enough reason when building the tool is cheap&lt;/strong&gt;.&lt;/p&gt;
</description></item><item><title>Forgejo with agents</title><link>https://web.replaceme.com/posts/Forgejo%20with%20agents.html</link><guid>https://web.replaceme.com/posts/Forgejo%20with%20agents.html</guid><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;So for a couple of months I've been using &lt;a href="https://forgejo.org"&gt;Forgejo&lt;/a&gt; to keep my personal projects and it has been &lt;em&gt;really really fantastic&lt;/em&gt;. It is super quick, super easy to set up, and I don't know, maybe this is not very tangible, but &lt;strong&gt;it feels great to host your own infra&lt;/strong&gt; sometimes.&lt;/p&gt;
&lt;h2&gt;Giving a machine to an agent&lt;/h2&gt;
&lt;p&gt;Since I'm using &lt;a href="https://www.proxmox.com"&gt;Proxmox&lt;/a&gt;, and in Proxmox it is very easy to make virtual machines, I thought that it could be interesting also to create &lt;strong&gt;a container that is owned fully by an agent&lt;/strong&gt;. So I made a &lt;a href="https://www.debian.org"&gt;Debian&lt;/a&gt; machine and I gave full root access to my agent, and I also gave an account to this agent to use Forgejo.&lt;/p&gt;
&lt;p&gt;I set up a global hook, so every single time that I mention my agent, it can pick up the task or the question I'm making, everything via project issues. My agent has some small rules to know how to operate in the machine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It has &lt;strong&gt;full access to the machine&lt;/strong&gt;, and can install and uninstall things as it needs.&lt;/li&gt;
&lt;li&gt;It knows &lt;strong&gt;where to put the projects&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It knows &lt;strong&gt;how to launch them&lt;/strong&gt;, inside a &lt;a href="https://github.com/tmux/tmux"&gt;tmux&lt;/a&gt; session. This is interesting, because if I need to know what the output of a certain project is, I can always SSH very quickly and see the output of the command.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The workflow&lt;/h2&gt;
&lt;p&gt;My workflow is very basic now:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;I create an issue&lt;/strong&gt; where I make an inquiry to my bot, saying hey, could you research about this, or could you fix this, or could you implement this feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The bot researches, implements or assesses&lt;/strong&gt;, depending on the task, and then writes the response in the same issue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For the cases that are very clear it opens a PR&lt;/strong&gt; that I can supervise and give my yes or no.&lt;/li&gt;
&lt;/ol&gt;
&lt;img class="bare" src="https://web.replaceme.com/assets/notes/Forgejo%20with%20agents/workflow.webp" alt="An issue, the pull request blipblip opened for it, and the result it produced"&gt;
&lt;p&gt;This workflow has been great because now I can be at any place and, via the Forgejo mobile UI, &lt;strong&gt;interact with my agent without having my personal laptop turned on&lt;/strong&gt;.&lt;/p&gt;
</description></item><item><title>Grocery Shopping</title><link>https://web.replaceme.com/posts/Grocery%20Shopping.html</link><guid>https://web.replaceme.com/posts/Grocery%20Shopping.html</guid><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><description>&lt;p&gt;One day I realized that I was having an issue every single time I went to the supermarket. My partner and I, we share the grocery shopping list via &lt;a href="https://telegram.org"&gt;Telegram&lt;/a&gt;, and most of the times we have a very long and unorganized list of items that are &lt;strong&gt;not grouped by sections&lt;/strong&gt; or anything.&lt;/p&gt;
&lt;p&gt;So I had this issue where, for example, in the list it said &lt;em&gt;yogurt&lt;/em&gt;. So I picked the yogurt. Then I went to pick the lettuce in another section, then realized, oh I forgot to buy milk. Then I went back to the dairy section, and then realized again, oh I have to go back to the veggie section because I forgot tomatoes, and so on and so forth.&lt;/p&gt;
&lt;p&gt;Another thing is that, because in Telegram &lt;strong&gt;you don't have anything to click&lt;/strong&gt;, many times I end up forgetting to buy certain items or even buying them duplicated.&lt;/p&gt;
&lt;p&gt;So then I realized, hey, wait a minute. &lt;em&gt;I know how to vibe code.&lt;/em&gt; I can make an app very quickly that solves this issue.&lt;/p&gt;
&lt;p&gt;So rapidly I made a quick web app where we can add items for the grocery store, and then have a button that &lt;strong&gt;automatically sorts the items per section&lt;/strong&gt; in the supermarket. To be honest, it has been great since then.&lt;/p&gt;
&lt;p&gt;&lt;video src="https://web.replaceme.com/assets/notes/Grocery%20Shopping/grocery.mp4" autoplay loop muted playsinline preload="metadata"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;And this is, I think, the part that I really like about this new way of AI assisted code, where &lt;strong&gt;we can develop ideas so quickly&lt;/strong&gt; that I would never have done it otherwise because of lack of time.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Related watching: &lt;a href="https://www.youtube.com/watch?v=qo5m92-9_QI"&gt;Home-cooked Software and Barefoot Programmers: Maggie Appleton, Local-First Conf&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>LLMs and design systems</title><link>https://web.replaceme.com/posts/LLMs%20and%20design%20systems.html</link><guid>https://web.replaceme.com/posts/LLMs%20and%20design%20systems.html</guid><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate><description>&lt;p&gt;Before, when I made a web app, I always started with the components, and I always started in &lt;a href="https://www.figma.com"&gt;Figma&lt;/a&gt;. I would build the whole design system there and then implement it in the application, and then I would use something like &lt;a href="https://storybook.js.org"&gt;Storybook&lt;/a&gt; as a centralized repository of all the components, which worked for me also as a source of truth. &lt;strong&gt;That was my process for years.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With agentic coding all of this changed, because &lt;strong&gt;now I am much faster working in code than I am in Figma&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;What Figma is for now&lt;/h2&gt;
&lt;p&gt;I still use Figma, but I use it for something else now. I use it to work in the 2D visual space, because &lt;em&gt;that is a different type of thinking&lt;/em&gt;. What I do there is lay things out, or make a very lo-fi prototype of what I want, just to see it.&lt;/p&gt;
&lt;p&gt;Then I screenshot that sketch and I pass it to the agent, which is &lt;strong&gt;constrained by the components that already exist in the project&lt;/strong&gt;, and it composes the view.&lt;/p&gt;
&lt;img class="bare" src="https://web.replaceme.com/assets/notes/LLMs%20and%20design%20systems/sketch-to-result.webp" alt="A hand-drawn wireframe, and below it the view the agent composed from it"&gt;
&lt;h2&gt;Storybook, replaced by the app itself&lt;/h2&gt;
&lt;p&gt;And at some point I realized that for the size of the projects I do, Storybook is not necessary anymore. The catalogue is still exactly the thing I want, but &lt;strong&gt;the agent can build one for me inside the app&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In one of my projects that catalogue has more than a hundred stories, with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groups, a filter and deep links&lt;/li&gt;
&lt;li&gt;Keyboard navigation&lt;/li&gt;
&lt;li&gt;Switchers for the viewport and the background&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It has most of the things I found useful in Storybook and &lt;strong&gt;none of the setup&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There is also a small &lt;strong&gt;audit script&lt;/strong&gt; that goes through the project looking for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Components that are not registered&lt;/li&gt;
&lt;li&gt;Stories that are fake&lt;/li&gt;
&lt;li&gt;Raw HTML sitting in a view where a component should be&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is what stops the agent from writing its own markup instead of reaching for what is already there. &lt;em&gt;A set of rules only works if something can check it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/LLMs%20and%20design%20systems/llmparty-design-system.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;As long as the agent has a good component library and a good set of rules, &lt;strong&gt;a lo-fi sketch is enough for it to compose a high quality interface&lt;/strong&gt;.&lt;/p&gt;
</description></item><item><title>LLM Party</title><link>https://web.replaceme.com/posts/LLM%20Party.html</link><guid>https://web.replaceme.com/posts/LLM%20Party.html</guid><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://llmparty.pixeletes.com"&gt;LLMParty&lt;/a&gt;&lt;/strong&gt; is a collection of small experiments I've been doing to better understand the capabilities of LLM models, and also how to work with them.&lt;/p&gt;
&lt;p&gt;&lt;video src="https://web.replaceme.com/assets/notes/LLM%20Party/llmparty.mp4" autoplay loop muted playsinline preload="metadata"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The questions I wanted to poke at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What knowledge do they have?&lt;/strong&gt; If I give them a GPS coordinate, will they know where the place is?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How far do the vision capabilities go?&lt;/strong&gt; How much can they understand if I draw?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is this thing called tool calling&lt;/strong&gt; that everybody was chatting about at the beginning?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So for me, LLM Party was the sandbox to experiment with all these things that people were chatting about on the internet, and also to learn how to develop new workflows to use my computer and to use them also in my work.&lt;/p&gt;
&lt;h2&gt;It changed how I build&lt;/h2&gt;
&lt;p&gt;I started to code the project by hand, but immediately I embraced the proto-agentic coding with &lt;a href="https://aider.chat"&gt;Aider&lt;/a&gt;, one of the first harnesses that appeared. It was a great experience, and then immediately I thought, &lt;em&gt;wow, this is the future!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/LLM%20Party/llmparty-sketchoff.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;It also changed my way of designing, my workflow and my process. I realized that yeah, I couldn't work the same as before. In many cases I realized I didn't have to use &lt;a href="https://www.figma.com"&gt;Figma&lt;/a&gt; anymore to fully prototype what I wanted to do. &lt;strong&gt;I could iterate faster in code rather than on a white canvas&lt;/strong&gt;. The white canvas was amazing for me to sketch out the idea, then copy paste the image to the agent and see it build. So that was great to see.&lt;/p&gt;
&lt;p&gt;Some of the experiments are a bit subversive, so they play a bit with the idea of what the models &lt;em&gt;can&lt;/em&gt; do, &lt;em&gt;should&lt;/em&gt; do, or &lt;em&gt;shouldn't&lt;/em&gt; do. Also, like, how are we gonna end up?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://web.replaceme.com/assets/notes/LLM%20Party/llmparty-universal-ui.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I think better than explaining the project, &lt;strong&gt;&lt;a href="https://llmparty.pixeletes.com"&gt;I invite you to have a look&lt;/a&gt;&lt;/strong&gt;. I hope you can enjoy it!&lt;/p&gt;
</description></item><item><title>On computer ergonomics</title><link>https://web.replaceme.com/posts/On%20computer%20ergonomics.html</link><guid>https://web.replaceme.com/posts/On%20computer%20ergonomics.html</guid><pubDate>Mon, 02 Sep 2024 00:00:00 GMT</pubDate><description>&lt;p&gt;I remember those long nights coding and designing with an old Thinkpad. My wrists were like contortionists in a circus, stretching all the fingers to reach all the shortcuts in &lt;a href="https://www.figma.com"&gt;Figma&lt;/a&gt;, &lt;a href="https://www.jetbrains.com"&gt;JetBrains&lt;/a&gt; or &lt;a href="https://www.vim.org"&gt;VIM&lt;/a&gt;. &lt;em&gt;Around that time I did not know I could swap the ESC and CAPS LOCK keys in most operating systems&lt;/em&gt; 😅&lt;/p&gt;
&lt;p&gt;One day I sat at my desk, opened my laptop and started to type. The pain on my wrists was considerable so I barely touched the keyboard for some days.&lt;/p&gt;
&lt;h2&gt;Keyboard first&lt;/h2&gt;
&lt;p&gt;A friend of mine told me about the &lt;a href="https://i3wm.org"&gt;i3 window manager&lt;/a&gt;, and how he reduced the movement of his wrists since he could navigate the computer mainly with keystrokes. It took me some months to have a setup I liked but &lt;strong&gt;wow, it was amazing!&lt;/strong&gt; I moved lots of pieces of my workflow to be more keyboard centric, less jumping to the mouse, less suffering for my wrists.&lt;/p&gt;
&lt;p&gt;&lt;video src="https://web.replaceme.com/assets/notes/On%20computer%20ergonomics/tiling.mp4" autoplay loop muted playsinline preload="metadata"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;There was an improvement but not enough. I still had recurrent pain, so I continued my search. I still used a mouse and touchpad since around that time I used Figma quite a lot. I got a vertical mouse and it helped, but &lt;strong&gt;the keyboard was the elephant in the room&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Down the keyboard rabbit hole&lt;/h2&gt;
&lt;p&gt;I bought a mechanical keyboard, nothing fancy, the clickety-clack feeling was great though. Then I realized &lt;em&gt;how expansive the keyboard world is&lt;/em&gt;. So many possibilities of customization and variations!&lt;/p&gt;
&lt;p&gt;I learned about split keyboards and I got a &lt;strong&gt;&lt;a href="https://ultimatehackingkeyboard.com"&gt;UHK Keyboard&lt;/a&gt;&lt;/strong&gt; with the trackpoint module. Took me a bit to get used to it. &lt;em&gt;(It did not help that I got the version without key labels 😂.)&lt;/em&gt; Nowadays it is my favorite keyboard ever. It is a pleasure to use and each time I work outside home I dearly miss it.&lt;/p&gt;
&lt;p&gt;&lt;video src="https://web.replaceme.com/assets/notes/On%20computer%20ergonomics/keyboard.mp4" autoplay loop muted playsinline preload="metadata"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;My wrists are fine now. It took a window manager, a vertical mouse and a split keyboard to get here, but they are fine.&lt;/p&gt;
&lt;p&gt;Now I'm on a quest to find a portable split keyboard, but I find it difficult, they are quite bulky so not great to carry on. I also wish the laptop manufacturers would rethink a bit ergonomics but I guess they don't really care :)&lt;/p&gt;
</description></item></channel></rss>