<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://mamuso.dev</id>
    <title>mamuso.dev</title>
    <updated>2026-10-02T03:46:15.902Z</updated>
    <generator>mamuso.dev</generator>
    <author>
        <name>Manuel Muñoz Solera</name>
        <email>mamuso@mamuso.net</email>
    </author>
    <link rel="alternate" href="https://mamuso.dev/"/>
    <link rel="self" href="https://mamuso.dev/feed.xml"/>
    <subtitle>A (Mostly) Personal Journal</subtitle>
    <logo>https://mamuso.dev/images/favicon.png</logo>
    <icon>https://mamuso.dev/images/favicon.png</icon>
    <rights>2026, mamuso</rights>
    <entry>
        <title type="html"><![CDATA[Imperfection]]></title>
        <id>https://mamuso.dev/post/2026-09-30-imperfection</id>
        <link href="https://mamuso.dev/note/imperfection"/>
        <updated>2026-09-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>If you&#39;re reading this, I regret to inform you that I finally published an update to my personal site. I guess I made it. This is a personal site, and I&#39;ve seen the traffic. Nobody was waiting for this. And I had a blast anyway.</p>
<p>Fair warning, this is a long post. I needed something to space out the images.</p>
<hr>
<h3>The Shelf</h3>
<p>A few months ago, I pitched a couple of friends this idea of turning my site into a shelf of fake game cartridges, one per job. They were very supportive, which is exactly what you don&#39;t want when you&#39;re trying to talk yourself out of something.</p>
<p>None of this is original. Around 2008, maybe 2009, I spent a lot of time on the YayHooray forum, where I found the <a href="https://famicase.com/chronicle/index.html">My Famicase Exhibition</a>. A retro game shop in Tokyo called <a href="https://super-meteor.com/">METEOR</a> invites designers to make labels for games that don&#39;t exist, and picks the best for a show. I never submitted anything, so technically I&#39;m undefeated. Still, for years, every time a Famicase label popped up on Dribbble or Behance, I had to stop and look. I guess it is like running into an ex who&#39;s doing really well. <a href="https://famicase.com/">The exhibition is still going</a>.</p>
<figure>
  <img src="https://mamuso.dev/assets/posts/imperfection-myfamicaseexhibition.png" alt="Sixteen My Famicase Exhibition entries: colorful Famicom cartridges with labels for games that do not exist" width="2398" height="1634" loading="lazy" />
  <figcaption>A few Famicase entries</figcaption>
</figure><p>Anyway, at the time I was too busy, so the cartridges went on the shelf where I keep the ideas I&#39;ll never work on. It&#39;s a big shelf.</p>
<hr>
<h3>Creative therapy, but with shaders</h3>
<p>Then it was the end of June, my last day at what I considered the best job I&#39;d ever have. I was in London, surrounded by family and friends who were thrilled for me, and I was the only one in the room not having a great time. I felt like I was walking out on an incredible team. I kept replaying months of decisions in my head, and I couldn&#39;t shake the feeling that I&#39;d let a bunch of folks down.</p>
<p>And to be clear, I was (am!) extremely lucky. I had an incredible job waiting for me, and I knew it. My brain just didn&#39;t care, and I couldn&#39;t feel any of it yet.</p>
<p>I had time on my hands and a perfectly good idea collecting dust on a shelf. So I started giving it thirty minutes every night, sometimes an hour. Mostly, I wanted to clear my head and remember what making something for fun felt like.</p>
<hr>
<h3>Felt cute, might share later</h3>
<p>Those nights added up, and one day the cartridge escaped Blender and landed on a web page. It was technically lacking and about as stiff as a LinkedIn post, but it was &quot;done.&quot;</p>
<p>I tried to make a fun label for each job. Some were easy. I&#39;m very proud of the <a href="https://archive.org/details/windows-95_202208">Windows 95 floppy disk reference</a>. Then there was Azure DevOps, which is not a phrase that sounds fun in any font.</p>
<p>I spent nights trying to make plastic look like plastic. I even tried animating them, which in my head was a Pixar short and on screen was very much a PowerPoint transition.</p>
<p>None of it was exceptional, which made it very fun and easy to share. Nobody expects anything from a work in progress, including me.</p>
<Gallery layout="row" columns="2" caption="Labels, labels, labels">
  <img src="https://mamuso.dev/assets/posts/imperfection-blender.png" alt="The model in blender" width="1920" height="1080" loading="lazy" />
  <img src="https://mamuso.dev/assets/posts/imperfection-labels.png" alt="Famicom cartridges with labels for past jobs" width="1920" height="1080" loading="lazy" />
  <video src="https://mamuso.dev/assets/posts/imperfection-labels.mp4" alt="Label mocks" width="1920" height="1080" loading="lazy"></video>
  <video src="https://mamuso.dev/assets/posts/imperfection-animated.mp4" alt="Animated labels" width="1280" height="720" loading="lazy"></video>
