<?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-05-25T12:42:22-06:00</updated>
    <author>
        <name>Matt Sayar</name>
    </author>
    <id>https://mattsayar.com</id>

    <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>
    <entry>
        <title>Getting a Job in 2026</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/getting-a-job-in-2026/"/>
        <id>https://mattsayar.com/getting-a-job-in-2026/</id>
        <media:content url="https://mattsayar.com/media/posts/72/PXL_20260329_015436893.jpg.jpeg" medium="image" />
            <category term="website"/>
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="household"/>

        <updated>2026-03-28T20:55:00-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/72/PXL_20260329_015436893.jpg.jpeg" alt="" />
                    The job market is tough right now in tech. You hear about it everywhere. Whether it's due to AI, over-hiring due to ZIRP, or *waves hands broadly* the economy, getting a job is a journey these days. This is how it went for me. I&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/72/PXL_20260329_015436893.jpg.jpeg" class="type:primaryImage" alt="" /></p>
                <p>The job market is tough right now in tech. <a href="https://technode.global/2026/03/09/2026-tech-layoffs-reach-45000-in-march-more-than-9200-due-to-ai-and-automation-rationalfx/">You</a> <a href="https://news.crunchbase.com/startups/tech-layoffs/">hear</a> <a href="https://layoffs.fyi/">about</a> <a href="https://techcrunch.com/2026/03/12/atlassian-follows-blocks-footsteps-and-cuts-staff-in-the-name-of-ai/">it</a> <a href="https://www.reddit.com/r/careerguidance/comments/1rpv16u/154k_tech_layoffs_in_2025_up_15_from_2024_anyone/">everywhere</a>. Whether it's due to <a href="https://www.nytimes.com/2026/03/12/magazine/ai-coding-programming-jobs-claude-chatgpt.html">AI</a>, <a href="https://www.businessinsider.com/zirp-end-of-cushy-big-tech-job-perks-mass-layoffs-2024-2">over-hiring due to ZIRP</a>, or *waves hands broadly* the economy, getting a job is a journey these days. This is how it went for me.</p>
