Screenshots The RSS feed for Screenshots.

  • πŸ“— Vibelog

    Well Read - A Fable Moment

    Asking Fable to make some changes to my RSS reader, as well as getting Fable to look at a problem Opus couldn’t solve. Continue reading β†’

  • πŸ“— Vibelog

    Weatherpatch - UI Improvement

    A few weeks ago, I vibe-coded a web-app called Weatherpatch. This is an app that is designed to receive email newsletters and produce them as an RSS feeds: basically what Feedbin does, but without needing to use Feedbin. The app was vibe-coded with Opus, and while functional, it is hardly an example of good design (unless you’re a fan of Cubism). To wit:

    Auto-generated description: A user interface displays an inbound email address for subscribing to newsletters and options to manage feeds, including renaming, deleting, and merging them.

    Yeah, Opus just threw the feed management controls all over the place. And I tolerated it for a time. I was more interested in having something functional, rather than pretty. But the thing about a bad UI is that it makes using the app feel bad. Sure I’m not in there managing feeds, but I would like to go in there are copy-paste the email address when setting a new one up.

    Continue reading β†’

  • TIL that Fastmail added the ability to annotate an email with a private memo, similar to Hey. It also shows up in the email list. This is good. I hope I remember to use it.

    Auto-generated description: An email titled Inkwell Reading Recap for Jul 3 from Micro.blog summarizes a discussion about using affordable 3D printing to create helmet stands and housing cost challenges.
  • Turns out I’m in the weights. They know I’m a software engineer, but not much more than that. Hilariously, Claude and Gemini think I’m a Swift developer and contributor. I guess the models have a problem recognising Go as a proper noun (or there’s a Leon Mika out there that’s a legendary Swift dev).

    An export from intheweights.com for Leon Mika, who is identified as a Swift developer and blogger with a strength score of 220, placing him in the top 25%, alongside a comparison of various AI models' performances.
  • πŸ“— Vibelog

    Show As Table - A DSL In a Hurry

    I was asked to make a couple of diagrams for the purpose of showcasing a database design. These diagrams were mainly used to show the relationship between entities, so I chose to use TLDraw for this. But there was a need to add some example rows, which TLDraw does not make easy. Furthermore, there was a bit of a push to get this done quickly, as these were to be shown to various stakeholders the next day.

    Continue reading β†’

  • πŸ“— Vibelog

    Blogging Tools - Some Post Authoring Work

    Requesting some work from Claude to add post scheduling to Billing Tools. Continue reading β†’

  • Ooh, this is a nice feature of Micro.blog. You can add pages that can hang off the URL of other pages, like a child page. As far as I can tell, it’s just a matter of including the parent path in the URL. I don’t know if you need the parent page. Having one works for me so I didn’t check.

    Auto-generated description: A simple website navigation menu listing links to About, Now, Projects, Dequoter, and Archive pages with their respective URL paths.
  • I was curious to see if Fable 5 had any knowledge of this blog in its training date (modern day equivalent of Googling yourself, I guess 😏). The answer seems to be maybe. It is aware of it, apparently, but isn’t quite ready to associate it with the author making the request.

    Auto-generated description: A screenshot displays a conversation about a person named Leon Mika, mentioning a software developer who blogs about programming topics like Go and indie web tools.
  • Done! The backdrops for my Godot game have been made. Finished the desert one last week, and the coast one this evening. I also redid the mountain one, which is a little less interesting than the one I had, but it better matches the others artistically. Now time for the meta elements. πŸ˜“

    Auto-generated description: A pixel art-style video game scene features a character with a red hat and sword standing on a wooden platform over water, with a background of grassy cliffs and trees. Auto-generated description: A pixelated video game scene features a character standing on a stone platform, surrounded by mountainous terrain, floating platforms with arrows, and collectible coins. Auto-generated description: A pixelated knight character stands on a stone pillar in a desert-themed platform game.
  • Compared profile websites at work today. I really need to get mine cleaned up. I still have a link to GitHub, despite not using that account for much nowadays.

    Auto-generated description: A personal website homepage displays contact options and social media links for Leon Mika, including Micro.blog, Mastodon, Bluesky, GitHub, email, and a blog.
  • Trying to develop the habit of using the Micro.blog app for MacOS, so the backup feature will run. I expect the backups of this blog to be large. But 2.59 GB compressed? Wasn’t expecting it to be that large.

    Auto-generated description: A file directory titled Backups contains two backup files, each named lmika.micro.blog with different dates and sizes, showing their locations on the left sidebar.
  • How does anyone find anything on the iOS App Store? Made several fruitless attempts at finding Inkwell, and ended up just using the link in the help guide. It’s there if you search for “Inkβ€’well”. Just scroll past the unusually large number of AI tattoo generator apps, which is a thing apparently.

    Auto-generated description: Various app advertisements related to color analysis and tattoo design are displayed on a screen.
  • Hmm, either Steven Pressfield’s blog got hacked, or he’s decided to diversify. 😏

    Auto-generated description: A series of notifications from a reading app display various articles about online casinos and crypto casinos.

    Also, props for being the first instance of RSS spam I’ve encountered in a long while.

  • The on-again, off-again Godot project is still going. Most of the levels are done. Now it’s time to finished the backdrops and SFX, add the meta-elements (which I’m not looking forward to), and just spit and polish. Trying Affinity Designer for the backdrops, which feels more right for me.

    Auto-generated description: A graphic design interface displays a pixel art landscape with green hills and clouds against a blue sky. Auto-generated description: A pixelated video game screen features a knight character on a grassy platform landscape with a blue sky and clouds.
  • Some minor teething issues with my new headphones. While trying to turn off noise cancelling I pushed a button which paired it with someone’s device, and started hearing their music. Had to resort to getting the app, which doesn’t thrill me, but it’s better than randomly pressing buttons.

    Auto-generated description: A screenshot from a mobile app interface shows settings for a JBL Live 670NC device, including options for spatial sound, gestures, voice awareness, audio and video modes, and personal sound amplification.
  • Talked to the agents yesterday and it’s come back with this Android app. Primed the pump, as it were, by bookmarking a few posts in Quick Reads for the commute home. We’ll see if I’ll read them.

    Auto-generated description: Two mobile app screens display lists of article titles and detailed blog content, featuring topics like A Field Guide to Learning and The Silly Apps Graveyard.
  • πŸ“¦ Release

    Dequoter 0.1.9

    Initial release of Dequoter: a simple Boop-like text processor for MacOS. Continue reading β†’

  • πŸ“˜ Devlog

    Imagen

    A personal playground with image generation models (not related to Google’s Imagen model). Continue reading β†’

  • I think I’m coming round to liking passkeys, but they’ve still got quite a way to go, particularly in their UX. Tried enrolling a passkey for something in Vivaldi for Android. The presented modal was a little unclear as to what device I was actually enrolling. There wasn’t a clear “Passkey” option. Instead, in a menu of four items, I saw NFC card, or USB dongle as the first two. “This device” was the last one.

    Auto-generated description: A user interface screen with options to choose a device for saving a passkey, including NFC security key, USB security key, another device, or the current device.

    I tapped it and went through the prompts. It seemed like it produced a passkey, but when I tried to login, it wouldn’t present it as a login option. It offered something like “Use other device” or something, but nothing to suggest that it had a passkey on file.

    I did eventually enroll my phone the desktop browser. The QR code exchange worked surprisingly well, but again, it was unclear which option I actually wanted. I think the choice was “Use other device.” Use? What do you mean by “use?” Either “Enroll other device” or “Setup other device” would’ve be clearer.

    This could just be a Vivaldi/Chrome issue, but really, it would be nice for browser to refine this a little. The technical aspects of passkeys are amazing. It’s the UX that’s holding it back.

  • πŸ“˜ Devlog

    Other Project Updates

    A few updates of some other projects I worked on recently.

    Webtools saw some love as I needed some tooling made to make the icon easy to include in the Well Read Flutter project itself. Android expects the logo of a specific size, so I “commissioned” an Android Icon Resizer, which will take one or more PNG files, resize them to what Android expects, and prepare them in a ZIP that could be extracted at the route of the res/mipmap directory. It will also produce a small preview of the icon, rendering it in a circle so you can see how it looks on the device. It’s background savvy, layering the icon over the PNG with “background” in the filename.

    Continue reading β†’

  • πŸ“˜ Devlog

    gRPC Client - A Vibe-coded Client for Testing REST/gRPC Endpoints

    My current craving of vibe-coding various tools I need to do my job continues, with an attempt to build a REST/gRPC test client.

    This is motivated by my distaste with all the other clients I’ve tried. There’ve been a few, and I’ve been unhappy with each one. For one thing, they seem more heavyweight than my needs. I don’t know if this is just how they’re implemented, or it’s because the realm of HTTP request testing is complicated (It’s probably a bit of both).

    Continue reading β†’

  • πŸ“˜ Devlog

    Weiro - Categories, Pages, and Upload Editing

    Some more work on Weiro. Much of it is pretty mundane, mainly to get it to feature parity with other CMS’s out there. Yes, I know the existence of those other CMS’s make the entire project pointless. Doubly so when you consider that much of what I’m going to talk about was largely done by coding agents. It made me wonder whether it was worth writing this update at all. Well, it’s drafted up already so I may as well finish it off. At least one thing will get finished. Okay, enough wallowing in my self-doubt. What was added? Well, categories are now a thing. These can be defined in a new categories section and consist of a label, a slug, and a description. Going to /categories/<slug> will list all the posts with that category. Posts can be in zero or more categories, which can be selected from the edit post screen. Pretty simple stuff.

    Auto-generated description: A webpage displays a list of categories with their names, slugs, and post counts, along with navigation options like New Category and settings.
    The Categories section, where the user can manage categories.
    Auto-generated description: An online interface is displayed, showing fields to edit a category, including Name, Slug, and Description, with Save and Delete buttons.
    Editing a category.
    Auto-generated description: A blog post interface is displayed with a text editor on the left featuring a draft update, and categories on the right labeled Well Read.
    Selecting categories from within the edit post screen.
    Auto-generated description: A webpage titled Devlog displays categories with links to Weiro and Well Read, indicating it's under construction.
    The categories page as it appears on the published site.
    Auto-generated description: A webpage titled Devlog features a blog post about Weiro, a blogging CMS for hosting via Netlify, with an update dated 6th March 2026.
    The single category page.
    Another small thing added was pages. This allows the user to define “slash” pages, with the option of appearing in the nav bar, and can also be used to replace the home page, by setting the slug to / (the posts are still available at /posts). I do need to spend some more time figuring out how to organise the nav bar as I would also like to include things like redirects. I thinking of making that an extension of the pages model, but I’m not sure.
    Auto-generated description: A webpage is displayed showing a simple layout with options for creating a new page and a table with columns labeled Title, Slug, and Nav.
    List of pages of a site.
    Auto-generated description: A webpage editor is displaying text input fields for creating an About page with options for page settings and navigation.
    Editing a page. There’s only a single page type at the moment.
    Those two features were mainly done with the help of Claude Code, but I did build some stuff manually. The largest addition was the ability to do some edits on uploaded images. I’ve never been a fan of how Apple produces the shadows around windows: the margins are just too large. So I added a way to do this within Weiro itself.
    Auto-generated description: A web interface is displaying settings for editing a category in a blogging CMS.
    The edit upload feature.
    It’s pretty simple. Just imagine the filter section from any image editor, then remove all the other features of that editor. Yeah, it’s that simple. There’s no cropping, rotating, or anything else of that nature: just a bunch of “processors” that you can add to the image, with the sole one being a drop shadow. This is actually done server side using a simple file-based approach. When opening an image upload to edit, you spawn a session. Each session has a JSON file maintaining the processors, plus a series of cached image files of all the intermediate steps along the processing chain. When a new processor is added, a hash is computed with the processor’s properties, and if they change, the cached image will be regenerated. The processor includes the hash of the previous step too, so that if processors further up the chain are modified or remove, they will force a recompute of subsequent images. The user is then served the last image in the chain. This differs from the image processor in Blogging Tools, which performed the transformations within the browser itself. The motivation there was to avoid the need of a slow upload of the image, but it came with the performance cost associated with doing the processing within the browser itself. WASM might be fast, but it’s not that fast[^fast]. Since the upload in Weiro is already uploaded, I figured it would be quicker to just do the image processing server side. My hope is that the computing power the server has access to would offset the time it takes to download the image. So far this seems to be the case. Finally, I did some minor work around the UI, adding a site chooser and a much needed way to open the published site from the admin section. So this project is still coming along, surprisingly. It’s probably the furthest I’ve got in a blogging CMS that I actually want to use. I do have a large list of things I want to add to it, and I certainly need to do something with the design of the actual site. It’s all a question of whether I’m interested in spending time on it. [^fast]: Although to be fair, I think the slow down comes from encoding the processed image as a data URI and setting it as the source of an img tag.

    Continue reading β†’

  • πŸ“˜ Devlog

    Well Read - One Week Later

    It’s been a week since I learnt about Inkwell’s API and got an agent to start work on an RSS reader. Since then, Well Read has been in a state of flux, as I ask for agents to make changes to the interaction and layout. I think I’ve got it in a pretty good state now, certainly in a state that works well for me.

    Auto-generated description: Three phone screens display different interfaces, including email and note-taking applications with visible text and icons.
    The earliest screenshots of Well Read, taken on 11 March 2026

    The Today and Recent tabs still retain their original behaviour, although the idea of using 6:00 pm of the previous evening as the cutoff for “todays’ posts” was a good one. Being where I’m located in the world, many people I follow publish posts while I’m asleep. I recently added a tab for bookmarks which uses Micro.blog’s bookmarking feature. Any post can be added as a bookmark, and since there’s no real way to get to a post once it drops out of the Recent tab (well, apart from opening it up in Inkwell proper), I have in mind this feature to act as a place to stash posts for later. So I tried making bookmarks as easy to add as possible. Sliding aside the item in the feed list will reveal a bookmark action, as will the overflow menu in the feed viewer.

    Continue reading β†’

  • On my commute. I wanted “Mark all as Read” added to Well Read. Cracked open the coding agent to make the change, push it to Forgejo to build the release, which I side loaded onto my phone. By the time I arrived at my station, it was there. Pretty nice!

    Auto-generated description: A mobile email app interface displays messages from Daring Fireball and Robert Birming, alongside a menu with options to mark all as read, refresh, and sign out.
  • πŸ“˜ Devlog

    Well Read - An Inkwell Client for Android

    When Manton mentioned that Inkwell has an API, I… um… may have vibe-coded an Android client.

    Auto-generated description: Two smartphone screenshots display a reading list with articles and a detailed view of a specific article quoting John Carmack.

    It’s called “Well Read”, which is not a great name but better than “Inkwell Client” which was the working title. Much like Inkwell, it follows the river approach to RSS. There’s a Today tab and Recent tab, each showing a portion of the entries in reverse chronological order. Today shows all the posts from today, plus the last 6 hours of yesterday. The motivation here is that this will be the tab you’ll be spending your time, with posts aging out to recent over time. There’s no Fading tab: all posts older than about half a week fall out of the app. And I’m not sure if I’m going to add one. There’s only a few feeds that I want to catch up on if I miss their post, and since I’m using NetNewsWire and Inkwell, I’m pretty sure I’ll catch them later.

    Continue reading β†’