</Gallery><p>Staring at the same little idea every night for two weeks makes it a lot less exciting (I think this is true of most things). I also knew that making it actually run well on a real website, on a real phone, for real people, was going to take way more nights than I had in me.</p>
<p>On the other hand, a fake Famicom cartridge is a pretty good way to announce a real job. All that work finally had somewhere to go.</p>
<Gallery layout="row" width="text" caption="Joined Cursor!">
  <video src="https://mamuso.dev/assets/posts/imperfection-cursor.mp4" alt="Joining Cursor" width="1920" height="1080" loading="lazy"></video>
</Gallery><hr>
<h3>Tilted</h3>
<p>If you overshare long enough and your friends are kind enough, you eventually run out of excuses. So I gave in and started turning the cartridges into the hero of the site.</p>
<p>This part was not glamorous. Most nights went into making the model smaller and fighting the renderer, which fought back harder than I expected and, honestly, won most rounds.</p>
<p>I opened and closed those cartridges so many times (to test something, to debug something, to test the fix for the thing I&#39;d just debugged) that I started to resent them, which is a weird way to feel about your own homepage.</p>
<Gallery layout="row" caption="The analog version already had better spacing">
  <img src="https://mamuso.dev/assets/posts/imperfection-analog.jpg" alt="Analog version" width="1920" height="1280" loading="lazy" />
  <video src="https://mamuso.dev/assets/posts/imperfection-famicordion.mp4" alt="The Famicordion" width="800" height="720" loading="lazy"></video>
</Gallery><p>So I added a little random rotation, just enough that every click landed a bit differently, mostly so I could stand to look at them. That was supposed to be it. Instead, I started to obsess over giving everything a slightly different angle, a little wobble. Death to the straight line. Make it random.</p>
<p>Then Cursor joined SpaceXAI, which, among many more important things, meant new stickers! Have you ever tried to place a sticker on top of another? It&#39;s always a little off. On the cartridge, the black sticker never quite covers the colorful one underneath, it misses differently every time, and I LOVE it.</p>
<p>The more imperfect it got, the more it felt like mine (and like me).</p>
<Gallery layout="row" columns="2">
  <video src="https://mamuso.dev/assets/posts/imperfection-mamuso.mp4" alt="Hero" width="1330" height="720" loading="lazy"></video>
  <img src="https://mamuso.dev/assets/posts/imperfection-xai.png" alt="xAI imperfection" width="1164" height="1164" loading="lazy" />
  <img src="https://mamuso.dev/assets/posts/imperfection-frosted.jpg" alt="Frosted materials" width="1920" height="1080" loading="lazy" />
</Gallery><hr>
<h3>Laptop first, laptop second, laptop third</h3>
<p>I&#39;d love to tell you I designed this mobile first. I did not. Then one night, weeks into the project, I opened it on my phone and had a small, private crisis.</p>
<p>The composition that looked so good on a laptop did not survive being turned vertical. And it had to work with thumbs, which are a lot less precise and a lot more impatient than a mouse. Tap to open, swipe to the next one, and please, whatever you do, don&#39;t hijack the scroll.</p>
<p>Once I had it working, the most obvious feature in the world became impossible to ignore. If you grew up with a Nintendo, and even if you didn&#39;t, you know the ritual. The game doesn&#39;t start, you pull the cartridge out, you blow on it like it&#39;s a birthday cake, you put it back in, and you believe. Everybody did it, nobody remembers who taught them, and it (probably) never helped. <a href="https://x.com/johnbai/status/2097368445616591278">A few people</a> pointed out that the site should let you do it too, and they were right.</p>
<p>So, on your phone, open a cartridge, long-press it, allow the microphone (nothing gets recorded or sent anywhere, I promise), and blow. The cartridge tilts back and shakes in the wind. Yelling at it works too, which is more than you can say for most software. The results are about as scientific as they were in 1988.</p>
<Gallery layout="row" columns="2">
  <video src="https://mamuso.dev/assets/posts/imperfection-mobile.mp4" alt="Mobile" width="720" height="720" loading="lazy"></video>
  <video src="https://mamuso.dev/assets/posts/imperfection-mobile-2.mp4" alt="Cartridges on mobile" width="1280" height="720" loading="lazy"></video>
</Gallery><hr>
<h3>Paper cuts</h3>
<p>I&#39;m obsessed with photography, so naturally I started the photo gallery the way I start anything I&#39;m a little nervous about, which is by making it extremely boring. A grid, some stacks. Very respectable. It looked like the photo section of a hotel website.</p>
<p>But then I got drunk on view transitions. And while I was at it, I worked on yet another shader so the little info card next to each photo feels like actual paper. A bit of grain, a crease here, a folded corner there, a dent from who knows what, all slightly different for every photo. Nobody will ever notice it, and I think about it daily.</p>
<p>When I shared it, the feedback was clear. It needed to feel <a href="https://x.com/goncy/status/2097006011961749552?s=20">more tactile</a>, like a pile of real prints. Now you can pick the prints up, drag them around, and leave them wherever you want.</p>
<p>It was a really good time.</p>
<Gallery layout="row" columns="2">
  <video src="https://mamuso.dev/assets/posts/imperfection-stack.mp4" alt="Photo stacks" width="1630" height="1400" loading="lazy"></video>
  <video src="https://mamuso.dev/assets/posts/imperfection-view-transitions.mp4" alt="Gallery transitions" width="1040" height="720" loading="lazy"></video>
  <video src="https://mamuso.dev/assets/posts/imperfection-photo-module-v1.mp4" alt="Photo module home exploration" width="1190" height="720" loading="lazy"></video>
  <video src="https://mamuso.dev/assets/posts/imperfection-photo-module-final.mp4" alt="Photo module home final" width="1762" height="720" loading="lazy"></video>
</Gallery><hr>
<h3>Bike shedding and yak shaving</h3>
<p>You&#39;ve probably figured this out by now, but this site has been done for a while.</p>
<p>I started to work on it to stretch some creative muscles and keep my head busy, and it worked a little too well, because once it was done, the fun part was over. It&#39;s like getting to the last two episodes of a show you love and starting to ration them. One a week, max, and only if you&#39;ve earned it.</p>
<p>So I did what any reasonable person would do, which is invent reasons to keep going.</p>
<p>Splitting photos and notes into their own pages exposed something embarrassing. I hadn&#39;t written anything on this site in two years. Two! The notes section looked like an apartment where someone had clearly moved out and left the lights on. The least I could do was make the gap look intentional.</p>
<Gallery width="text" layout="row">
  <img src="https://mamuso.dev/assets/posts/imperfection-left-blank.png" alt="intentionally left blank" width="2004" height="344" loading="lazy" />
</Gallery><p>Then the &quot;more&quot; links <a href="https://x.com/pablostanley/status/2100424452362416429">needed to be funnier</a>, so I made them funnier.</p>
<p>The footer looked a little sad, so now it shows the last song I listened to. You can judge my design and my music taste without clicking a thing.</p>
<Gallery width="text" layout="row">
  <video src="https://mamuso.dev/assets/posts/imperfection-music.mp4" alt="Footer showing the last song I listened to" width="1200" height="720" loading="lazy"></video>
</Gallery><p>And then, of course, OG cards, the little preview image that shows up when you share a link. No respectable site ships without proper OG cards, right? RIGHT?</p>
<img src="https://mamuso.dev/assets/posts/imperfection-og-images.png" alt="OG images" width="2396" height="1332" loading="lazy" /><p>Eventually, I ran out of excuses. Again.</p>
<p>Making things imperfect was so much fun that I&#39;m a little sad it&#39;s over. The cartridges finally came off the shelf, which means there&#39;s an empty spot on it now, and I&#39;m trying very hard not to look at it.</p>
<p>If anything on this site stops working, you know what to do.</p>
<hr>
<details>
  <summary>The whole build, in tweets</summary>
  <ol>
    <li>Jul 6 · <a href="https://x.com/mamuso/status/2073980800723538214">work / play</a></li>
    <li>Jul 7 · <a href="https://x.com/mamuso/status/2074347034753339804">I may have been a little too excited for this one 😂</a></li>
    <li>Jul 8 · <a href="https://x.com/mamuso/status/2074877542407033270">Trying something a little different for AzDo</a></li>
    <li>Jul 9 · <a href="https://x.com/mamuso/status/2075173680825724960">Old game! 10/10, would absolutely play again.</a></li>
    <li>Jul 12 · <a href="https://x.com/mamuso/status/2076206249927139444">A few labels still need work, but it’s really starting to come together.</a></li>
    <li>Jul 13 · <a href="https://x.com/mamuso/status/2076521410651128255">Animated labels sounded way cooler in my head…</a></li>
    <li>Jul 14 · <a href="https://x.com/mamuso/status/2077081103475900591">Joining Cursor</a></li>
    <li>Aug 19 · <a href="https://x.com/mamuso/status/2089971237812568274">nothing says wip like a trusty magenta border</a></li>
    <li>Aug 21 · <a href="https://x.com/mamuso/status/2090592499811459127">the analog version already has better spacing</a></li>
    <li>Aug 21 · <a href="https://x.com/mamuso/status/2090830808902942973">the famicordion</a></li>
    <li>Aug 24 · <a href="https://x.com/mamuso/status/2091917464171159796">sticker on sticker</a></li>
    <li>Aug 28 · <a href="https://x.com/mamuso/status/2093381716484538724">Frosted materials</a></li>
    <li>Sep 2 · <a href="https://x.com/mamuso/status/2095184248466772114">getting my website ready 35m at a time</a></li>
    <li>Sep 7 · <a href="https://x.com/mamuso/status/2096995450201292855">page transitions and stacks</a></li>
    <li>Sep 8 · <a href="https://x.com/mamuso/status/2097364642800787532">it needs to work on mobile</a></li>
    <li>Sep 9 · <a href="https://x.com/mamuso/status/2097550338878513302">Goncy’s stack idea</a></li>
    <li>Sep 9 · <a href="https://x.com/mamuso/status/2097720505587601623">take the view transitions API away from me, please</a></li>
    <li>Sep 10 · <a href="https://x.com/mamuso/status/2098090420752531791">the QA department hard at work</a></li>
    <li>Sep 14 · <a href="https://x.com/mamuso/status/2099641931102101990">adding this photo module so you can immediately undo my design decisions</a></li>
    <li>Sep 15 · <a href="https://x.com/mamuso/status/2099901814108008549">intentionally left blank (twice)</a></li>
    <li>Sep 16 · <a href="https://x.com/mamuso/status/2100257933217181892">say more</a></li>
    <li>Sep 21 · <a href="https://x.com/mamuso/status/2102069120519090357">I think this is the one</a></li>
    <li>Sep 23 · <a href="https://x.com/mamuso/status/2102793887006024167">you can now* judge my design and music taste in a single scroll</a></li>
    <li>Sep 27 · <a href="https://x.com/mamuso/status/2104278087093682638">1200×630 png has been achieved internally</a></li>
  </ol>
</details>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Added label support to weekly-update-action]]></title>
        <id>https://mamuso.dev/post/2023-12-22-label-support-weekly-update-action</id>
        <link href="https://mamuso.dev/note/2023-12-22-label-support-weekly-update-action"/>
        <updated>2023-12-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>A few teams at GitHub use <a href="https://github.com/mamuso/weekly-update-action">weekly-update-action</a> for their asynchronous weekly check-ins. I added support for labeling discussions, so those updates can be organized with labels.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Design advice from Bill Hader]]></title>
        <id>https://mamuso.dev/post/2023-08-23-design-advice-from-bill-hader</id>
        <link href="https://mamuso.dev/note/2023-08-23-design-advice-from-bill-hader"/>
        <updated>2023-08-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>A few days ago, I came across <a href="https://youtube.com/clip/Ugkxk8No7rSd3qel18hSzw5_uDMHQQzjre78?si=8YwW1NIuLPzQkbTk">this video</a> of Bill Hader. I wish I could remember who shared it with me.</p>