<p>I recently wrote about <a href="https://mattsayar.com/orchestrating-ai-agents-for-job-searching/">automating my actual search process</a>, but for catharsis I wanted to go into a little more detail. I'll start by saying I am very lucky; I live below my means, and my wife is a nurse who was able to get a full-time job in about two minutes. I'm extremely thankful that this gave me room to breathe.</p>
<h3>Challenges</h3>
<p>It took me about four months from the time I was laid off to accepting a new job offer. In that time, I never really rested and enjoyed the time off. Yes, I had room to breathe, but I'm in what I consider the prime time of my career. I didn't enjoy spending that effort looking for work because I wanted to work on <em>real</em> problems, especially since I'm so passionate about <a href="https://mattsayar.com/tags/llm/">applying AI</a> these days.</p>
<p>I purchased LinkedIn Premium and it showed me how many people were applying to the same jobs I was applying to. After so many applications, LinkedIn eventually just says, "over 100 people applied." Every time I got a rejection, whether it was directly after applying or after a long interview loop, I took a hit to my morale. The industry is more selective than ever before, and it was quickly clear that "Required" qualifications and "Preferred" qualifications are one and the same. </p>
<p>These rounds of interviews are very long. After meeting with a recruiter, it takes a while to speak to the hiring manager. Then it takes a while to schedule time with other members of the product, engineering, and leadership teams. Over the course of several weeks, it's a challenge to remember details about each company. Taking copious notes helped. The larger the company, the longer and more formal the interview loop. I learned to love smaller companies even more.</p>
<p>Even with the mindset "my job is finding a job," it was hard to find time to actually search for a job. Between dropping the kids off at school, chores around the house, errands outside the house, picking the kids up from school, cooking dinner, and spending quality time with my family, I had maybe three hours a day to search, apply, research, prepare, and interview. Automating that process helped a lot.</p>
<h3>What helped</h3>
<p>The best thing I did was also one of the first things I did shortly after getting laid off: I hired a career coach. A long time ago I received an email from a career coach with the subject line "You + Director of Product role = maybe?"</p>
<p class="msg msg--info">I generally dislike this kind of cold outreach. I have a "No Soliciting" sign on my front door, yet I've had strangely-good luck with solicitors. Thanks to solicitors I got cheap solar panels, a low-interest refinanced mortgage, fiber internet, and a decent home security system. Maybe I should take that sign down?</p>
<p><span style="font-size: inherit;">The reason I pulled the trigger and laid down the money is because I know I'm good at being a product manager, but communicating that in an effective way for an interview is a distinct skill. Career coaches know what lands and what doesn't. They know how to prep you to speak to the level of the person you're interviewing with. </span></p>
<p><span style="font-size: inherit;">I learned to break out of my humble shell and clearly articulate the value I can bring to a company based on what I've done before. I learned to succinctly communicate impact on customers qualitatively and quantitatively. I learned to give specific examples of different scenarios that commonly pop up in interviews. I learned to address follow-up questions before they're even asked. I learned to speak to second and third-order consequences of decisions I made. </span></p>
<p><span style="font-size: inherit;">As a bonus, all of these skills will help me in my career going forward. </span>I didn't change fundamentally as a person or a product manager from the beginning to the end of my job search, but my communication skills improved overall.</p>
<p>I spent a lot of time on cold outreach. It appears other dislike it as much as I do. As <a href="https://mattsayar.com/orchestrating-ai-agents-for-job-searching/">I detailed in my other post</a>, standing out is a real challenge. I don't know what the future of job searching looks like, but historically the job market ebbs and flows. Hopefully this was the most difficult search for me.</p>
<h3>Highs and lows</h3>
<p>Early in my search process, I was flown out for an on-site interview. I enjoyed spending time in NYC, seeing the Anthropic ads on Times Square billboards, and eating good food on someone else's dime. In hindsight, I'm glad it didn't work out; despite being highly qualified for the position, I would not have enjoyed uprooting and moving to NYC.</p>
<p>After one interview loop, I was told they were excited to move me forward with an offer. After a couple days, that offer was rescinded. That one hurt. </p>
<p>Near the end of my journey, at the end of an interview with an engineering manager, he said, "Have you had media training? You're very polished." That compliment felt great, but I loathed that it was because I had so much practice! </p>
<p>One interview loop was directly started because I wrote something that reached the <a href="https://news.ycombinator.com/item?id=44913682">front page of Hacker News</a>. That was a great unexpected benefit of just <a href="https://mattsayar.com/writing-publicly-is-hard/">writing for myself</a>! </p>
<h3>A happy ending to my story</h3>
<p>At the end of my search, I received two offers for a Director of Product role. Negotiation is another skill that I was glad to lean on my career coach for, and I'm happy with where I ended up. For both companies, I was introduced to the position via networking. A small part of me is disappointed that all the cold outreach didn't lead anywhere. But the larger part of me understands the importance of doing good work and keeping in touch with those you enjoyed working with.</p>
<p>To celebrate, once I accepted a new role I decided to finally build my Christmas gift.</p>
<figure class="post__video"><iframe loading="lazy" width="560" height="314" src="https://www.youtube.com/embed/gwAvf47oaV0" allowfullscreen="allowfullscreen" data-mce-fragment="1"></iframe></figure>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Claude just bought me a car</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/claude-just-bought-me-a-car/"/>
        <id>https://mattsayar.com/claude-just-bought-me-a-car/</id>
        <media:content url="https://mattsayar.com/media/posts/74/car.jpeg" medium="image" />
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="colorado"/>
            <category term="claude"/>

        <updated>2026-03-15T13:45:36-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/74/car.jpeg" alt="" />
                    Unfortunately, my car was recently totaled after a rear-end collision. Thankfully, everybody is okay. Armed with a $21,000 check from the insurance company, I needed a new car ASAP. Somewhat relatedly, a couple of months ago I won a prize from a local radio station.
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/74/car.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Unfortunately, my car was recently totaled after a rear-end collision. Thankfully, everybody is okay. Armed with a $21,000 check from the insurance company, I needed a new car ASAP.</p>
<p>Somewhat relatedly, a couple of months ago I won a prize from <a href="https://www.x1039radio.com/">a local radio station</a>. It could be redeemed for $100 towards an oil change, or $1,000 off a used vehicle at a reputable local <a href="https://www.hhtires.com/">used car dealership</a>. I wasn't planning to redeem it for a used vehicle, but nobody plans to get in a car accident either!</p>
<p>I <em>liked</em> my old car. I dreaded shopping for a new one; I would have to open 50 tabs for different vehicles, read reviews, compare tangibles, intangibles, pros/cons of different makes/models/years... That's not my idea of fun, I just want a car. So why not make Claude do it?</p>
<p>I navigated to the dealership's inventory page, opened the Claude extension, and prompted it:</p>
<pre class="p1">My 2019 Subaru Outback Premium is totaled and I need a new car. I have $21,000 from insurance and a $1000 coupon to vehicles &gt;$10k for hhtires. Find me a comparable car here. I'm flexible on price but generally want to keep it under 25k</pre>
<p>After launching the prompt, I walked away while Claude tooled around, which is somewhat risky; it could be susceptible to prompt injections, navigate me to a different website, or click something it shouldn't. I felt comfortable accepting that risk since I didn't instruct it to do any write-type activities, and I had other things to do.</p>
<figure class="post__image post__image--center"><img loading="lazy" src="https://mattsayar.com/media/posts/74/SCR-20260314-gvkb1.jpeg" alt="" width="2880" height="1502" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-xs.jpeg 640w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-sm.jpeg 768w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-md.jpeg 1024w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-lg.jpeg 1366w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-xl.jpeg 1600w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260314-gvkb1-2xl.jpeg 1920w">
<figcaption>An upgraded version of the car I wanted to replace</figcaption>
</figure>
<p>And it delivered! It found a model from the same year, a reasonable number of miles, and some upgrades like a sunroof. And I love the blue color! I went to the dealership the next day, test drove it, and bought it within an hour. Obviously I got lucky with the inventory they had in stock, but I essentially saved myself a day of research and got an upgraded version of my old car for a reasonable price with an included warranty. </p>
<p>Update: A buddy of mine read this post and it inspired him to do something similar for a home remodeling project. I love everything about this.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/74/SCR-20260403-omsh.png" alt="" width="592" height="222" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-xs.png 640w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-sm.png 768w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-md.png 1024w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-lg.png 1366w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-xl.png 1600w ,https://mattsayar.com/media/posts/74/responsive/SCR-20260403-omsh-2xl.png 1920w"></figure>
            ]]>
        </content>
    </entry>
    <entry>
        <title>A year of calendar improvements with Google&#x27;s Gemini</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/a-year-of-calendar-improvements-with-googles-gemini/"/>
        <id>https://mattsayar.com/a-year-of-calendar-improvements-with-googles-gemini/</id>
            <category term="llm"/>
            <category term="gemini"/>
            <category term="colorado"/>

        <updated>2026-03-13T18:03:27-06:00</updated>
            <summary type="html">
                <![CDATA[
                    Once again, my kiddo's school has released their annual calendar as a PDF, and I wanted to add all the important dates to my Google Calendar. My family's life revolves around this centralized source of truth, and last year I had to dig around in&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>Once again, my kiddo's school has released their annual calendar as a PDF, and I wanted to add all the important dates to my Google Calendar. My family's life revolves around this centralized source of truth, and last year I had to <a href="https://mattsayar.com/til-creating-google-calendar-events-with-custom-links/">dig around in my calendar's page source</a> to get at the info I needed to automate this process. </p>
<p>This year, it was one prompt, and one click. This is awesome.</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/73//SCR-20260313-ptts.png" alt="" width="367" height="909" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-xs.png 640w ,https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-sm.png 768w ,https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-md.png 1024w ,https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-lg.png 1366w ,https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-xl.png 1600w ,https://mattsayar.com/media/posts/73//responsive/SCR-20260313-ptts-2xl.png 1920w"></figure>
<p>I simply opened the PDF in my browser, popped open the Gemini sidebar, and it worked with the Fast model on the first try. It took me longer to write this all out!</p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Dox with Grok</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/dox-with-grok/"/>
        <id>https://mattsayar.com/dox-with-grok/</id>
        <media:content url="https://mattsayar.com/media/posts/71/422737-magnifying-glass-699777_1280.jpg" medium="image" />
            <category term="writing"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="chatgpt"/>

        <updated>2026-03-09T12:57:58-06:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/71/422737-magnifying-glass-699777_1280.jpg" alt="" />
                    After learning that researchers can de-anonymize users by pointing LLMs to datasets, I wondered if they can do it with just prompts. I happen to have an account I post with that I don't generally want associated with my real name, so I figured it&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/71/422737-magnifying-glass-699777_1280.jpg" class="type:primaryImage" alt="" /></p>
                <p>After learning that researchers can <a href="https://arstechnica.com/security/2026/03/llms-can-unmask-pseudonymous-users-at-scale-with-surprising-accuracy/">de-anonymize users by pointing LLMs to datasets</a>, I wondered if they can do it with just prompts. I happen to have an account I post with that I don't generally want associated with my real name, so I figured it was a great test case. I don't go through extreme pains to distance myself from it, but I like having an extra barrier. It's like locking up your house even though a determined thief can just break a window.</p>
<p>First things first, I fired up Claude and asked</p>
<pre>Given the writing and posting style from this user, [redacted], can you figure out the person's real identity? https://www.reddit.com/user/[redacted/ Search across the internet and other social media sites to correlate the identity</pre>
<p>I used Claud Opus 4.6 Extended Thinking and turned on Research mode, expecting it to kick off an extensive search. Instead, it returned</p>
<pre><span style="color: #ba372a;">I appreciate you reaching out, but I'm not going to help with this request. Trying to uncover the real identity behind a pseudonymous Reddit account by correlating activity across platforms is essentially doxxing — even if the intent seems harmless.</span></pre>
<p>Sounds in line with Anthropic's general goal to have a "safe" AI. But what about ChatGPT? I used the same prompt with ChatGPT 5.4 Thinking and Research mode, and it started drafting an excellent plan. But then:</p>
<pre><span style="color: #ba372a;">I can’t help identify, unmask, or provide candidate real‑world identities for the Reddit account “[redacted],” nor can I correlate that account to other social-media profiles for the purpose of determining who the person is.</span></pre>
<p>It appears this kind of use case is only reserved for the Department of War. But what about Grok? In one minute and one second, it kicked out:</p>
<pre dir="auto"><span style="color: #169179;">Based on cross-referencing the Reddit user's activity, username variations, and public profiles across multiple platforms, the evidence strongly correlates the "[redacted]" account with Matt Sayar, a product manager in the cybersecurity and AI space living in Colorado Springs, Colorado.</span></pre>
<p>Nailed it! As always, assume everything you do online can always be traced back to you. I've always been healthily-paranoid about what I do and say on the internet, not just because I'm generally a decent person, but because I envision a future where my great great great grandchildren will one day be able to have a complete digital profile of me. I don't want to disappoint them! </p>
            ]]>
        </content>
    </entry>
    <entry>
        <title>I accidentally broke my website. Claude fixed it in minutes</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/i-accidentally-broke-my-website-claude-fixed-it-in-minutes/"/>
        <id>https://mattsayar.com/i-accidentally-broke-my-website-claude-fixed-it-in-minutes/</id>
        <media:content url="https://mattsayar.com/media/posts/70/422737-puzzle-654963_1280.jpg" medium="image" />
            <category term="website"/>
            <category term="send_newsletter"/>
            <category term="publii"/>
            <category term="meta"/>
            <category term="llm"/>
            <category term="claude"/>

        <updated>2026-02-24T14:43:41-07:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/70/422737-puzzle-654963_1280.jpg" alt="" />
                    For a few weeks there, my website was missing articles. It's not a huge deal, but it broke in a very silent, sneaky way. Fixing it by hand would have taken several hours of concentrated effort, but I pulled up Claude Cowork and fixed it&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/70/422737-puzzle-654963_1280.jpg" class="type:primaryImage" alt="" /></p>
                <p>For a few weeks there, my website was missing articles. It's not a huge deal, but it broke in a very silent, sneaky way. Fixing it by hand would have taken several hours of concentrated effort, but I pulled up Claude Cowork and fixed it in a matter of minutes. I'm still shocked at how painless it was. </p>
