<?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-04-17T19:00:44-06:00</updated>
    <author>
        <name>Matt Sayar</name>
    </author>
    <id>https://mattsayar.com</id>

    <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>
    <entry>
        <title>Orchestrating AI Agents for Job Searching</title>
        <author>
            <name>Matt Sayar</name>
        </author>
        <link href="https://mattsayar.com/orchestrating-ai-agents-for-job-searching/"/>
        <id>https://mattsayar.com/orchestrating-ai-agents-for-job-searching/</id>
        <media:content url="https://mattsayar.com/media/posts/66/artesitalia-conductor-5157153_1920.jpg" medium="image" />
            <category term="tech"/>
            <category term="send_newsletter"/>
            <category term="llm"/>
            <category term="claude"/>

        <updated>2026-02-10T11:41:13-07:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://mattsayar.com/media/posts/66/artesitalia-conductor-5157153_1920.jpg" alt="" />
                    I got tired of all the manual processes involved with job searching and wrote a Claude Cowork plugin to automate the boring parts. My typical search process looks like this: Working with my career coach (the excellent Alex Gould) I've automated bits and pieces of&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://mattsayar.com/media/posts/66/artesitalia-conductor-5157153_1920.jpg" class="type:primaryImage" alt="" /></p>
                <p>I got tired of all the manual processes involved with job searching and wrote a <a href="https://claude.com/product/cowork">Claude Cowork</a> plugin to automate the boring parts.</p>
<p>My typical search process looks like this:</p>
<ol>
<li>Find jobs on LinkedIn that seem to be a good fit for me, typically using LinkedIn's "<a href="https://www.linkedin.com/jobs/collections/top-applicant/">Top Applicant</a>" feature.</li>
<li>Review the job description and verify that it meets my criteria for background fit, salary, location, etc.</li>
<li>Look for the hiring manager or recruiter for that position. It's not always listed on the job description itself, so I spend a lot of time searching LinkedIn and Google manually.</li>
<li>Tailor my resume to the job description.</li>
<li>Fill out the application. Sometimes, this means writing a cover letter.</li>
<li>Record a Loom video of myself to introduce myself to the recruiter and/or hiring manager.</li>
<li>Email my resume and Loom video to the decision makers </li>
</ol>
<p>Working with my career coach (the excellent <a href="https://www.linkedin.com/in/alexandermgould/">Alex Gould</a>) I've automated bits and pieces of this process, but most of it is ripe for automation with LLMs.</p>
<p>Claude Cowork ships with some <a href="https://support.claude.com/en/articles/13345190-getting-started-with-cowork#h_0f9e0998dd">out-of-the-box plugins</a>, but I wanted to make my own specifically tailored to job searching.</p>
<h3>How I made the plugin</h3>
<p>I used Claude to write more Claude. Anthropic dogfoods Claude extensively, which is how <a href="https://x.com/barry_zyj/status/1978951690452615413">they made skills that power Cowork in the first place</a>. I recently read a <a href="https://news.ycombinator.com/item?id=46947409">Hacker News comment</a> with an appealing workflow, and I wanted to emulate that setup. I'm using a Mac instead of Linux, so my setup is more like:</p>
<ul>
<li>Window management: <a href="https://rectangleapp.com/">Rectangle</a></li>
<li>Voice dictation: <a href="https://goodsnooze.gumroad.com/l/macwhisper">MacWhisper</a> (paid version)</li>
<li>LLM: <a href="https://support.claude.com/en/articles/11049741-what-is-the-max-plan">Claude Max</a> (yes, I upgraded for more Opus)</li>
</ul>
<p class="msg msg--highlight ">Writing (and using!) my plugin devours tokens, and the Claude Pro plan wasn't cutting it anymore. I almost exclusively use the new Opus 4.6, which consumes more usage. The previous models, even the formerly-impressive Sonnet 4.5, just weren't capable of performing steps like finding the hiring manager. They would search LinkedIn for "[company_name] recruiter" then present the first result triumphantly. Opus 4.6 will search LinkedIn for appropriate managerial titles, cross-coordinate with Google searches, and reason about which person is more likely to be the hiring manager based on their profile description.</p>
<p>Next, I spun up a GitHub repo and told Claude to use <a href="https://github.com/anthropics/knowledge-work-plugins">Anthropic's</a> as a template to create a <code>job-search-coworker</code> plugin. Then, I used Claude Code to orchestrate four different agents to work on four independent commands:</p>
<ul>
<li><code>find-leads</code> This will open LinkedIn in my browser and go through my Top Applicant positions and pull them in to a spreadsheet. </li>
<li><code>customize-resume</code> Given a job description, or link to one, it will take my master resume and tailor it to the job description. </li>
<li><code>find-decision-makers</code> Given a job description, it will find the recruiter and hiring manager for that position.</li>
<li><code>generate-loom-script</code> With all the information above, it will help me write a quick script that I can use to record a video of myself introducing myself to the decision makers. </li>
</ul>
<p>While each agent was working on each command, I was able to bounce between them and iterate as they completed at different times. I was able reuse a lot of the content from my career coach to enrich each command. That information isn't free, otherwise I'd show my work! </p>
<p>All of these commands coordinate their operations via a centralized Google Sheet. When using this plugin, each row is associated with a position where I can track my application status and prevent duplicate entries each time I run <code>find-leads</code>.</p>
<h3>Usage</h3>
<p>Running this involves loading Claude Cowork and firing off the <code>find-leads</code> command, reviewing the spreadsheet and pruning rows/positions I don't like, then firing off <code>find-decision-makers</code> followed by <code>customize-resume</code> and <code>generate-loom-script</code>.</p>
<p>For future improvements I've considered having it write the cover letters, fill out the application fields, and sending the emails. However, I hesitate with each of these features. For cover letters, I'm happy to have the LLM write a first draft, but I <em>like</em> writing (see: this site) and I want to keep my human touch there. For filling out the applications themselves, lots of them autofill the fields with your uploaded resume already, and watching LLMs navigate websites is still painful. For sending the emails, I still struggle mightily with allowing LLMs access to my email, especially since prompt injection is a risk that <a href="https://simonwillison.net/tags/prompt-injection/">still isn't solved</a>.</p>
<p>To be clear, this is still an involved process. I don't believe in the "spray-and-pray" approach to job hunting. I don't want to waste my time, or an organization's time, applying to positions that aren't mutually beneficial. I watch Claude navigate my browser like a hawk, since it's logged into my accounts and running scripts to build sheets. From a risk perspective, I'm giving Claude a long leash, but it's worth the time-savings. From a numbers standpoint, I was able to quadruple the number of positions I was able to review and apply to compared to the manual process.</p>
<p>Now that I'm done productively procrastinating, it's time to buckle down and start applying. But let me publish this post first...</p>
            ]]>
        </content>
    </entry>
</feed>