<div class="video-embed">
<iframe class="video" src="https://www.youtube.com/embed/766IQ3nkR3Y?si=oQU4IEqaDh6EASSL&amp;clip=Ugkxk8No7rSd3qel18hSzw5_uDMHQQzjre78&amp;clipt=ELqfJhjp3yk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div><p>He talks about writing but touches on a couple of topics that seem transferable and relevant to design:</p>
<ul>
<li><strong>Fail fast:</strong> find out what isn’t working while there’s still room to change direction. In design, sharing early and often can help with that. I’d add: explore wide before you go deep.</li>
<li><strong>Giving feedback:</strong> focus on explaining what isn’t working and why. Hold off on suggesting solutions unless people specifically ask for suggestions.</li>
<li><strong>Receiving feedback:</strong> synthesize it and reflect on it. When others suggest solutions, use your judgment instead of accepting them outright.</li>
</ul>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cozy]]></title>
        <id>https://mamuso.dev/post/2023-08-21-cozy</id>
        <link href="https://mamuso.dev/note/2023-08-21-cozy"/>
        <updated>2023-08-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>Of all the social apps I’ve tried recently, Retro is the one I find most interesting. It has a low barrier to posting and encourages a small following. It limits how much followers can see unless you share a key with them and nudges you to participate instead of just lurking.</p>