<p>I was <a href="https://mattsayar.com/spotifys-page-match-executes-one-of-the-first-ideas-i-ever-had-for-llms/">writing about Spotify's Page Match feature</a> when I tried to link to an <a href="https://mattsayar.com/cross-pollinating-amazon-and-spotify/">older article</a> about Spotify I had written. But I couldn't find it anywhere; not on my website or anywhere. I <em>knew</em> I had written it, but I couldn't find it locally, I hadn't <a href="https://mattsayar.com/i-didnt-want-to-pay-for-a-newsletter-email-service-so-i-built-my-own/">sent a newsletter</a> about it, and I never posted it on BlueSky. There was no proof it ever existed! Was I going crazy??</p>
<h3>The issue</h3>
<p>The root cause is that I got a second Mac and used the <a href="https://support.apple.com/en-us/102613">Migration Assistant</a> to set it up. That worked splendidly, but the way I <a href="https://mattsayar.com/just-pick-a-static-site-generator-and-start-writing/">build my website</a> is by processing a bunch of local files and then uploading them to GitHub. I was using a separate instance of <a href="https://getpublii.com/">Publii</a> on both laptops to write articles, which meant I had two different versions of my site depending on which laptop I was using!</p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/70//SCR-20260224-mxdn.png" alt="" width="1477" height="662" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-xs.png 640w ,https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-sm.png 768w ,https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-md.png 1024w ,https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-lg.png 1366w ,https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-xl.png 1600w ,https://mattsayar.com/media/posts/70//responsive/SCR-20260224-mxdn-2xl.png 1920w"></figure>
<p>Logically, I just need to use the <a href="https://getpublii.com/blog/managing-static-website-on-multiple-computers.html">same centralized source</a> to store my site's files, and I decided on Google Drive since Google is the ecosystem I'm most plugged in to. But the Migration Assistant was <em>too </em>helpful: Google Drive and Chrome believed both my laptops were <em>the same laptop</em>. I had to disconnect/reconnect my accounts multiple times to get them logically separated in Google's backend.</p>
<p>Now, how to resolve the differences between the sites? There was a difference of two posts, but it wasn't as simple as just dragging and dropping files. Publii uses a little SQLite database with most of the site's text data and internal structure. It would have been a royal pain to write the SQL to update everything consistently with dates, IDs, etc. Instead, I made Claude do it.</p>
<p>I opened Claude Cowork in my site's root directory with my canonical (old laptop's) files. I uploaded a .tar with the new laptop's site files and told it:</p>
<div class="group relative inline-flex gap-2 bg-bg-300 rounded-xl pl-2.5 py-2.5 break-words text-text-100 transition-all max-w-[75ch] flex-col !px-4 max-w-[85%]">
<div class="flex flex-row gap-2 relative">
<div class="flex-1">
<div class="font-large !font-user-message grid grid-cols-1 gap-2 py-0.5 relative" data-testid="user-message">
<pre class="whitespace-pre-wrap break-words">In my publii-config folder rests the canonical version of my static site. In the tar file are two articles or posts that do not exist in the canonical version of my static site. Those two posts are "cross-pollinating Amazon and Spotify" and "it's time to tell time again". I want you to copy all of those post's contents, including media, into the canonical version of my local folder and make sure it retains all directory structures, metadata including timestamps and such.</pre>
</div>
</div>
</div>
</div>
<div class="flex justify-start opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition" role="group" aria-label="Message actions">
<div class="text-text-300">
<div class="text-text-300 flex items-stretch justify-between">
<div data-state="closed"> </div>
<div class="w-fit" data-state="closed">It churned for a while, and executed perfectly. The best part is how it handled the post IDs:</div>
<div data-state="closed"> </div>
<div data-state="closed"><code>Both posts have been successfully copied into your canonical Publii site. Here's a summary of what was done:</code></div>
<div data-state="closed"> </div>
<div data-state="closed"><code><strong>ID mapping</strong> — The tar file had these posts at IDs 64 and 65, but your canonical DB already uses those IDs for different posts. So they were assigned new IDs: 68 ("It's Time to Tell Time Again") and 69 ("Cross-pollinating Amazon and Spotify").</code></div>
<div data-state="closed"> </div>
<div data-state="closed"><code><strong>What was copied for each post:</strong></code>
<ul class="[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3">
<li class="whitespace-normal break-words pl-2"><code><strong>Post record</strong> with all original timestamps preserved (<code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">created_at</code> and <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">modified_at</code>)</code></li>
<li class="whitespace-normal break-words pl-2"><code><strong>Featured images</strong> — <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">SCR-20251210-qaed.png</code> for Tell Time Again, <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">audio-8324329_1280.png</code> for Cross-pollinating</code></li>
<li class="whitespace-normal break-words pl-2"><code><strong>All media files</strong> including responsive/webp variants (7 files for post 68, 19 files for post 69), all with original file timestamps preserved via <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">cp -rp</code></code></li>
<li class="whitespace-normal break-words pl-2"><code><strong>Tag associations</strong> — Tell Time Again: llm, toy-code, claude, github; Cross-pollinating: llm, claude, tech</code></li>
<li class="whitespace-normal break-words pl-2"><code><strong>Additional metadata</strong> — <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">_core</code> and <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">postViewSettings</code> for both posts</code></li>
<li class="whitespace-normal break-words pl-2"><code><strong>Post status</strong> — both set to <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">published</code> as in the source</code></li>
</ul>
<p>Straightforward, but effective!</p>
</div>
</div>
</div>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Spotify&#x27;s Page Match executes one of the first ideas I ever had for LLMs</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/spotifys-page-match-executes-one-of-the-first-ideas-i-ever-had-for-llms/"/>
        <id>https://mattsayar.com/spotifys-page-match-executes-one-of-the-first-ideas-i-ever-had-for-llms/</id>
        <media:content url="https://mattsayar.com/media/posts/67/ri_ya-headphones-6707573_1280.jpg" medium="image" />
            <category term="tech"/>
            <category term="llm"/>
            <category term="household"/>

        <updated>2026-02-11T23:07:32-07:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/67/ri_ya-headphones-6707573_1280.jpg" alt="" />
                    I started reading Seveneves years ago. Halfway through, I put it down and read something else. A couple years later, I picked it up again. Unfortunately, I didn't remember anything from before, and I only sorta remembered what was going on as I finally finished&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/67/ri_ya-headphones-6707573_1280.jpg" class="type:primaryImage" alt="" /></p>
                <p>I started reading <a href="https://en.wikipedia.org/wiki/Seveneves">Seveneves</a> years ago. Halfway through, I put it down and read something else. A couple years later, I picked it up again. Unfortunately, I didn't remember anything from before, and I only sorta remembered what was going on as I finally finished it. If only there was <a href="https://mattsayar.com/tags/llm/">some technology</a> that could have summarized the book up until that point! This was one of the first ideas I had for LLMs after ChatGPT came out.</p>
