<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://standardpixel.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://standardpixel.com/" rel="alternate" type="text/html" /><updated>2026-02-26T19:14:54+00:00</updated><id>https://standardpixel.com/feed.xml</id><title type="html">StandardPixel.com</title><subtitle>Curation of things by Eric Gelinas</subtitle><author><name>Eric Gelinas</name></author><entry><title type="html">Rolling my own bot for fun and ~not getting hacked~</title><link href="https://standardpixel.com/blog/2026/02/26/rolling-my-own-bot.html" rel="alternate" type="text/html" title="Rolling my own bot for fun and ~not getting hacked~" /><published>2026-02-26T18:00:00+00:00</published><updated>2026-02-26T18:00:00+00:00</updated><id>https://standardpixel.com/blog/2026/02/26/rolling-my-own-bot</id><content type="html" xml:base="https://standardpixel.com/blog/2026/02/26/rolling-my-own-bot.html"><![CDATA[<p>There was a moment a few weeks ago when I was reading about <a href="https://github.com/openclaw/openclaw">OpenClaw</a> and wondered if this was a moment like when I first learned about <a href="https://claude.com/claude-code">Claude Code</a>. It wasn’t. I kept watching to see what I was missing. Here was this open source project with a hundred thousand GitHub stars, people saying it cleared their inbox, booked their flights, fought their insurance company. Yet, all sorts of people were blogging, LinkedIn-ing (is that a thing?), and generally talking about it. I heard it mentioned in NY Times and Verge podcasts.</p>

<p>Then I read a <a href="https://blogs.cisco.com/ai/personal-ai-agents-like-openclaw-are-a-security-nightmare">Cisco blog post about its security risks</a>.</p>

<p>A third-party skill in the <a href="https://github.com/openclaw/openclaw">OpenClaw</a> ecosystem was quietly exfiltrating data and running prompt injection attacks on its users. Not theoretical. Not a proof of concept. It was doing it. And the skill marketplace had no meaningful vetting process to stop it from happening again.</p>

<p>That made me slow down and think about what <a href="https://github.com/openclaw/openclaw">OpenClaw</a> is. It is an agent with shell access, browser control, and the ability to send email on your behalf, running on a loop, connected to a community-maintained skill library (.md prompt files) you did not write and probably have not read. That is a lot of trust to extend to a project that is, at the time of this writing, a few months old. I think this was a cool thing to have built and shared. The AI wakes up and acts without being prompted? genuinely interesting. But interesting and ready to run on my machine with access to my accounts are two different things.</p>

<p>So what is here that I can’t roll on my own? A lot if I needed everything it does. But I don’t and likely nobody needs everything it does.</p>

<p>So here is what I decided to build…</p>

<p>The stack is not exotic. A <a href="https://slack.dev/bolt-js/">Slack Bolt</a> app handles the interface. I already live in Slack, so there is no new surface to learn. It’s on my phone and my desktop. <a href="https://lmstudio.ai/">LM Studio</a> runs a local model (OpenAI GPT OSS 20b is my go-to), which means nothing leaves my machine. A set of tools I wrote myself covers the things I actually need: summarizing my email, checking my calendar, updating a task list, flipping a few switches in the Home App. Cron jobs handle the proactive piece. The AI sends me a morning briefing, monitors a few things I care about, nudges me when something needs attention. <a href="https://obsidian.md/">Obsidian</a>, which I was already using, acts as the memory layer. Context gets written out as Markdown files the same way I was already taking notes.</p>

<p>The whole thing took a weekend to get working and another weekend to get working well. <a href="https://claude.ai/">Claude</a> wrote a lot of it.</p>

<p>What I gave up compared to <a href="https://github.com/openclaw/openclaw">OpenClaw</a> is a lot I guess. I do not have fifty integrations. I cannot talk to it over WhatsApp (but I only use that to talk to the school parents group anyway). The skills marketplace is just me, adding tools when I need them. For some people that trade-off would not be worth it. If you want a robot assistant that can do almost anything out of the box, <a href="https://github.com/openclaw/openclaw">OpenClaw</a> is probably right for you and you should read their security documentation carefully before you set it up.</p>

<p>But I do not need fifty integrations. I need maybe eight. And the eight I have, I understand completely. I know exactly what they can do and what they cannot. There is no surface in my setup for a malicious skill to land on because there is no skill marketplace. The blast radius of something going wrong is small and I can see it clearly.</p>