<p><img src="https://mamuso.dev/assets/posts/retro.png" alt="Retro"></p>
<p>It’s not flashy, but it’s beautiful, and I enjoy the close-friends vibe: you get to see everyday life, kids and all. It feels like a private photo journal: focused, delightful, no hashtags or filters.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Maxime's "Training AI image models" talk]]></title>
        <id>https://mamuso.dev/post/2023-07-06-training-your-ai-model</id>
        <link href="https://mamuso.dev/note/2023-07-06-training-your-ai-model"/>
        <updated>2023-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>I finally made time to watch <a href="https://www.youtube.com/watch?v=9nniwr-7Em8">Maxime&#39;s &quot;training your AI image model&quot; talk</a>. He explains the process with clear, practical examples. I&#39;m looking forward to trying it out myself.</p>
<iframe src="https://www.youtube.com/embed/9nniwr-7Em8" title="Maxime's Training AI image models talk" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe><p>★★★★★ – will watch it again.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Non-AI prompts]]></title>
        <id>https://mamuso.dev/post/2023-07-05-non-ai-prompts</id>
        <link href="https://mamuso.dev/note/2023-07-05-non-ai-prompts"/>
        <updated>2023-07-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/IMG_1055.jpeg'/><p>I have been trying to be more intentional about the photos I take, and I always go out with a few topics in mind. I’m obsessed with the beauty of decay: old buildings, abandoned places and cars, and rusty shop signs. I&#39;m also a sucker for symmetry.</p>
