<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <title>mattsayar.com</title>
    <link href="https://mattsayar.com/feed.xml" rel="self" />
    <link href="https://mattsayar.com" />
    <updated>2026-07-12T12:35:30-06:00</updated>
    <author>
        <name>Matt Sayar</name>
    </author>
    <id>https://mattsayar.com</id>

    <entry>
        <title>How I read more books</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/how-i-read-more-books/"/>
        <id>https://mattsayar.com/how-i-read-more-books/</id>
            <category term="writing"/>
            <category term="tech"/>
            <category term="household"/>

        <updated>2026-07-12T12:31:39-06:00</updated>
            <summary type="html">
                <![CDATA[
                    I used to devour books as a kid but slowed down after I graduated college for some reason. I think it's partially because I read an article once-upon-a-time that your bed should only be for sleeping (and spousal appreciation). I used to read before bed&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>I used to devour books as a kid but slowed down after I graduated college for some reason. I think it's partially because I read an article once-upon-a-time that your bed should <strong>only</strong> be for sleeping (and spousal appreciation). I used to read before bed every night, but stopped after reading that article.</p>
<p>I just found a <a href="https://news.ycombinator.com/item?id=48882056">great article on HN</a> about how to read more books. I've been reading more books than I ever have before using a lot of these same techniques.</p>
<p>Years ago, I realized I haven't read a full novel in quite some time, so I started reading in bed again. Using a <a href="https://www.amazon.com/dp/B0CFPJYX7P">Kindle with a backlight</a> (and a <a href="https://www.amazon.com/MoKo-Security-Hand-Strap-Kindle-eReaders/dp/B0BJVMVGJ6/">strap</a> to comfortably hold it) made it a lot more convenient. I generally read until I start falling asleep, and my sleep scores are typically quite good. I'm very thankful for sleeping soundly and try not to take it for granted.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/83/sleep.png" alt="" width="471" height="327" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/83/responsive/sleep-xs.png 640w ,https://mattsayar.com/media/posts/83/responsive/sleep-sm.png 768w ,https://mattsayar.com/media/posts/83/responsive/sleep-md.png 1024w ,https://mattsayar.com/media/posts/83/responsive/sleep-lg.png 1366w ,https://mattsayar.com/media/posts/83/responsive/sleep-xl.png 1600w ,https://mattsayar.com/media/posts/83/responsive/sleep-2xl.png 1920w"></figure>
<p>Since I can read in bed without negatively affecting my sleep, I've been able to read a lot more. I use the <a href="https://libbyapp.com/">Libby app</a> to borrow most of my books. I maintain a list of books I want to read with an <a href="https://www.amazon.com/hz/wishlist/ls/3HNWSOP03NJK5/">Amazon wish list</a>. When I come across a recommendation, I add it to my wish list. When I'm ready to read a new book, I go through my wish list and search Libby until I find something that's available to read immediately. If I can't finish the book within the 21 day borrowing period, I put my Kindle on Airplane mode, and I'm able to finish the book without Amazon automatically returning it.</p>
<p>I've tried reading fiction books on my phone, but it's hard to get into the flow of reading when I have notifications interrupting me, or I lose concentration and switch to a different app. Because of that, I've dedicated fiction novels to my Kindle, and I read non-fiction books on my phone.</p>
<p>If I notice I'm scrolling TikTok/Instagram mindlessly, I switch to reading a non-fiction book instead. I put the Kindle app in a prominent place on my home screen next to my social media apps to make it easier to reflexively reach for it instead. I'm currently reading Morgan Housel's <a href="https://www.amazon.com/dp/0593716620">The Art of Spending Money</a>, and it's easily interruptible if I get a notification.</p>
<p>There was a period of time where I tried reading the <a href="https://en.wikipedia.org/wiki/The_Wheel_of_Time">Wheel of Time</a> series. Around book five my reading habit ground to halt. I didn't want to read another book, because I considered it a personal failure if I didn't finish what I started. After months of feeling guilty, I finally started reading something else, and have read many more books since then. Reading anything is better than <em>not</em> reading at all.</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Wiggle wiggle</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/wiggle-wiggle/"/>
        <id>https://mattsayar.com/wiggle-wiggle/</id>
        <media:content url="https://mattsayar.com/media/posts/82/wiggle_20160409_212017_010.gif" medium="image" />
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="computers"/>
            <category term="colorado"/>
            <category term="claude"/>

        <updated>2026-06-26T21:06:11-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/82/wiggle_20160409_212017_010.gif" alt="" />
                    I saw a fun post on Hacker News about creating wigglegrams, and decided to try it for myself. Since I live in the Google ecosystem, I had Claude rewrite the code for Google Photos support. However, because of some limitations to the Google API: Since&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/82/wiggle_20160409_212017_010.gif" class="type:primaryImage" alt="" /></p>
                <p>I saw a <a href="https://news.ycombinator.com/item?id=48605561">fun post on Hacker News</a> about creating <a href="https://lmao.center/blog/wiggle-accidents/">wigglegrams</a>, and decided to try it for myself. Since I live in the Google ecosystem, I had Claude rewrite <a href="https://github.com/JCLemme/wiggle-wiggle">the code</a> for Google Photos support. However, because of some limitations to the Google API:</p>
<pre>Since 2025, Google's <code data-epitaxy-inline-code="">readonly</code> scope only returns media <strong>your own app created</strong> unless your project has the legacy grant, so a personal library may list empty. </pre>
<p>Oh well, I could still use the script with local files. I created a <a href="https://takeout.google.com/">Google Takeout</a> request for my photos, and it returned ~560GB worth of 50GB zips. That's a lot of photos! I wanted to test it on my most recent photos first, but Takeout doesn't give any indication whether Part 1 contains my oldest or newest photos. I suppose this is why I pay for gigabit internet...</p>
<figure class="post__image"><img loading="lazy"  src="https://mattsayar.com/media/posts/82//SCR-20260626-sguh.png" alt="" width="823" height="349" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-xs.png 640w ,https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-sm.png 768w ,https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-md.png 1024w ,https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-lg.png 1366w ,https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-xl.png 1600w ,https://mattsayar.com/media/posts/82//responsive/SCR-20260626-sguh-2xl.png 1920w"></figure>
<p>Regardless, I eventually downloaded everything and found some cool ones. It took a few minutes to process each 50GB directory, and produced roughly 1,500 wigglegrams with 15+ years worth of photos from my library. Most of them were two-frame animations like this.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20240831_080247_132.gif" alt="" width="600" height="452"></figure>
<p>Pretty neat, and perhaps closest to the <a href="https://en.wikipedia.org/wiki/Wiggle_stereoscopy">definition of a wigglegram</a>, but I like them more when they have 2+ frames and become mini animations instead. Kids and pets are the best because they move in unpredictable ways while posing. These are some of my favorites to share.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20180817_195520_055.gif" alt="" width="450" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20231220_094902_135.gif" alt="" width="452" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20200115_141726_014.gif" alt="" width="600" height="450"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20170214_162742_037.gif" alt="" width="450" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20161008_083256_010.gif" alt="" width="600" height="400"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20260301_121001_151.gif" alt="" width="600" height="452"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20250315_172511_122.gif" alt="" width="600" height="452"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20230311_170100_119.gif" alt="" width="452" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20230705_094144_179.gif" alt="" width="452" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20250425_223046_133.gif" alt="" width="452" height="600"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20240602_083547_132.gif" alt="" width="600" height="452"></figure>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/82/wiggle_20190630_062946_084.gif" alt="" width="600" height="450"></figure>
<p>Fun stuff. Thanks <a href="https://github.com/JCLemme"></a><a href="https://lmao.center/">John</a> for giving me a reason to walk down memory lane.</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Building and hosting a website in less than 3 minutes</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/building-and-hosting-a-website-in-less-than-3-minutes/"/>
        <id>https://mattsayar.com/building-and-hosting-a-website-in-less-than-3-minutes/</id>
        <media:content url="https://mattsayar.com/media/posts/81/faster.jpeg" medium="image" />
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="cloudflare"/>
            <category term="claude"/>

        <updated>2026-06-20T16:07:57-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/81/faster.jpeg" alt="" />
                    I recently wrote about building a website in minutes, and now it's even faster. As in, literally 4 minutes and 22 seconds. Cloudflare released the ability for agents to deploy with temporary accounts. Using my example from the other post, that means you can pop&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/81/faster.jpeg" class="type:primaryImage" alt="" /></p>
                <p>I recently wrote about <a href="https://mattsayar.com/how-to-build-a-website-and-host-it-in-minutes/">building a website in minutes</a>, and now it's even faster. As in, literally 4 minutes and 22 seconds. </p>
<p>Cloudflare released the ability for <a href="https://blog.cloudflare.com/temporary-accounts/">agents to deploy with temporary accounts</a>. Using my example from the other post, that means you can pop open <a href="https://code.claude.com/docs/en/desktop-quickstart">Claude Code</a> and just type:</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/81/SCR-20260620-obcx.png" alt="" width="716" height="347" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-xs.png 640w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-sm.png 768w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-md.png 1024w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-lg.png 1366w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-xl.png 1600w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obcx-2xl.png 1920w"></figure>
<p>Claude initially didn't know that the <code>--temporary</code> tag existed, so I gave it a little encouragement to try it anyway. And then it did:</p>
<figure class="post__image"><img loading="lazy"  src="https://mattsayar.com/media/posts/81/SCR-20260620-obtu.png" alt="" width="712" height="202" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-xs.png 640w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-sm.png 768w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-md.png 1024w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-lg.png 1366w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-xl.png 1600w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-obtu-2xl.png 1920w"></figure>
<p>Since I was already logged in, I clicked the Claim Account link, and <a href="https://steep-waterfall-7509.matt-sayar.workers.dev/">now it's live</a>! From there, simply add a domain like I <a href="https://mattsayar.com/how-to-build-a-website-and-host-it-in-minutes/">mentioned before</a>, and you've got a site on the internet! </p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/81/SCR-20260620-ocbs.png" alt="" width="667" height="349" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-xs.png 640w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-sm.png 768w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-md.png 1024w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-lg.png 1366w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-xl.png 1600w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-ocbs-2xl.png 1920w"></figure>
<p>My first reflex was to reach for Claude Code, but I wondered if you could do it in the desktop app. And you could! This time it didn't give me any grief for the <code>--temporary</code> flag and it did it in less than three minutes. This is really, really cool. </p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/81/SCR-20260620-oewl.png" alt="" width="677" height="892" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-xs.png 640w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-sm.png 768w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-md.png 1024w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-lg.png 1366w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-xl.png 1600w ,https://mattsayar.com/media/posts/81/responsive/SCR-20260620-oewl-2xl.png 1920w"></figure>
            ]]>
        </content>
    </entry>
    <entry>
        <title>How to build a website and host it in minutes</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/how-to-build-a-website-and-host-it-in-minutes/"/>
        <id>https://mattsayar.com/how-to-build-a-website-and-host-it-in-minutes/</id>
        <media:content url="https://mattsayar.com/media/posts/80/SCR-20260618-syyg-2.png" medium="image" />
            <category term="website"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="gemini"/>
            <category term="cloudflare"/>
            <category term="claude"/>

        <updated>2026-06-18T22:03:14-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/80/SCR-20260618-syyg-2.png" alt="" />
                    I've written a lot about how I built this website, but making websites has gotten even easier over time. A friend of mine came to me with a logo and asked, "I want to build a website for this junk hauling business. Can you make&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/80/SCR-20260618-syyg-2.png" class="type:primaryImage" alt="" /></p>
                <p>I've written a lot about <a href="https://mattsayar.com/creating-a-simple-free-website-in-2025/">how I built this website</a>, but making websites has gotten even easier over time. A friend of mine came to me with a logo and asked, "I want to build a website for this junk hauling business. Can you make a website?" It literally just took this one prompt.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/80/SCR-20260618-sjdy.png" alt="" width="661" height="253" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-xs.png 640w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-sm.png 768w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-md.png 1024w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-lg.png 1366w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-xl.png 1600w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-sjdy-2xl.png 1920w"></figure>