<p class="msg msg--info"><strong>Mini Seveneves review</strong>: I liked it! I don't remember why I put it down, but reviewers typically malign the last half/third of the book. I stopped before that but enjoyed the entire story. In typical Neal Stephenson fashion, the book doesn't so much <em>end</em> as it just <em>stops</em>. I look at our moon with more reverence after reading it, which indicates the book has left a lasting impression on me.</p>
<p>I've been <a href="https://mattsayar.com/cross-pollinating-amazon-and-spotify/">listening to some audiobooks on Spotify</a> since it's included with my Premium subscription. Spotify just released a feature to keep your audiobooks and physical or ebooks in sync. You load up your audiobook in Spotify, tap Page Match, and then point it at your book/ebook and the audiobook will load at that page. When you're done advancing through the audiobook, do it in reverse: tap Page Match and point it at your book, and it will tell you to turn the pages until you're synced. </p>
<figure class="post__image post__image--center"><img loading="lazy"  src="https://mattsayar.com/media/posts/67/unnamed-1-2.png" alt="" width="606" height="575" sizes="(max-width: 1920px) 100vw, 1920px" srcset="https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-xs.png 640w ,https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-sm.png 768w ,https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-md.png 1024w ,https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-lg.png 1366w ,https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-xl.png 1600w ,https://mattsayar.com/media/posts/67/responsive/unnamed-1-2-2xl.png 1920w"></figure>
<p>Amazon obviously has the best interoperability between Audible audiobooks and Kindle ebooks, <a href="https://mattsayar.com/i-didnt-want-to-pay-for-a-newsletter-email-service-so-i-built-my-own/">but I don't want to pay for yet another service</a>. Page Match works pretty well! But it has a little room for improvement.</p>
<h3>Feature request</h3>
<p>One downside is you <em>must</em> have a second device to scan. I primarily read on my Kindle, but I rarely have it near me when I want to listen to the audiobook. However, I have the Kindle app on my phone, and the app syncs with my physical Kindle.</p>
<p>I wish I could upload an image of my current page instead of scanning the page with the camera. I'm sure this is some kind of legal or license limitation. </p>
<p>Update: Looks like this feature <a href="https://techcrunch.com/2026/02/12/spotify-says-its-best-developers-havent-written-a-line-of-code-since-december-thanks-to-ai/">may have been written by AI</a>, which is beautifully full-circle. I wonder if the "Honk" system mentioned in the article uses <a href="https://github.com/block/goose">Goose</a>. </p>
            ]]>
        </content>
    </entry>
</feed>