<p>After a few unsuccessful attempts to get the kids interested in photography, I’ve been enjoying <a href="https://aperture.org/books/eyes-open-24-photography-ideas-for-curious-kids/">this book</a> of photo prompts for kids. The projects are approachable, the examples are fantastic, and the layout is beautiful. The kids are already working on a photo-alphabet!</p>
<div className='photo-gallery'>
<img alt="Same but different" src="https://mamuso.dev/assets/posts/IMG_1056.jpeg"/>
<img alt="Portraits in disguise" src="https://mamuso.dev/assets/posts/IMG_1057.jpeg"/>
</div><p>Aperture also publishes <a href="https://aperture.org/books/educational/seeing-things-a-kids-guide-to-looking-at-photographs/">&quot;Seeing things&quot;</a>, which might be my favorite photography book.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[A creative take on GitHub Actions]]></title>
        <id>https://mamuso.dev/post/2023-06-15-a-creative-take-on-actions</id>
        <link href="https://mamuso.dev/note/2023-06-15-a-creative-take-on-actions"/>
        <updated>2023-06-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>I gave a talk about creative uses of GitHub Actions at LGTM! (Looks Good To Me), GitHub’s internal design conference, this week. Most of the talks will soon be available <a href="https://www.youtube.com/playlist?list=PL0lo9MOBetEHChcHjWv43q3BSLlicUW8s">on YouTube</a>.</p>
<p><img src="https://mamuso.dev/assets/posts/lgtmcover.png" alt="LGTM conf cover"></p>
<p>I covered my fixation with automation, revisited the &quot;Design tool as CMS&quot; concept, showed how to build your own &quot;Wayback machine&quot;, and tried to get the team excited about automating repetitive tasks.</p>
<p>I&#39;m particularly proud of this actual footage of me successfully getting my GitHub Actions to green.</p>
<video width="100%" controls>
  <source src="https://mamuso.dev/assets/posts/try-and-try-again.mp4" type="video/mp4">
  Your browser does not support the video tag.
</video>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Swiss Army knife]]></title>
        <id>https://mamuso.dev/post/2023-03-24-the-swiss-army-knife</id>
        <link href="https://mamuso.dev/note/2023-03-24-the-swiss-army-knife"/>
        <updated>2023-03-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>I like the idea of a Swiss Army knife more than the actual thing. Maybe I never had a good one.</p>
<p>Still, I used the metaphor way too many times this week. A compact, versatile tool is appealing: a collection of <a href="https://brandur.org/small-sharp-tools">small, sharp tools</a> at your service.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Automate everything!]]></title>
        <id>https://mamuso.dev/post/2022-08-10-actions-automation</id>
        <link href="https://mamuso.dev/note/2022-08-10-actions-automation"/>
        <updated>2022-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>I’ve spent a lot of time automating recurring team routines. It’s been fun, and it’s paid off. I should organize all the different actions and automations I use every day and share them. Maybe it should be a website? 🤔</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Updated papercups.mamuso.net]]></title>
        <id>https://mamuso.dev/post/2022-01-21-papercups</id>
        <link href="https://mamuso.dev/note/2022-01-21-papercups"/>
        <updated>2022-01-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>I have been updating dependencies and getting ready to add a few more cups. Side projects go stale fast when you don&#39;t tend to them.</p>
<p><img src="https://mamuso.dev/assets/posts/shoreditch-grind.png" alt="Shoreditch Grind"></p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[We (finally) have a swimming Tiki lamp!]]></title>
        <id>https://mamuso.dev/post/2022-01-18-epoxy-and-sprites</id>
        <link href="https://mamuso.dev/note/2022-01-18-epoxy-and-sprites"/>
        <updated>2022-01-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<div className='photo-gallery'>
