<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">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-03-20T21:46:23-07: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">Pockets App: Introducing the Older One to Salaries and Budgets</title><link href="https://standardpixel.com/blog/2026/03/20/pockets-app-introducing-the-older-one-to-salaries-and-budgets.html" rel="alternate" type="text/html" title="Pockets App: Introducing the Older One to Salaries and Budgets" /><published>2026-03-20T11:00:00-07:00</published><updated>2026-03-20T11:00:00-07:00</updated><id>https://standardpixel.com/blog/2026/03/20/pockets-app-introducing-the-older-one-to-salaries-and-budgets</id><content type="html" xml:base="https://standardpixel.com/blog/2026/03/20/pockets-app-introducing-the-older-one-to-salaries-and-budgets.html"><![CDATA[<p>When my oldest daughter was five we bought her three piggy banks. One said “Spend,” one said “Give,” one said “Save.” My wife’s best friend was raised with the discipline of saving early and it served her well through life. We thought if we started our daughter with this framework young enough, the habit would stick before she had any reason to question it.</p>

<p>In reality she did not immediately make the connection between the three pigs. At five she did not yet understand the value of money, and splitting her allowance into three places did not make sense to her. Why would it. She just wanted to buy things.</p>

<p>A good surprise came from the “Give” bucket. Letting her use that money to choose a charity ended up being pretty rewarding for her. I realized this was an unexpected way she could start to understand the value of setting aside some of her money for something other than buying stuffies. The other problem was simpler but more persistent. She would want to buy something when we were out and we would not have brought her “Spend” money. I would usually tell her I was going to use my money and we would pay me back from the piggie bank later. I’d always forget.”</p>

<p>She was starting to get wise to this loophole. I needed to keep some real accounting to teach her anything. So I decided to look for an app where I could keep track of these transactions.</p>

<p>Most every app I could find in the App Store for managing children’s allowances was a thinly veiled attempt to get me to create a prepaid credit card to give to my child. That is not what I wanted. I wanted an app that provides a simple service for a fee: tracking categories of allowance for a child. Not a “free app” that preys on my daughter or myself.</p>

<p>There was one called RoosterMoney which was perfect. It offered the ability to create an allowance and break it into multiple buckets. She could have it on her iPad and see what she had to spend without edit access or weird ads. I could manage from my phone. Her money was not in the pigs anymore (sad because they were cute). It was basically in an app full of IOUs now. Maybe not as cute, but more trackable and easy for her to follow.</p>

<p>The harder thing to explain was saving. Unlike the “give” category, “save” was just a bucket you’re meant to forget about. Eventually I had the idea to create a custodial account in E-Trade for her. This is an account I maintain alongside my other investment accounts, but when she is of age she will own it fully. When she accrues enough in her “Save” bucket, I buy her some ETF shares. Now she has a number she can watch go up now and then, which helps her understand the value of the “Save” category in a way that a piggy bank sitting on a shelf never could.</p>

<p>Then the rooster died. RoosterMoney announced it had been bought by a local bank in England and they were shutting down access to people in the US. Upside, they refunded my money. Downside, the app was gone. I made a spreadsheet and my daughter and I used that as a replacement. It worked. It was not fun.</p>

<p>So I built Pockets.</p>

<p>Pockets takes everything we had in RoosterMoney but dials it into my specific needs. It is focused on parents administering allowances for children with multiple buckets. It auto-accrues over time based on your specific allowance amount and period for each child. Ours is five dollars every Sunday. It tracks transactions so I can look back and remind her why there is a stuffy-shaped hole in her “Spend” bucket.</p>

<p>What is next: a share feature that gives the child a way to see the values of their buckets without edit access. A way to sync with apps like YNAB so I can account for what I have promised to my child. And an iOS app so the spreadsheet days are fully behind us.</p>

<p>If you want to check it out, Pockets is at <a href="https://pockets.standardpixel.com">pockets.standardpixel.com</a>.</p>]]></content><author><name>Eric Gelinas</name></author><summary type="html"><![CDATA[When my oldest daughter was five we bought her three piggy banks. One said “Spend,” one said “Give,” one said “Save.” My wife’s best friend was raised with the discipline of saving early and it served her well through life. We thought if we started our daughter with this framework young enough, the habit would stick before she had any reason to question it.]]></summary></entry><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-26T10:00:00-08:00</published><updated>2026-02-26T10:00:00-08: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-23T10:00:00-08:00</published><updated>2026-02-23T10:00:00-08: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-14T10:00:00-08:00</published><updated>2026-02-14T10:00:00-08: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>