<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Sushil Buragute: Finds</title>
        <link>https://sush.dev/</link>
        <description>Interesting finds and links curated by Sushil Buragute</description>
        <lastBuildDate>Thu, 20 Aug 2026 11:16:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Sushil Buragute: Finds</title>
            <url>https://sush.dev/favicon.ico</url>
            <link>https://sush.dev/</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <atom:link href="https://sush.dev/finds/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Claude Opus 5 Lands, and I Pointed It at This Repo]]></title>
            <link>https://sush.dev/finds/claude-opus-5</link>
            <guid isPermaLink="false">https://sush.dev/finds/claude-opus-5</guid>
            <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Anthropic shipped Opus 5 on July 24. I gave it my own portfolio to audit, and the useful part was not the code it wrote.]]></description>
            <content:encoded><![CDATA[<p>Anthropic shipped Claude Opus 5 on July 24, and the pitch is unusually easy to summarize: close to the frontier intelligence of their top model, Fable 5, at roughly half the price. Pricing sits at $5 per million input tokens and $25 per million output, identical to Opus 4.8, which makes it a straight upgrade rather than a new tier to budget for. It is now the default on Claude Max and the strongest model available on Pro.</p>
<p><a href="https://www.anthropic.com/news/claude-opus-5"><strong>Introducing Claude Opus 5</strong></a><br>
Anthropic's everyday model for developers and knowledge work, at half the price of Fable 5.</p>
<p>The thing it turned out to be good at was not writing code. It was reading a codebase and telling me what was a miss with it.</p>
<p>I pointed it at this portfolio, and the findings were not the ones I expected. It showed the intelligence similar to that of Fable 5, but less token hungry than it!</p>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>AI</category>
            <category>Claude</category>
            <category>Tooling</category>
        </item>
        <item>
            <title><![CDATA[Next.js Is Rethinking Prefetching, and It Is About Time]]></title>
            <link>https://sush.dev/finds/nextjs-instant-navigations</link>
            <guid isPermaLink="false">https://sush.dev/finds/nextjs-instant-navigations</guid>
            <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The 16.3 preview stops firing one prefetch per link and caches a single reusable shell per route instead.]]></description>
            <content:encoded><![CDATA[<p>If you have ever opened the Network tab on a production Next.js app and watched it fire a separate prefetch request for every single link that scrolled into view, this post is the one you have been waiting for. Vercel's framing is blunt about it: many of you told us this looked ridiculous, and frankly, we agree.</p>
<p><a href="https://nextjs.org/blog/next-16-3-instant-navigations"><strong>Next.js 16.3: Instant Navigations</strong></a><br>
Partial Prefetching, Instant Insights, and a reusable loading shell per route.</p>
<p>The fix borrows the one genuinely good idea from single-page apps. Instead of prefetching per link, Next.js now prefetches a reusable shell per route and caches it on the client for the session. A sidebar with twenty chat links used to mean twenty requests; now it means one, for the <code>/chat/[id]</code> route, reused across all of them. It is the same mental model as per-route code splitting, applied to data fetching.</p>
<p>The other half is a diagnostic rather than an optimization, and I suspect it will change more codebases than the prefetching does. Slow navigations become an actual error in development. When a route awaits data, you are pushed to pick one of three options: Stream it with <code>&#x3C;Suspense></code>, Cache it with <code>'use cache'</code>, or explicitly opt out with <code>export const instant = false</code>. That last one matters, because "this route should block" is a legitimate choice for a blog post, and being made to state it out loud is better than having it happen by accident. There is also an <code>instant()</code> Playwright helper so you can assert what must be visible before the network resolves, which is the first time I have seen a framework ship a test primitive for perceived performance.</p>
<blockquote><p>This is the 16.3 <strong>preview</strong>, not a stable release. You install it with <code>npm   install next@preview</code>, and both features are behind <code>cacheComponents: true</code>
and <code>partialPrefetching: true</code> flags. There are known issues, including some
Instant Insights tooling that misbehaves in Safari.</p></blockquote>
<p>I am staying on stable 16.2 here for now, partly because this site is almost entirely static and gets very little out of smarter prefetching. But the direction is right, and the honesty about the old behaviour is refreshing. The framework spent a couple of years insisting the prefetch flurry was fine, and it is genuinely good to see that walked back rather than defended.</p>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>Next.js</category>
            <category>Performance</category>
            <category>React</category>
        </item>
        <item>
            <title><![CDATA[CSS Gap Decorations: Dividers Without Borders or Pseudo-Elements]]></title>
            <link>https://sush.dev/finds/css-gap-decorations</link>
            <guid isPermaLink="false">https://sush.dev/finds/css-gap-decorations</guid>
            <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Chromium 149 shipped row-rule and extended column-rule to grid and flex. The hairline divider hack finally has a real property.]]></description>
            <content:encoded><![CDATA[<p>Every list on this site is separated by a hairline, and every one of those hairlines is a compromise. You either put a <code>border-bottom</code> on each row and then fight to remove it from the last one, or you reach for <code>::after</code> with an absolutely positioned line, or you nest a divider element that exists purely to be one pixel tall. Gap decorations, shipped in Chrome and Edge 149, make all of that unnecessary.</p>
<p><a href="https://developer.chrome.com/blog/gap-decorations-stable"><strong>Gap decorations: Now available in Chromium</strong></a><br>
row-rule, column-rule for grid and flex, and insets for controlling how far a line runs.</p>
<p>The design is the part I like: rather than invent a new syntax, it extends <code>column-rule</code> (which has existed for multi-column layout for years) to work in grid and flexbox, then adds <code>row-rule</code> as its counterpart. The shorthand takes width, style, and color, exactly like <code>border</code>, so there is nothing new to learn.</p>
<pre><code class="language-css" metastring="title=&#x22;A separated list, with no per-item borders&#x22;">.row-list {
  display: grid;
  gap: 1.5rem;
  row-rule: 1px solid var(--color-hairline);
}
</code></pre>
<p>That draws a line in each gap, which means N items produce N-1 dividers. No last-child override, no off-by-one, no pseudo-element. There are also <code>row-rule-inset</code> and <code>column-rule-inset</code> properties for pulling the line back from the edges of the gap, which is how you get the inset dividers that most design systems actually want. Critically, the decorations are purely visual: they do not participate in layout or change spacing, so you can add them to an existing grid without anything shifting.</p>
<p>The caveat is the obvious one. This is Chromium 149 only right now, not Baseline, so Firefox and Safari users see no line at all. That makes it a progressive enhancement rather than a migration: keep the borders you have, or accept that the divider is decorative and let it be absent. I am holding off on ripping out my own hairlines until Firefox lands it, but this is the first time in a while that a new CSS property has replaced a hack I actively resented.</p>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>CSS</category>
            <category>Layout</category>
            <category>Design</category>
        </item>
    </channel>
</rss>