<img alt="Tiki lamp finished" src="https://mamuso.dev/assets/posts/tikilampfinished.jpeg"/>
<img alt="Casting resin" src="https://mamuso.dev/assets/posts/resincasting.jpeg"/>
<img alt="New Zealand story Characters" src="https://mamuso.dev/assets/posts/perlernewzealandstory.jpeg"/>
</div><p>Building this little lamp was a blast. We did a terrible job casting the resin, and the finish could be a lot better. But now Marco and Alex have the coolest resin lamp 💖</p>
<p>We also started on other characters from The New Zealand Story.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Stray characters]]></title>
        <id>https://mamuso.dev/post/2021-09-01-straycharacters</id>
        <link href="https://mamuso.dev/note/2021-09-01-straycharacters"/>
        <updated>2021-09-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2021-09-01-straycharacters.png'/><p>Going through 1,200 old Flickr photos, I found out that between 2005 and 2014, I took a lot of pictures of urban typography.</p>
<p>I’ve spent months trying to bring my photo collections together in one place, and photo services make exporting frustrating. Flickr sends images and metadata as separate files and leaves the merging to you. Its export sat in my Downloads folder for weeks until today. After a bit of JavaScript and some ExifTool magic, I had everything ready for review.</p>
<p>I know how it started. Back in 2003, I got a copy of <a href="http://www.lexiearle.com/blog/2016/8/11/barcelona-grafica-and-25000km-de-signes">América Sánchez’s Barcelona Gráfica</a>. The book clusters lettering, typography, and signs that represent the character of the city. I liked the idea of treating the urban environment as a graphic canvas.</p>
<p>I don’t know why I stopped, though. I enjoyed the letter hunting and still enjoy those pictures, so I created a <a href="http://straycharacters.mamuso.net">site</a>.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Light/Dark mode, the CSS-variable way]]></title>
        <id>https://mamuso.dev/post/2021-06-30-dark-mode-cssvars</id>
        <link href="https://mamuso.dev/note/2021-06-30-dark-mode-cssvars"/>
        <updated>2021-06-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2021-06-30-dark-mode-cssvars.gif'/><p>Choosing colors is hard. Respecting your visitors’ color preferences shouldn’t be.</p>
<p>You need two things: <a href="https://www.w3.org/TR/css-variables-1/">CSS variables</a> and the media feature <a href="https://www.w3.org/TR/mediaqueries-5/#prefers-color-scheme"><code>prefers-color-scheme</code></a>.</p>
<ol>
<li>You can define your color variables and their values for light (default) and dark modes in your CSS file:</li>
</ol>
<pre><code class="language-css">:root {
  --text: #333333;
}

@media (prefers-color-scheme: dark) {
  :root {
    --text: #ffffff;
  }
}
</code></pre>
<ol start="2">
<li>Then you can use those variables in your CSS declarations:</li>
</ol>
<pre><code class="language-css">element {
  color: var(--text);
}
</code></pre>
<p><strong>And that’s it!</strong> Your website will react to the user&#39;s color theme preference.</p>
<p>You can play with a simple but functional example in <a href="https://codepen.io/mamuso/pen/jOmEjeQ">this CodePen</a>; switch your OS appearance setting to see the colors change. This foundation also works like a charm in more complex scenarios:</p>
<ul>
<li>Check <a href="https://www.joshwcomeau.com/react/dark-mode/">Joshua Comeau&#39;s post</a>. He implements light/dark mode in Gatsby using CSS variables.</li>
<li>Or <a href="https://github.com/mamuso/nextjs-simple-darkmode">this example</a> using CSS variables with Next.js and styled-components.</li>
</ul>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Anchorhead, Seattle]]></title>
        <id>https://mamuso.dev/post/2020-05-20-papercups</id>
        <link href="https://mamuso.dev/note/2020-05-20-papercups"/>
        <updated>2020-05-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-05-20-papercups.png'/><p>It’s been a while since I last drew a paper cup for <a href="https://papercups.mamuso.net">Papercups</a>. I’d missed this.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Capturing beyond 16384px]]></title>
        <id>https://mamuso.dev/post/2020-05-08-beyond-16384px</id>
        <link href="https://mamuso.dev/note/2020-05-08-beyond-16384px"/>
        <updated>2020-05-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-05-08-beyond-16384px.gif'/><p><a href="https://github.com/puppeteer/puppeteer/pull/937">The Chromium version I was using can’t process images taller than 16,384 px</a>. It took me days to figure that out.</p>