<p>And it resulted in exactly what he needed.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/80/SCR-20260618-stzm-2.png" alt="" width="1086" height="442" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-xs.png 640w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-sm.png 768w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-md.png 1024w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-lg.png 1366w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-xl.png 1600w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-stzm-2-2xl.png 1920w"></figure>
<p>This used to be the hard part. Now it's the easy part. Even the hard part is still pretty easy, let me show you how to host the actual website.</p>
<h3>Hosting the Website with Cloudflare</h3>
<p>Create a Cloudflare account, then go to Build &gt; Compute &gt; Workers &amp; Pages &gt; Create Application.</p>
<figure class="post__image"><img loading="lazy"  src="https://mattsayar.com/media/posts/80/Jun-18-2026-21-52-42.gif" alt="" width="670" height="504"></figure>
<p>And that's it. You can see it right now at <a href="https://steep-waterfall-7509.matt-sayar.workers.dev/">https://steep-waterfall-7509.matt-sayar.workers.dev/</a> </p>
<h3>But nobody wants to remember that URL</h3>
<p>You're right! And Cloudflare will let you buy a domain right from the same page.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/80/SCR-20260618-syyg.png" alt="" width="581" height="366" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-xs.png 640w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-sm.png 768w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-md.png 1024w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-lg.png 1366w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-xl.png 1600w ,https://mattsayar.com/media/posts/80/responsive/SCR-20260618-syyg-2xl.png 1920w"></figure>
<p>I'm not going to fork over $10 to show you what it looks like, but it's really that easy anymore. Cloudflare <a href="https://mattsayar.com/why-does-cloudflare-pages-have-such-a-generous-free-tier/">hosts static sites for free</a>, so if that's all you need, you're in business.</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Yes, we still need engineers</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/yes-we-still-need-engineers/"/>
        <id>https://mattsayar.com/yes-we-still-need-engineers/</id>
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="claude"/>

        <updated>2026-06-15T18:01:28-06:00</updated>
            <summary type="html">
                <![CDATA[
                    Prototyping has done wonders for speeding up software delivery. I start with a clone of our UI repository and open Claude Code. I'll prompt it to help me add a button (or whatever), set up some test data, and record a demo of a full&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>Prototyping has done wonders for speeding up software delivery. I start with a clone of our UI repository and open Claude Code. I'll prompt it to help me add a button (or whatever), set up some test data, and record a demo of a full workflow. It looks great in a Loom video! But it's far from production-ready. We still need:</p>
<ul>
<li>Backend support</li>
<li>Regression testing</li>
<li>Functional testing</li>
<li>Security testing</li>
<li>Performance testing</li>
<li>Scalability considerations</li>
<li>Edge case considerations</li>
<li>Architectural considerations</li>
<li>Accessibility requirements</li>
<li>Design system considerations</li>
<li>Maintainability considerations</li>
<li>User permissions considerations</li>
</ul>
<p>That's just off the top of my head! What about:</p>
<details>
<summary><span style="color: #236fa1;">Lots more stuff</span></summary>
<ul>
<li>Logging, metrics, and tracing</li>
<li>Monitoring and alerting (how do you find out it broke before users do?)</li>
<li>Error handling and graceful degradation</li>
<li>CI/CD pipeline, deployment, and rollback strategy</li>
<li>Feature flags</li>
<li>Infrastructure provisioning, config management, and secrets handling</li>
<li>Rate limiting and abuse prevention</li>
<li>Retry logic and idempotency</li>
<li>Concurrency and race conditions</li>
<li>Backups and disaster recovery</li>
<li>Database schema design and migrations</li>
<li>Data validation and integrity constraints</li>
<li>Caching strategy and invalidation</li>
<li>PII handling, data retention, and deletion</li>
<li>Authentication</li>
<li>Authorization, roles, and permissions</li>
<li>Session management</li>
<li>Multi-tenancy and data isolation</li>
<li>Regulatory compliance (GDPR, HIPAA, SOC 2, etc.)</li>
<li>Audit trails</li>
<li>Dependency licensing</li>
<li>Data residency requirements</li>
<li>Localization and translation</li>
<li>Timezone, currency, and date/number formatting</li>
<li>Right-to-left support</li>
<li>Empty, loading, and error states</li>
<li>Offline and slow-network behavior</li>
<li>Responsive layout, mobile, and cross-browser quirks</li>
<li>Analytics and instrumentation</li>
<li>A/B testing hooks</li>
<li>Cloud cost / budget impact at scale</li>
<li>Code review</li>
<li>Unit, integration, and end-to-end tests (and coverage)</li>
<li>Technical and user-facing documentation</li>
<li>Runbooks, on-call, and support</li>
<li>Versioning, backward compatibility, and deprecation paths</li>
<li>I used Claude to generate the rest of this list</li>
</ul>
</details>
<p>My prototypes have eased the communication from idea to delivery better than any other tool, but it's still far from a production-ready product. I enjoy making them, and engineering enjoys referencing them, but anybody that thinks their vibe-coded prototype is ready for production is fooling themselves.</p>
<p>A <a href="https://www.normaltech.ai/p/why-ai-hasnt-replaced-software-engineers">recent piece</a> discussed how AI is not behind mass layoffs, and may likely never be. After <a href="https://mattsayar.com/getting-a-job-in-2026/">working with a team</a> rocketing forward with AI adoption in a space that needs protection from AI more than ever, I couldn't agree more. </p>
<figure class="post__image post__image--center"><img loading="lazy" src="https://mattsayar.com/media/posts/79//SCR-20260615-plqk.png" alt="" width="1313" height="705" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-xs.png 640w ,https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-sm.png 768w ,https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-md.png 1024w ,https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-lg.png 1366w ,https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-xl.png 1600w ,https://mattsayar.com/media/posts/79//responsive/SCR-20260615-plqk-2xl.png 1920w">
<figcaption><a href="https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE">source</a></figcaption>
</figure>
<p>Indeed, it seems we're starting to hire <em>more</em> engineers even after the noticeable boost in quality in AI generated code in <a href="https://simonwillison.net/2026/Jan/4/inflection/">November's inflection point</a>. Software is an industry intent on automating as much as possible. It usually <a href="https://automatetheboringstuff.com/">automates the boring stuff</a>, which lets us focus on the fun stuff. And the fun stuff is solving real problems, not typing code.</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Ray-Ban Meta Wayfarer (Gen 2) Review</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/ray-ban-meta-wayfarer-gen-2-review/"/>
        <id>https://mattsayar.com/ray-ban-meta-wayfarer-gen-2-review/</id>
        <media:content url="https://mattsayar.com/media/posts/78/PXL_20260607_190303565.PORTRAIT.jpg" medium="image" />
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="meta"/>
            <category term="household"/>

        <updated>2026-06-07T11:15:30-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/78/PXL_20260607_190303565.PORTRAIT.jpg" alt="" />
                    Somehow, I avoided wearing glasses until I was 36 years old. I had seen optometrists, I have a prescription, and I wore cheap prescription glasses for nighttime driving. But it wasn't until 2026 that my eye doc said, "You really should be wearing glasses all&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/78/PXL_20260607_190303565.PORTRAIT.jpg" class="type:primaryImage" alt="" /></p>
                <p>Somehow, I avoided wearing glasses until I was 36 years old. I had seen optometrists, I have a prescription, and I wore cheap prescription glasses for nighttime driving. But it wasn't until 2026 that my eye doc said, "You really should be wearing glasses all the time."</p>
<p>I started by buying a handful of cheap glasses from <a href="https://www.zennioptical.com/">Zenni Optical</a>. Everyone agreed I looked best with some <a href="https://www.zennioptical.com/p/plastic-full-rim-frame/2704/270421">wayfarer knock-offs</a>, so I splurged and re-ordered it with all the bells and whistles: transitions, anti-smudge, anti-reflective, anti-scratch, etc. After a transition period, I grew to really like them!</p>
<p>In the past, I was aware of the <a href="https://www.meta.com/ai-glasses/">Meta glasses</a> but never wanted to wear glasses simply to use its features. But recently they went on sale, and since I am a glasses-wearer now, I started looking at <a href="https://youtu.be/7gtc1DW2Tgo?si=7Tc-RpO-Pum5tCyD&amp;t=278">some reviews</a><a href="https://www.youtube.com/watch?v=ViA4-YWx8Y4"></a> and decided to pull the trigger. Since they're prescription, I could use an HSA to pay for them. They were also on sale, so I splurged yet again and got the transitions, anti-glare, etc. After owning them for a couple weeks, I really like them!</p>
<h3>The Good</h3>
<p>I enjoy taking pictures and videos without fumbling with my phone. The pictures and videos aren't as good as a phone camera, but the readiness of quickly pushing a button outweighs it often enough that it's now my "default" way to capturing pictures.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/78/20260529_180035_e3c20efc.jpg" alt="" width="967" height="1289" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-xs.jpg 640w ,https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-sm.jpg 768w ,https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-md.jpg 1024w ,https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-lg.jpg 1366w ,https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-xl.jpg 1600w ,https://mattsayar.com/media/posts/78/responsive/20260529_180035_e3c20efc-2xl.jpg 1920w"></figure>
<p>The camera is on the wearer's left side while the right side is a light that signals you're capturing pictures and videos. It makes it a little challenging to line up some shots, and I notice I end up taking pictures with a lot of "empty space" at the top of the photo. But then again, I'm capable of taking videos I could never do one-handed.</p>
<div class="post__iframe"><iframe loading="lazy" width="315" height="560" src="https://www.youtube.com/embed/0d6FYDrWdr0" title="Ropes Course" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen"></iframe></div>
<p>The speakers are higher-quality than I expected, and the volume is comfortable enough to listen to music and watch videos without disturbing people around me. It's nice to be able to watch videos when I'm out and about without relying on subtitles or carrying a separate pair of earbuds with me.</p>
<p>A bonus benefit is wearing them while riding my motorcycle. I once owned a motorcycle helmet with built-in Bluetooth speakers, but they were useless above 25 mph because the wind noise drowned them out. The speaker volume in my glasses auto-adjusts when I pick up speed, and it's very helpful to have turn-by-turn directions without mounting my phone to my motorcycle. I can even take phone calls while riding!</p>
<p>As regular old glasses go, they're fine. They're a little thicker and heavier than my pair from Zenni. It took a couple weeks to adjust to the weight on my nose and learning how to twist my neck while driving to see around the blind spots. The light-to-dark-to-light transition speed is faster than my old pair. </p>
<h3>The Bad</h3>
<p>The battery life is <em>almost</em> good enough. With heavy usage, it will die in the early evening. Actually knowing the battery life involves either checking the battery percentage in my phone's native Bluetooth settings (multiple swipes/taps away), or invoking Meta AI and saying "battery." It answers quickly, but I would prefer a home screen widget I could quickly glance at.</p>
<p>At least when the battery dies, they are temporarily "just glasses." <a href="https://www.youtube.com/shorts/tqOkWWV6a_U">Sorry for the convenience</a>. Fortunately it charges pretty quick in the case. However, keeping track of the glasses <em>and</em> case is a hassle. No case, no charging. I also wish they could integrate with Google's Find My so I can ask one of my various smart speakers, "Find my glasses/case."</p>
<p>This lack of integration with native Google features is another downside. Because these glasses are created by Meta, you have to download the full, bloated Meta AI app to use them. I think Google could do a better job natively integrating this across its platform. It would be killer to interact with the Gemini assistant with all its integrations than the Meta AI which interacts best with Meta apps like Instagram and Whatsapp. I don't use those apps that much.</p>
<h3>The Mid</h3>
<p>If you want to show somebody a video on your phone, the sound will come through your glasses. If you disconnect the glasses from Bluetooth, they will reconnect automatically. You have to take your glasses off and fold them up to stop it. </p>
<p>Sometimes I bump the touch panel on accident when hugging somebody or playing with the kids. This will start playing some music (you can configure it to do nothing), so I have to quickly tap it again to stop.</p>
<p>I don't use the Meta AI very much. It's fine to ask for trivia ("How old is Tom Brady?") but not that useful otherwise. I would love to have it create reminders and add events to my calendar, but that's relegated to my Google smart watch. There's a momentary cognitive tax to process what I'd like to do (set a reminder vs ask trivia) before I know which smart device to invoke. First world problems, I know.</p>
<p>Unlike my Pixel Buds, I can't connect it to multiple devices. It would be nice to connect to my laptop AND my phone, so I could use the microphone for work meetings, and then seamlessly switch to playing music from my phone. That said, the battery life would suffer even more than it already does, so it's not a deal breaker.</p>
<p>It's Meta. They're probably mining my data six ways from Sunday. I've already sold my digital life to Google because these days you have to pick a tech giant and live in their ecosystem to reap the benefits. I don't want to expand that surface area, but I want the glasses' features, so... ¯\_(ツ)_/¯</p>
<p>I thought these glasses would fly completely undercover. For the most part, they do, but when I talk to somebody during any substantial conversation, they ask, "Are you wearing Meta glasses?" After I promise I'm not recording, it's fun to talk about the features. </p>
<p>Because they're prescription, there's no resale value. But even then...</p>
<h3>I'll probably get the next version</h3>
<p>I'm already thinking about the features I want in the next version: keep the same form factor, improve the battery life, let me integrate with Google, and maybe even make them lighter!</p>
<p> </p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>I can&#x27;t in good conscience recommend the Meater BBQ probes</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/i-cant-in-good-conscience-recommend-the-meater-bbq-probes/"/>
        <id>https://mattsayar.com/i-cant-in-good-conscience-recommend-the-meater-bbq-probes/</id>
        <media:content url="https://mattsayar.com/media/posts/40/ribs.jpg" medium="image" />
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="household"/>
            <category term="bbq"/>

        <updated>2026-05-25T12:42:00-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/40/ribs.jpg" alt="" />
                    A digital thermometer is the most important tool in a cook’s arsenal. Thermometers save lives and money. AmazingRibs.com Meater probes sound like God's gift to BBQ thermometers: it's wireless, it has a slick app, it estimates variable cooking times, and you can even make cool&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/40/ribs.jpg" class="type:primaryImage" alt="" /></p>
                <blockquote>
<p>A digital thermometer is the most important tool in a cook’s arsenal. Thermometers save lives and money.</p>
<p class="align-right"><a href="https://amazingribs.com/ratings-reviews/thermometers/">AmazingRibs.com</a></p>
</blockquote>
<p><span style="font-weight: 400;"><a href="https://www.meater.com/">Meater probes</a> sound like God's gift to BBQ thermometers: it's wireless, it has a slick app, it estimates variable cooking times, and you can even make cool graphs of the meat and smoker's temperature over time. But they fail with the most critical feature, <strong>connectivity</strong>. Oh, and they're expensive.</span></p>
<h3>Meater+</h3>
<p>Initially I owned the <a href="https://store-us.meater.com/products/meater-plus">little solo probe</a>. <span style="font-weight: 400;">Unfortunately, it's complete worthless because of the bluetooth-only range. Your probe needs to be within a couple feet of that block, which means somewhere near your grill or smoker. Then, your phone has to be within bluetooth range of <em>that</em> block. If you go inside and put more than one wall between you and that block, your phone loses connectivity. That means you lose all visibility into temperature and time estimates.</span></p>
<p><span style="font-weight: 400;">I gave mine away to a friend, and I still feel guilty bestowing him with that burden.</span></p>
<figure class="post__image post__image--center"><img loading="lazy" src="https://mattsayar.com/media/posts/40/ribroast.jpg" alt="" width="560" height="682" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/40/responsive/ribroast-xs.jpg 640w ,https://mattsayar.com/media/posts/40/responsive/ribroast-sm.jpg 768w ,https://mattsayar.com/media/posts/40/responsive/ribroast-md.jpg 1024w ,https://mattsayar.com/media/posts/40/responsive/ribroast-lg.jpg 1366w ,https://mattsayar.com/media/posts/40/responsive/ribroast-xl.jpg 1600w ,https://mattsayar.com/media/posts/40/responsive/ribroast-2xl.jpg 1920w">
<figcaption>Made without Meater assistance</figcaption>
</figure>
<h3>Meater Block</h3>
<p><span style="font-weight: 400;">I ordered the single probe Meater in July 2023 and by April 2024 I gave up and purchased the bigger-and-better </span><span style="font-weight: 400;">Meater Block+ when it was </span><a href="https://camelcamelcamel.com/product/B07TJ95CBM" style="font-family: var(--editor-font-family); font-size: inherit;">on sale</a><span style="font-weight: 400;"> for $200. This one is much, much better. The probe connects to the block, which in turn <strong>connects to your Wifi, </strong>which eliminates the bluetooth range problem, mostly.</span></p>
<h4>Pros</h4>
<ul>
<li><span style="font-weight: 400;">I like that there's four different probes, which means I can do crazy stuff like put two into one brisket and get a more accurate temperature over time. The app doesn't really support this, however.</span></li>
<li>I can look at temperatures on my phone from <em>inside the house. </em>😮</li>
</ul>
<h4>Cons</h4>
<ul>
<li><span style="font-weight: 400;">I <i style="color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit;">frequently</i> get false-positive alerts about connection errors. I ignore all those notifications on my phone and things cook like normal, but it's very annoying. Seriously, like 10-20 notifications per 10hr cook. </span></li>
<li><span style="font-weight: 400;">I don't take advantage of sharing features like the time/temperature charts. Have I ever? Sure. Does it really matter? No.</span></li>
<li><span style="font-weight: 400;">All the Meater products require an app, which lacks flexibility. You </span><i><span style="font-weight: 400;">must</span></i><span style="font-weight: 400;"> select the animal you're cooking, then type of meat, and <em>then</em> the target temperature. Just... just lemme pick the temperature!</span></li>
<li>You must <em>scrub</em> the probes clean before you place them back in the dock to charge, otherwise they won't make a good enough connection and won't charge. Like <em>really scrub</em>, and it's a 1cm square which snags my sponge.</li>
<li>How do you know if the probes are charging in the dock or not? You don't. There's no indicator either way. You just pull out a dead probe next time you want to cook. Ask me how I know.</li>
<li>The battery compartment in the block uses AA batteries, and since the compartment seating is somewhat loose, sometimes the batteries pop out just a <em>little bit</em> and won't charge anything. Once again, ask me how I know.</li>
<li>It <strong>burns</strong> through AA batteries. A set of four batteries powers the probes for maybe two cooks. Not a huge deal if you use rechargeable batteries but still annoying.</li>
</ul>
<figure class="post__image post__image--center"><img loading="lazy" src="https://mattsayar.com/media/posts/40/brisket_flat.jpg" alt="" width="2002" height="1508" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/40/responsive/brisket_flat-xs.jpg 640w ,https://mattsayar.com/media/posts/40/responsive/brisket_flat-sm.jpg 768w ,https://mattsayar.com/media/posts/40/responsive/brisket_flat-md.jpg 1024w ,https://mattsayar.com/media/posts/40/responsive/brisket_flat-lg.jpg 1366w ,https://mattsayar.com/media/posts/40/responsive/brisket_flat-xl.jpg 1600w ,https://mattsayar.com/media/posts/40/responsive/brisket_flat-2xl.jpg 1920w">
<figcaption>Also made without Meater assistance</figcaption>
</figure>
<h3>Then what's the better option?</h3>
<p><span style="font-weight: 400;">All that to say, I gave up the Meater for <a href="https://www.amazon.com/ThermoPro-Wireless-Digital-Thermometer-Grilling/dp/B08KZR4F23">a simple wireless probe</a>, and the cost/benefit ratio ($50 vs $200 </span><i><span style="font-weight: 400;">on sale</span></i><span style="font-weight: 400;">) gives it a big leg up. Just get that one. You get four probes, accurate readings, <em><span style="text-decoration: underline;"><strong>strong wireless connectivity</strong></span></em>, and the batteries last forever. The only downside is threading wires into your grill which is such a minor complaint I strained to think of it. That set is now my go-to.</span></p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Google finally decided to start indexing my site</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/google-finally-decided-to-start-indexing-my-site/"/>
        <id>https://mattsayar.com/google-finally-decided-to-start-indexing-my-site/</id>
            <category term="website"/>
            <category term="tech"/>
            <category term="publii"/>
            <category term="meta"/>
            <category term="github"/>
            <category term="cloudflare"/>

        <updated>2026-04-16T15:59:49-06:00</updated>
            <summary type="html">
                <![CDATA[
                    The world of SEO is a strange and mysterious place. That's my takeaway after writing on my site for over a year now. I never intended for this site to become an SEO-optimized destination, but it's been a frustrating journey getting Google to index my&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>The world of SEO is a strange and mysterious place. That's my takeaway after writing on my site for <a href="https://mattsayar.com/writing-publicly-is-hard/">over a year now</a>. I never intended for this site to become an SEO-optimized destination, but it's been a frustrating journey getting Google to index my site.</p>
<p>This has only really been an issue for me because my site doesn't have a search function. Since it's a static site, I need to search for my content like everyone else does: via a search engine. It's not in my muscle memory to Bing it. </p>
<p><a href="https://mattsayar.com/just-pick-a-static-site-generator-and-start-writing/">Since I use Publii</a>, it does most of the work in the background to make my site search engine friendly. This mostly works seamlessly, but Google's internal workings are largely a black box to anybody that doesn't work there. That's largely intentional to prevent spam in their search results, but frustrating when you appear to do everything correctly and see zero search results on your site. Every other search engine (that nobody uses) indexes my site, so why won't Google??</p>
<p>The inflection point for me seemed to be when I switched my site to <a href="https://mattsayar.com/why-does-everyone-hate-webp/">using .webp images</a>. The Google Search Console showed my site was successfully being indexed, but after that move there was a sharp drop to one result: my homepage. An SEO-inclined friend of mine found <a href="https://support.google.com/webmasters/thread/348103983/issues-with-googlebot-crawling-my-site-cloudflare-or-hosting-or-googlebot-issue">one potentially-related case</a> that made webp seem like the culprit. Unfortunately, the problem was identified but not the fix.</p>
<figure class="post__image post__image--center"><a href="https://xkcd.com/979/" ><img loading="lazy" class="post__image post__image--center" src="https://mattsayar.com/media/posts/77/wisdom_of_the_ancients.png" alt="" width="485" height="270" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-xs.png 640w ,https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-sm.png 768w ,https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-md.png 1024w ,https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-lg.png 1366w ,https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-xl.png 1600w ,https://mattsayar.com/media/posts/77/responsive/wisdom_of_the_ancients-2xl.png 1920w"></figure></a></p>
<p>I decided to switch back to non-webp images, and quickly ran into rate limits with GitHub's API since I was trying to reupload hundreds of images at once. I couldn't <a href="https://mattsayar.com/why-does-everyone-hate-webp/">hack around it this time</a>, so I signed up for GitHub's Enterprise trial to get around the rate limits. It worked! My site has a hodge podge of jpgs and pngs again, and now that <a href="https://mattsayar.com/cutting-github-from-my-sites-deployment-workflow/">GitHub isn't a factor</a>, I don't really care about file sizes anymore (<a href="https://mattsayar.com/why-does-cloudflare-pages-have-such-a-generous-free-tier/">thanks Cloudflare</a>).</p>
<p>But Google Search Console still wasn't indexing anything... <a href="https://www.google.com/search?q=site%3Amattsayar.com">until now</a>! But not everything, for some reason. I suppose I just need to give it time?</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Checking in on owning an Electric Vehicle after 1.5 years</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/checking-in-on-owning-an-electric-vehicle-after-15-years/"/>
        <id>https://mattsayar.com/checking-in-on-owning-an-electric-vehicle-after-15-years/</id>
        <media:content url="https://mattsayar.com/media/posts/76/leafpikespeak.jpg" medium="image" />
            <category term="send_newsletter"/>
            <category term="household"/>
            <category term="colorado"/>

        <updated>2026-04-12T15:16:03-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/76/leafpikespeak.jpg" alt="Nissan Leaf driving on Pikes Peak International Highway with Colorado Springs in the background" />
                    At the end of September 2024, I leased a Nissan Leaf for a song. In April 2026, how is it holding up? Do I still like it? Would I get another one? Let's dive into some stats about how it's going. The amount I've driven&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/76/leafpikespeak.jpg" class="type:primaryImage" alt="Nissan Leaf driving on Pikes Peak International Highway with Colorado Springs in the background" /></p>
                <p>At the end of September 2024, <a href="https://mattsayar.com/is-colorados-ev-incentive-worth-it/">I leased a Nissan Leaf for a song</a>. In April 2026, how is it holding up? Do I still like it? Would I get another one? Let's dive into some stats about how it's going.</p>
<h4>10,504 miles</h4>
<p>The amount I've driven it in <strong>18 months</strong>. One downside I neglected to mention about the lease in <a href="https://mattsayar.com/is-colorados-ev-incentive-worth-it/">my last post</a> is that you can only drive 10,000 miles per year. Truthfully, I completely forgot to mention it because it's a complete non-factor for me; since this is my non-road-trip vehicle, I only drive it around town about 6,000 miles per year. It's still worth mentioning. I'm projected to hit around ~14,005 miles at this rate, which is well under the 20k limit.</p>
<figure class="post__image post__image--center"><img loading="lazy" src="https://mattsayar.com/media/posts/76//tread_depth.webp" alt="" width="1024" height="640" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/76//responsive/tread_depth-xs.webp 640w ,https://mattsayar.com/media/posts/76//responsive/tread_depth-sm.webp 768w ,https://mattsayar.com/media/posts/76//responsive/tread_depth-md.webp 1024w ,https://mattsayar.com/media/posts/76//responsive/tread_depth-lg.webp 1366w ,https://mattsayar.com/media/posts/76//responsive/tread_depth-xl.webp 1600w ,https://mattsayar.com/media/posts/76//responsive/tread_depth-2xl.webp 1920w">
<figcaption><a href="https://gotire.com/what-is-minimum-tread-depth-on-tires/">source</a></figcaption>
</figure>
<h3>5/32"</h3>
<p>How much tread is left on my tires. This was pretty surprising to me, since I haven't driven it very far. Apparently I enjoy the <a href="https://thetirereviews.com/why-do-tires-wear-out-faster-on-electric-vehicles/">snappy acceleration</a> too much:</p>
<blockquote>
<p>The instant torque and acceleration capabilities of electric vehicles can lead to more aggressive driving styles, which in turn can accelerate tire wear rates.</p>
</blockquote>
<p>Hopefully, with only six months left in my lease, I won't wear it down enough to require buying new ones when I turn it in!</p>
<h3>~2% per hour</h3>
<p>How fast the Leaf's battery charges off my standard 110V wall outlet. I never wanted to pay for a Level II charger, and I never felt tempted to. I've easily been able to keep the car charged between 50% and 80% with regular usage and overnight charging. </p>
<h3><strong><span data-ast-node-id="5">$606.11</span></strong></h3>
<p>How much my registration renewal was in 2025. This was a good bit more than the <strong><span data-ast-node-id="30">$206.23</span></strong> <span data-ast-node-id="30">I paid for my 2019 Subaru Outback (<a href="https://mattsayar.com/claude-just-bought-me-a-car/">before it got totaled</a>). This is less than the initial $1,000 outlay I paid when I newly registered the vehicle last year.</span></p>
<h3>$0</h3>
<p><span data-ast-node-id="30">Amount I spent on gas. I spent <strong>$625.35 </strong>on gas for my Subaru in 2025, but how much did it cost to charge my Leaf with electricity?</span></p>
<p>While not a perfect methodology, I can compare my electric bill <em>prior</em> to getting the Leaf, and <em>after</em> acquiring it. This assumes the entire increase in my electricity bill would be attributable to the Leaf, which makes it a liberal estimate. I have data six months prior to my lease's begin date, so I'll work with that six-month window on both sides. Uploading the data for Claude Opus 4.6 (Extended Thinking) for analysis shows:</p>
<figure class="post__image"><img loading="lazy"  src="https://mattsayar.com/media/posts/76/SCR-20260412-pkpm.png" alt="" width="1508" height="1092" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-xs.png 640w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-sm.png 768w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-md.png 1024w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-lg.png 1366w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-xl.png 1600w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260412-pkpm-2xl.png 1920w"></figure>
<p>It's estimate for ~6,000 miles driven is nearly exact! That means I can confidently say I've spent ~$217 on electricity to get it around town annually.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/76/PXL_20260412_211912739.jpg" alt="" width="1360" height="1024" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-xs.jpg 640w ,https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-sm.jpg 768w ,https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-md.jpg 1024w ,https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-lg.jpg 1366w ,https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-xl.jpg 1600w ,https://mattsayar.com/media/posts/76/responsive/PXL_20260412_211912739-2xl.jpg 1920w"></figure>
<h3>100%</h3>
<p>Alleged battery capacity. I didn't research this a whole lot, but apparently topping off your battery at 80% and only using trickle charging (via my 110V outlet) is best for your EV's battery health. While I expect my battery is in great shape, I don't know how much I trust this self-reported number. It should at least say 99% the minute I drove it off the lot!</p>
<h3>$463.77</h3>
<p>How much my "New Car" investing account has grown. When I sold my old car and leased this one, my monthly loan payment on the old car was $360. Each month I pay $118/mo for this lease and save the rest in a Betterment investing portfolio. As of this writing, that balance sits at $7,246.58. By the time my lease is up, Betterment projects it will be worth $8,600.01.</p>
<h3>Will I buy this car?</h3>
<p>At the end of the lease, I have the option of buying this car outright. My family has really enjoyed this car. We've proven that owning an EV makes sense for us to drive around town since we have another car for longer road trips. </p>
<p>The original plan was to take the $8,600.01 and buy whatever is available at that price as a replacement. That's still a solid option, however, I recently read that <a href="https://www.canarymedia.com/articles/electric-vehicles/used-evs-are-bargain-buyers-noticing">used EVs are a bargain right now</a>.</p>
<p>Shopping around locally has surfaced some good EVs in the ~$10-20k price range. If I wanted to buy my lease out, that would cost me <strong>$24.1k</strong>. With that price difference, I probably won't keep this car, but instead I''ll try to save as much as I can to buy another EV. Apparently, used cars generally sell for $25.5k in Jan. 2026, which surprised me when I played <a href="https://offby.io/">Off By</a> today.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/76/SCR-20260416-nmby.png" alt="" width="509" height="540" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-xs.png 640w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-sm.png 768w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-md.png 1024w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-lg.png 1366w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-xl.png 1600w ,https://mattsayar.com/media/posts/76/responsive/SCR-20260416-nmby-2xl.png 1920w"></figure>
<p>That's quite a stretch goal to save for in the remaining six months of my lease ($1,900/mo on the high end!). Ideally I would've been saving more per month at the beginning of my lease. From the beginning of this lease, I've mentally prepared myself to accept that my next car will not be as nice as this one.</p>
<h3>Final EV thoughts</h3>
<p>I've been pleasantly surprised with the EV. Qualitatively, I've enjoyed</p>
<ul>
<li>Easy acceleration to merge into traffic (as evidenced by my tire wear)</li>
<li>The interior heats up quickly in the winter because you don't have to wait for an engine to warm up first</li>
<li>No need to stop at gas stations</li>
<li>How quiet the EV operates</li>
<li>One-pedal driving with the e-Pedal is a fun way to "gamify" saving battery</li>
<li>If you smell any gas/oil, you know it's not coming from your car</li>
<li>It's nice to use your phone to start/stop, lock/unlock the car remotely.</li>
</ul>
<p>Are these features worth the premium? Maybe. We'll see how things go between now and the end of my lease.</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Cutting GitHub from my site&#x27;s deployment workflow</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/cutting-github-from-my-sites-deployment-workflow/"/>
        <id>https://mattsayar.com/cutting-github-from-my-sites-deployment-workflow/</id>
        <media:content url="https://mattsayar.com/media/posts/75/51581-matrix-356024.jpg" medium="image" />
            <category term="writing"/>
            <category term="publii"/>
            <category term="meta"/>
            <category term="computers"/>

        <updated>2026-04-11T15:31:17-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/75/51581-matrix-356024.jpg" alt="" />
                    I've been using Publii to manage my site but apparently my site is too big for GitHub anymore. Any time I try to update my site and upload to GitHub, I get a 502 error. Pretty frustrating. That GitHub endpoint times out because there's simply&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/75/51581-matrix-356024.jpg" class="type:primaryImage" alt="" /></p>
                <p>I've been using <a href="https://mattsayar.com/just-pick-a-static-site-generator-and-start-writing/">Publii to manage my site</a> but apparently my site is <a href="https://mattsayar.com/why-does-everyone-hate-webp/">too big for GitHub</a> anymore. Any time I try to update my site and upload to GitHub, I get a 502 error.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/75/SCR-20260403-opqh-2.png" alt="" width="607" height="462" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-xs.png 640w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-sm.png 768w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-md.png 1024w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-lg.png 1366w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-xl.png 1600w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260403-opqh-2-2xl.png 1920w"></figure>
<p>Pretty frustrating. That GitHub endpoint times out because there's simply too many files for it to handle. I've enjoyed having my website in a private GitHub repo so I could have a backup of my website before it's eventually published on Cloudflare. However, I already have everything backed up in Google Drive. <strong>Additionally,</strong> Cloudflare keeps a history of every time I deploy an update to my site.</p>
<figure class="post__image"><img loading="lazy"  src="https://mattsayar.com/media/posts/75/SCR-20260411-nrwo.png" alt="" width="1421" height="1225" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-xs.png 640w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-sm.png 768w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-md.png 1024w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-lg.png 1366w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-xl.png 1600w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nrwo-2xl.png 1920w"></figure>
<p>It's time to cut GitHub out of the equation. Here's how I've reconfigured my Publii/Mac setup so I can publish straight to Cloudflare without changing my workflow.</p>
<h3>Reconfigure Publii to publish locally</h3>
<p>Changed the Server Type to Manual and use a different output directory.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/75/SCR-20260411-ntfw.png" alt="" width="1000" height="802" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-xs.png 640w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-sm.png 768w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-md.png 1024w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-lg.png 1366w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-xl.png 1600w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-ntfw-2xl.png 1920w"></figure>
<h3>Create a Cloudflare token</h3>
<p>This is for a local script to deploy it once it detects changed in that directory. I need to authenticate via an account token.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/75/SCR-20260411-nxuo.png" alt="" width="773" height="268" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-xs.png 640w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-sm.png 768w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-md.png 1024w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-lg.png 1366w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-xl.png 1600w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-nxuo-2xl.png 1920w"></figure>
<h3>Create a bash script to deploy to Cloudflare</h3>
<pre class="language-bash"><code>#!/bin/bash
DEPLOY_DIR="/Users/mattsayar/publii_deploy/mattsayarcom-files"
PROJECT="publii-cloudflare"
LOCKFILE="/tmp/publii-deploy.lock"

export HOME="/Users/mattsayar"
export USER="mattsayar"
export CLOUDFLARE_API_TOKEN="api_token"
export CLOUDFLARE_ACCOUNT_ID="account_id"

cd "$HOME"

/opt/homebrew/bin/fswatch -o -l 15 -e "\.DS_Store" "$DEPLOY_DIR" | while read; do
    NOW=$(date +%s)
    LAST_DEPLOY=$(cat /tmp/publii-deploy.last 2&gt;/dev/null || echo 0)
    ELAPSED=$((NOW - LAST_DEPLOY))
    if [ "$ELAPSED" -lt 60 ]; then
        echo "[$(date)] Last deploy was ${ELAPSED}s ago, skipping (cooldown)."
        continue
    fi
    if [ -f "$LOCKFILE" ]; then
        echo "[$(date)] Deploy already running, skipping."
        continue
    fi
    touch "$LOCKFILE"
    echo "[$(date)] Change detected, deploying..."
    wrangler pages deploy "$DEPLOY_DIR" --project-name="$PROJECT" --branch=main
    echo "[$(date)] Deploy finished."
    date +%s &gt; /tmp/publii-deploy.last
    rm -f "$LOCKFILE"
done</code></pre>
<p>Don't forget to <code>chmod +x deploy.sh</code>. The fswatch utility monitors the directory for changes, and then it deploys when they're detected.</p>
<p><em>Update: </em>I added some cooldown logic to the script since it did a lot of deploys in a short amount of time after I tested this out. Cloudflare only lets you have so many deployments before you start paying money, and it's best practice anyway.</p>
<h3>Create a Launch Agent</h3>
<p>This was new to me. It will listen for file changes in this new <code>publii_deploy</code> directory and run the script when detected. This only happens when I click "Sync Changes" in my Publii app. I added a <code>.plist </code> item to my <code>~/Library/LaunchAgents</code> directory, and it now shows <code>publii-deploy.sh</code> (with a magnifying glass leading to my  in Launch Items and Extensions settings menu.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/75/SCR-20260411-oprs.png" alt="" width="490" height="102" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-xs.png 640w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-sm.png 768w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-md.png 1024w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-lg.png 1366w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-xl.png 1600w ,https://mattsayar.com/media/posts/75/responsive/SCR-20260411-oprs-2xl.png 1920w"></figure>
<p>Now I can just deploy via the Publii UI, but files will deploy to a local folder, the Launch Agent will detect the change, run the script, and my changes will deploy to Cloudflare via wrangler. Then the site will update to <a href="https://mattsayar.com/why-does-cloudflare-pages-have-such-a-generous-free-tier/">all the nodes in Cloudflare's edge network</a>.</p>
<h3>Pros and Cons</h3>
<p>Pros: No more bottleneck with GitHub. Don't have to <a href="https://mattsayar.com/why-does-everyone-hate-webp/">worry about repo size</a>. No more redundant backups.</p>
<p>Cons: I had to do all this. And I have to do it again on <a href="https://mattsayar.com/i-accidentally-broke-my-website-claude-fixed-it-in-minutes/">any other Mac I want to write posts </a>on.</p>
<p>This is the first post I'm testing it with, so fingers crossed!</p>
            ]]>
        </content>
    </entry>
</feed>