<p>If you want to do something similar, the pieces are all there. <a href="https://slack.dev/bolt-js/">Slack Bolt</a>, <a href="https://lmstudio.ai/">LM Studio</a>, cron, and whatever note-taking app you already use as a memory layer. The interesting part is not the plumbing. The interesting part is deciding what you actually want it to do. You also get to do a fun project.</p>]]></content><author><name>Eric Gelinas</name></author><summary type="html"><![CDATA[There was a moment a few weeks ago when I was reading about OpenClaw and wondered if this was a moment like when I first learned about Claude Code. It wasn’t. I kept watching to see what I was missing. Here was this open source project with a hundred thousand GitHub stars, people saying it cleared their inbox, booked their flights, fought their insurance company. Yet, all sorts of people were blogging, LinkedIn-ing (is that a thing?), and generally talking about it. I heard it mentioned in NY Times and Verge podcasts.]]></summary></entry><entry><title type="html">A new way to find bands the old way</title><link href="https://standardpixel.com/blog/2026/02/23/organic-music-discovery.html" rel="alternate" type="text/html" title="A new way to find bands the old way" /><published>2026-02-23T18:00:00+00:00</published><updated>2026-02-23T18:00:00+00:00</updated><id>https://standardpixel.com/blog/2026/02/23/organic-music-discovery</id><content type="html" xml:base="https://standardpixel.com/blog/2026/02/23/organic-music-discovery.html"><![CDATA[<p>There was a time in my life when I went to a lot of shows. Not just to see the headliner, the whole night. I would show up early enough to catch whoever was opening, because that was how you found new music. You liked a band, you went to see them, and you walked out having discovered two more. Sometimes I wouldn’t make it to see the headliner because I was satisfied with the show. I remember that happening when I discovered the band <a href="https://music.apple.com/us/artist/minus-the-bear/13742367">Minus the Bear</a>. I was so happy with their performance opening that I just went home afterwords.</p>

<p>That doesn’t happen as much for me now. I still love music, but I just don’t have time to get out to shows these days. So I end up relying on <a href="https://www.kcrw.com">KCRW</a> (which is excellent if you don’t listen to them) and streaming recommendations (which are fine). I miss that feeling of finding a small local unsigned (possibly not even on Apple Music yet) band who managed to get on the bill with a band who is signed.</p>

<p>So I built <a href="https://bands.standardpixel.com">bands.standardpixel.com</a>.</p>

<p>Give it a band or artist name and it maps out the bands they have shared a bill with. The theory is: independent bands have more say in who they tour with. When a festival organizer books around an artist you love, they are making a curatorial choice. These are human decisions, not statistical ones. Not better, but different. Another way of finding.</p>

<p>It is not perfect. Plenty of bands end up on the same bill for reasons that have nothing to do with sound. But hey, it’s good enough for rock and roll.</p>

<p>Under the hood it is built with Next.js and pulls data from <a href="https://musicbrainz.org">MusicBrainz</a>, which is a gem of a data source. When you search for an artist, a Python script queries the MusicBrainz API to find touring relationships, then caches the results in PostgreSQL so you are not waiting two minutes every time someone searches for a band. A WebSocket connection gives you real-time progress while it works. MusicBrainz is generous but it can take time to query within their rate limit. This allows me to keep the user updated on progress and I respectfully get data from MusicBrainz.</p>

<p>The results come back as a network graph you can explore, with Apple Music players embedded so you can listen immediately to what you find (if they are on there). Each artist gets a shareable URL so if you find something good you can pass it along.</p>]]></content><author><name>Eric Gelinas</name></author><summary type="html"><![CDATA[There was a time in my life when I went to a lot of shows. Not just to see the headliner, the whole night. I would show up early enough to catch whoever was opening, because that was how you found new music. You liked a band, you went to see them, and you walked out having discovered two more. Sometimes I wouldn’t make it to see the headliner because I was satisfied with the show. I remember that happening when I discovered the band Minus the Bear. I was so happy with their performance opening that I just went home afterwords.]]></summary></entry><entry><title type="html">Running five tasks at once with Claude Code and git worktrees</title><link href="https://standardpixel.com/blog/2026/02/14/welcome-to-my-blog.html" rel="alternate" type="text/html" title="Running five tasks at once with Claude Code and git worktrees" /><published>2026-02-14T18:00:00+00:00</published><updated>2026-02-14T18:00:00+00:00</updated><id>https://standardpixel.com/blog/2026/02/14/welcome-to-my-blog</id><content type="html" xml:base="https://standardpixel.com/blog/2026/02/14/welcome-to-my-blog.html"><![CDATA[<p>I’ve automated my dev workflow with a zsh function that ties together git worktrees + Linear + Claude Code. One command now: parses Linear ticket from branch name → creates worktree → auto-claims ticket via GraphQL → copies dev assets (node_modules, .env, etc) → opens Claude Code and Zed.</p>

<p>I can tackle 1-3 bug fix, prototype, or otherwise simple tasks concurrently (sometimes up to 5 for straightforward work). After months of working with this I realized opening Zed automatically was just a security blanket. Removed it from the automation - now I only launch it with <code class="language-plaintext highlighter-rouge">!zed .</code> from Claude’s prompt when actually needed.</p>

<p>This lets me keep all concurrent worktrees visible on screen. It can be draining to context-switch between multiple AI-assisted tasks. The tricky part is predicting which tasks work well in this “AI batch mode” vs requiring traditional focused coding. Some tickets that look simple need deep architectural thinking, while complex-seeming ones are just tedious work Claude handles beautifully.</p>

<p>Still learning how to describe and categorize work by AI-suitability rather than just complexity and communicate this to stakeholders.</p>]]></content><author><name>Eric Gelinas</name></author><summary type="html"><![CDATA[I’ve automated my dev workflow with a zsh function that ties together git worktrees + Linear + Claude Code. One command now: parses Linear ticket from branch name → creates worktree → auto-claims ticket via GraphQL → copies dev assets (node_modules, .env, etc) → opens Claude Code and Zed.]]></summary></entry></feed>