<p>My full-page captures of long pages <a href="https://fluxcapacitorprod.blob.core.windows.net/fluxcontainer/2020-05-06/desktop/enterprise.png">were coming back full of white patches</a>, and I chased every other suspect first. Do images have enough time to load? Is a CSS property causing a rendering issue? What about animations?</p>
<p>The fix: capture, scroll, repeat, and stitch <a href="https://fluxcapacitorprod.blob.core.windows.net/fluxcontainer/2020-05-07/desktop/enterprise.png">the result</a>. That brings its own fun problems:</p>
<ul>
<li>Capturing sticky headers and footers (solved!)</li>
<li>Fixed sidebar repetition (no clue how to work around this problem sustainably)</li>
<li>Animation loops at the seams between captures (🤷🏼‍♂️)</li>
</ul>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Showing captures by device]]></title>
        <id>https://mamuso.dev/post/2020-04-29-captures-by-device</id>
        <link href="https://mamuso.dev/note/2020-04-29-captures-by-device"/>
        <updated>2020-04-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-04-29-captures-by-device.gif'/><p>All the screenshots from the current report, grouped by device.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Listing screenshots]]></title>
        <id>https://mamuso.dev/post/2020-04-27-listings</id>
        <link href="https://mamuso.dev/note/2020-04-27-listings"/>
        <updated>2020-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-04-27-listings.png'/><p>I started scaffolding the pages for browsing screenshots. I’m using Next.js and Prisma behind the scenes.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Drafting interfaces]]></title>
        <id>https://mamuso.dev/post/2020-04-26-designing-fluxcapacitor</id>
        <link href="https://mamuso.dev/note/2020-04-26-designing-fluxcapacitor"/>
        <updated>2020-04-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-04-26-designing-fluxcapacitor.png'/><p>I spent most of the weekend working on <a href="https://github.com/mamuso/fluxcapacitor/runs/621307378?check_suite_focus=true">breaking the paparazzi pipeline into pieces</a>. It turns out that trying to run all the steps in a single process doesn&#39;t scale well, and the process stalls when we have many URLs in the config.</p>
<p>I sketched an initial interface for browsing the screenshots. Not terribly happy about it, but we need to start somewhere.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hi, fluxcapacitor!]]></title>
        <id>https://mamuso.dev/post/2020-04-23-hi-fluxcapacitor</id>
        <link href="https://mamuso.dev/note/2020-04-23-hi-fluxcapacitor"/>
        <updated>2020-04-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2020-04-23-hi-fluxcapacitor.png'/><p>WELL, WELL! Fluxcapacitor (formerly Timesled, I’m terrible at naming projects) runs like a charm on GitHub Actions, and I rewrote a big chunk of the code to make it easier to maintain:</p>
<ul>
<li>It runs every three days</li>
<li>The first stable run (capture, process, compare, store) had 104 endpoints and 3 devices</li>
<li>It took 1h 32m to finish</li>
<li>The next run will process over 140 endpoints</li>
</ul>
<p>The infra is more sophisticated than it was a few months ago. The images and the tgzs of the captures are blobs in Azure, and Prisma 2 handles the data layer.</p>
<p>So far, so good :)</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Timesled deploy is ready to go]]></title>
        <id>https://mamuso.dev/post/2019-12-11-deploy</id>
        <link href="https://mamuso.dev/note/2019-12-11-deploy"/>
        <updated>2019-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-11-deploy.png'/><p>Today I don’t feel like doing much coding, so I’m crossing one of the easier tasks off my list. I put together a simple Next.js starter and deployed it.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build your own work feed]]></title>
        <id>https://mamuso.dev/post/2019-12-10-peeking</id>
        <link href="https://mamuso.dev/note/2019-12-10-peeking"/>
        <updated>2019-12-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-10-peeking.png'/><p>Why have one side project when you can have two? 😏</p>
<p>I&#39;m starting to work with <a href="https://adrianmato.com">Adrián</a> on transforming the concept of this work feed into a real product. I&#39;ll write more about it as we build it.</p>
<p>We want to have something ready to ship fast, so we are using <a href="https://mxstbr.com">Max Stoiber</a> and <a href="https://brianlovin.com">Brian Lovin</a>&#39;s <a href="https://github.com/nice-boys/product-boilerplate">product boilerplate</a> as our initial foundation. I’m impressed by how quickly we went from an empty project to working on our data model.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Capture, compare, minify, store]]></title>
        <id>https://mamuso.dev/post/2019-12-07-capture-compare-minify-store</id>
        <link href="https://mamuso.dev/note/2019-12-07-capture-compare-minify-store"/>
        <updated>2019-12-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-07-capture-compare-minify-store.png'/><p>Today was cleanup time. I broke a gigantic <code>index.js</code> into manageable pieces and tidied up the mess I made while I was building the concept.</p>
<p>Storage is moving along, and I have ideas for abstracting different storage providers. I&#39;d love to start capturing screenshots three times a week so I have data to feed into the project’s frontend.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Stuck!]]></title>
        <id>https://mamuso.dev/post/2019-12-06-fuuuuuu</id>
        <link href="https://mamuso.dev/note/2019-12-06-fuuuuuu"/>
        <updated>2019-12-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-06-fuuuuuu.png'/><p>Got stuck on something that looked simple and wrote a bunch of spaghetti code I’ll probably throw away tomorrow.</p>
<p>On the bright side, I think I have a much better understanding of how to work with Azure Storage. 🤷🏼‍♂️</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Capture and minify]]></title>
        <id>https://mamuso.dev/post/2019-12-05-capture-minify</id>
        <link href="https://mamuso.dev/note/2019-12-05-capture-minify"/>
        <updated>2019-12-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-05-capture-minify.png'/><p>The action now iterates over a few devices and a list of URLs. It is slow, but that was expected.</p>
<p>I&#39;m worried about the amount of image data each run produces, to the point where I&#39;m considering implementing the storage layer straight away. I also added image optimization, but I wonder if it is going to mess with pixelmatch.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Diffs]]></title>
        <id>https://mamuso.dev/post/2019-12-04-diffs</id>
        <link href="https://mamuso.dev/note/2019-12-04-diffs"/>
        <updated>2019-12-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-04-diffs.png'/><p>Today I played with <a href="https://github.com/mapbox/pixelmatch">pixelmatch</a>. I want to detect differences between screens from day to day.</p>
<p>The tricky part is comparing full-page screenshots with different dimensions. If the images don’t match in size, the script raises an error. I’m writing code to handle that.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building a time machine]]></title>
        <id>https://mamuso.dev/post/2019-12-03-timesled</id>
        <link href="https://mamuso.dev/note/2019-12-03-timesled"/>
        <updated>2019-12-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-12-03-timesled.png'/><p>I’m starting a project to automatically take screenshots of a bunch of web pages. I want to compare how those pages change over time.</p>
<p>Years ago, I imagined a simpler version of this project and even registered uihop.com, intending to build a service around it. Later, at Yammer, Brendan McKeon impressed the whole company with the many uses of his &quot;time machine&quot;. His work inspired me, and I was bummed that the technology wasn’t available to more designers.</p>
<p>For now, I’ve built a simple action that runs Puppeteer in a Docker container and reads a configuration file containing viewport sizes and URLs.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[dotfiles]]></title>
        <id>https://mamuso.dev/post/2019-11-14-dotfiles</id>
        <link href="https://mamuso.dev/note/2019-11-14-dotfiles"/>
        <updated>2019-11-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>Today I read about an <a href="https://news.ycombinator.com/item?id=11071754">elegant way to manage dotfiles</a>.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Mouse on / Mouse off]]></title>
        <id>https://mamuso.dev/post/2019-09-26-hovers</id>
        <link href="https://mamuso.dev/note/2019-09-26-hovers"/>
        <updated>2019-09-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-26-hovers.gif'/><p>Polishing the hover states before the basics are done. Naturally.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Giving this feed a coat of paint]]></title>
        <id>https://mamuso.dev/post/2019-09-24-feed-design</id>
        <link href="https://mamuso.dev/note/2019-09-24-feed-design"/>
        <updated>2019-09-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-24-feed-design.png'/><p>Keeping it veeeery simple.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[PR-it!]]></title>
        <id>https://mamuso.dev/post/2019-09-20-pull-request-it</id>
        <link href="https://mamuso.dev/note/2019-09-20-pull-request-it"/>
        <updated>2019-09-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-20-pull-request-it.png'/><p>I finished the action that will send me a daily PR with a starter template for a post. I learned a lot from dissecting <a href="https://github.com/jasonEtco">Jason&#39;s code</a> and filled in the gaps with <a href="https://jeffrafter.com">Jeff Rafter</a>&#39;s thorough <a href="https://jeffrafter.com/working-with-github-actions/">article</a>.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Automating the hell out of this]]></title>
        <id>https://mamuso.dev/post/2019-09-19-automating-the-hell-out-of-this</id>
        <link href="https://mamuso.dev/note/2019-09-19-automating-the-hell-out-of-this"/>
        <updated>2019-09-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-19-automating-the-hell-out-of-this.png'/><p>I want GitHub to hand me a pull request every evening when I get home, so this feed keeps itself alive. 🎉</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Actions]]></title>
        <id>https://mamuso.dev/post/2019-09-18-actions</id>
        <link href="https://mamuso.dev/note/2019-09-18-actions"/>
        <updated>2019-09-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-18-actions.png'/><p>To keep this feed alive without spending too much time maintaining it, I want to automate the hell out of it. I&#39;m learning a lot from the actions that <a href="https://github.com/JasonEtco">Jason Etcovitch</a> has published.</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hello DNS!]]></title>
        <id>https://mamuso.dev/post/2019-09-17-hello-dns</id>
        <link href="https://mamuso.dev/note/2019-09-17-hello-dns"/>
        <updated>2019-09-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[<img src='https://mamuso.dev/assets/feed/2019-09-17-hello-dns.png'/><p>Inspired by <a href="http://feed.grantcuster.com">Grant Custer</a>, I’m starting a small feed of things I’m working on: half-finished ideas, side projects, and the occasional win. Let’s do this!</p>
]]></summary>
        <author>
            <name>Manuel Muñoz Solera</name>
        </author>
    </entry>
</feed>