<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Paulund</title>
    <link>https://paulund.co.uk</link>
    <description>Developer notebook — articles on AI, and software engineering.</description>
    <language>en</language>
    <lastBuildDate>Mon, 01 Jun 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://paulund.co.uk/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Software Factory: Build Factories, Not Features</title>
      <link>https://paulund.co.uk/notebook/ai/software-factory-build-factories-not-features</link>
      <description>How senior engineers build software factories: agentic pipelines that autonomously plan, build, validate, and ship features, compounding output over time.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/software-factory-build-factories-not-features</guid>
    </item>
    <item>
      <title>Small npm Packages Are Mostly Dead</title>
      <link>https://paulund.co.uk/notebook/ai/small-npm-packages-are-mostly-dead</link>
      <description>Why AI-generated code replaces the need for small npm packages, and where the line is between a dependency you still need and one an LLM can write on th...</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/small-npm-packages-are-mostly-dead</guid>
    </item>
    <item>
      <title>The Four Levels of Working with AI</title>
      <link>https://paulund.co.uk/notebook/ai/the-four-levels-of-working-with-ai</link>
      <description>Matt Maher&apos;s four-level framework reveals most developers are stuck at level 2. Here is what level 3 looks like in practice and why it matters to move up.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/the-four-levels-of-working-with-ai</guid>
    </item>
    <item>
      <title>What Happens to Developers Who Don&apos;t Adapt to AI</title>
      <link>https://paulund.co.uk/notebook/ai/what-happens-to-developers-who-dont-adapt-to-ai</link>
      <description>Which developer skills depreciate and appreciate in 2026, why half-adopting AI is riskier than refusing it, and advice for engineers who feel left behind.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/what-happens-to-developers-who-dont-adapt-to-ai</guid>
    </item>
    <item>
      <title>How AI Agents Made Me CLI-First</title>
      <link>https://paulund.co.uk/notebook/ai/how-ai-agents-made-me-cli-first</link>
      <description>How AI agents pulled me into the terminal and changed the way I work. The story of goldcli, automation, and why everything is a command now.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/how-ai-agents-made-me-cli-first</guid>
    </item>
    <item>
      <title>How I Build Software With Agent Loops</title>
      <link>https://paulund.co.uk/notebook/ai/how-i-build-software-with-agent-loops</link>
      <description>The AI-assisted development workflow I use every day. From HITL planning to AFK implementation, risk-gated PRs, and continuous learning loops.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/how-i-build-software-with-agent-loops</guid>
    </item>
    <item>
      <title>paulund/goldcli v1.1.0 - Caching layer keeps you under the API free tier</title>
      <link>https://paulund.co.uk/releases/goldcli-v110-caching-layer-for-gold-prices</link>
      <description>goldcli v1.1.0 adds local caching for gold price API responses, cutting redundant requests and keeping you safely inside the 100-request-per-month free ...</description>
      <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/releases/goldcli-v110-caching-layer-for-gold-prices</guid>
    </item>
    <item>
      <title>Higher-Order Components and Why Hooks Replaced Them</title>
      <link>https://paulund.co.uk/notebook/react/higher-order-components-and-why-hooks-replaced-them</link>
      <description>What higher-order components are, how they worked in class-based React, and why hooks are a better solution for the same problems.</description>
      <pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/higher-order-components-and-why-hooks-replaced-them</guid>
    </item>
    <item>
      <title>Pure Components and Why Purity Matters in React</title>
      <link>https://paulund.co.uk/notebook/react/pure-components-and-why-purity-matters</link>
      <description>Learn why React treats your components like pure functions and how keeping renders side-effect free makes your app predictable, testable, and less buggy.</description>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/pure-components-and-why-purity-matters</guid>
    </item>
    <item>
      <title>React Fragments and When You Actually Need Them</title>
      <link>https://paulund.co.uk/notebook/react/fragments-and-when-you-actually-need-them</link>
      <description>Why React components must return a single root element, how Fragments solve this without polluting the DOM, and the three ways to write them.</description>
      <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/fragments-and-when-you-actually-need-them</guid>
    </item>
    <item>
      <title>Refs and when useRef beats useState</title>
      <link>https://paulund.co.uk/notebook/react/refs-and-when-useref-beats-usestate</link>
      <description>I used to reach for useState for everything. Here is why useRef is often the better tool for values that do not need to trigger a re-render.</description>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/refs-and-when-useref-beats-usestate</guid>
    </item>
    <item>
      <title>Default Props and Optional Props in React</title>
      <link>https://paulund.co.uk/notebook/react/default-props-optional-props-react</link>
      <description>How to type optional props in TypeScript and set sensible defaults without reaching for the deprecated defaultProps API.</description>
      <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/default-props-optional-props-react</guid>
    </item>
    <item>
      <title>Handling Form Submission in React</title>
      <link>https://paulund.co.uk/notebook/react/handling-form-submission-in-react</link>
      <description>How to handle form submission in React: async submit handlers, loading states, error display, and resetting the form after success.</description>
      <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/handling-form-submission-in-react</guid>
    </item>
    <item>
      <title>Client-side validation before Server Actions in Next.js</title>
      <link>https://paulund.co.uk/notebook/nextjs/client-side-validation-before-server-actions</link>
      <description>Server Actions do not replace client-side validation. Catch invalid form input early and stop unhandled errors from becoming 500 responses.</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/client-side-validation-before-server-actions</guid>
    </item>
    <item>
      <title>Type-Safe Adapter Registries with as const and satisfies</title>
      <link>https://paulund.co.uk/notebook/typescript/type-safe-adapter-registries-with-as-const-and-satisfies</link>
      <description>Learn how to replace hard-coded service calls with a type-safe adapter registry using TypeScript&apos;s as const, satisfies, and derived union types.</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/typescript/type-safe-adapter-registries-with-as-const-and-satisfies</guid>
    </item>
    <item>
      <title>Using Service Interfaces and Null Objects for Resilient TypeScript Scripts</title>
      <link>https://paulund.co.uk/notebook/typescript/using-service-interfaces-and-null-objects-for-resilient-typescript-scripts</link>
      <description>How to combine service interfaces, factory functions, and the Null Object pattern to build TypeScript scripts that run safely without credentials or thi...</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/typescript/using-service-interfaces-and-null-objects-for-resilient-typescript-scripts</guid>
    </item>
    <item>
      <title>Validating Multi-Provider Credentials with Zod Discriminated Unions</title>
      <link>https://paulund.co.uk/notebook/typescript/validating-multi-provider-credentials-with-zod-discriminated-unions</link>
      <description>How to use Zod&apos;s discriminatedUnion to validate per-platform credentials, with a runtime-injected discriminant and TypeScript narrowing at call sites.</description>
      <pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/typescript/validating-multi-provider-credentials-with-zod-discriminated-unions</guid>
    </item>
    <item>
      <title>paulund/ai v3.1.0 - Writing Humanizer skill</title>
      <link>https://paulund.co.uk/releases/paulundai-v310-writing-humanizer-skill</link>
      <description>v3.1.0 adds a dedicated Writing Humanizer skill to the collection, giving Claude Code a structured way to strip AI-generated patterns from text.</description>
      <pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/releases/paulundai-v310-writing-humanizer-skill</guid>
    </item>
    <item>
      <title>Building a URL Shortener with Next.js</title>
      <link>https://paulund.co.uk/notebook/nextjs/building-url-shortener-nextjs</link>
      <description>How to design the data model, slug generator, and IP hashing for a short-link service using Prisma, Web Crypto, and HMAC-SHA256 for anonymised click tra...</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/building-url-shortener-nextjs</guid>
    </item>
    <item>
      <title>Magic Link Authentication in Next.js</title>
      <link>https://paulund.co.uk/notebook/apis/magic-link-authentication-nextjs</link>
      <description>How to build passwordless sign-in with email magic links using Supabase Auth, a React Email template, and a clean service wrapper around the OTP flow.</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/apis/magic-link-authentication-nextjs</guid>
    </item>
    <item>
      <title>API Key Management in Next.js</title>
      <link>https://paulund.co.uk/notebook/apis/api-key-management-nextjs</link>
      <description>How to generate, hash, store, and revoke API keys in a Next.js app using SHA-256 hashing, server actions, and cross-project guards.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/apis/api-key-management-nextjs</guid>
    </item>
    <item>
      <title>paulund/ai v3.0.0 - Skills-only layout and new planning skills</title>
      <link>https://paulund.co.uk/releases/paulundai-v300-skills-only-layout-and-new-skills</link>
      <description>v3.0.0 removes the Claude plugin system in favour of a flat skills directory, and adds plan, ship, and several developer workflow skills.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/releases/paulundai-v300-skills-only-layout-and-new-skills</guid>
    </item>
    <item>
      <title>Transactional Email with Resend and React Email</title>
      <link>https://paulund.co.uk/notebook/nextjs/transactional-email-resend-react-email</link>
      <description>How to build a mailer module that renders React Email templates and sends through Resend, with test-time capture so you never send real emails from CI.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/transactional-email-resend-react-email</guid>
    </item>
    <item>
      <title>Type Annotations vs Type Inference: When to Write the Type</title>
      <link>https://paulund.co.uk/notebook/typescript/type-annotations-vs-type-inference</link>
      <description>TypeScript can infer most types on its own, but knowing when to add an explicit annotation anyway is what separates readable code from a sea of colons.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/typescript/type-annotations-vs-type-inference</guid>
    </item>
    <item>
      <title>The Compound Component Pattern in React</title>
      <link>https://paulund.co.uk/notebook/react/compound-component-pattern</link>
      <description>Learn how the compound component pattern lets you build flexible, composable UI components that share state without prop drilling or a complex API.</description>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/compound-component-pattern</guid>
    </item>
    <item>
      <title>The Render Prop Pattern in React</title>
      <link>https://paulund.co.uk/notebook/react/render-prop-pattern-in-react</link>
      <description>How the render prop pattern lets you share behaviour between components, why hooks mostly replaced it, and the cases where render props still earn their...</description>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/render-prop-pattern-in-react</guid>
    </item>
    <item>
      <title>useReducer for Complex State</title>
      <link>https://paulund.co.uk/notebook/react/usereducer-for-complex-state</link>
      <description>Learn when and how to use useReducer in React to manage state that has multiple related values or transitions that depend on each other.</description>
      <pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/usereducer-for-complex-state</guid>
    </item>
    <item>
      <title>Week 16, 2026</title>
      <link>https://paulund.co.uk/newsletter/2026-w16</link>
      <description>Dynamic OG images, dyslexia and engineering, git codebase reading, and a new Claude Design tool from Anthropic.</description>
      <pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/newsletter/2026-w16</guid>
    </item>
    <item>
      <title>The React Context API: Shared State Without a Library</title>
      <link>https://paulund.co.uk/notebook/react/react-context-api-shared-state</link>
      <description>Learn how to use React&apos;s built-in Context API to share state across components without prop drilling or reaching for a third-party library.</description>
      <pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/react-context-api-shared-state</guid>
    </item>
    <item>
      <title>Dynamic OG Images in Next.js with opengraph-image.tsx</title>
      <link>https://paulund.co.uk/notebook/nextjs/dynamic-og-images-nextjs</link>
      <description>How to generate a unique Open Graph image per page at build time using Next.js App Router&apos;s opengraph-image.tsx convention, with static export support.</description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/dynamic-og-images-nextjs</guid>
    </item>
    <item>
      <title>Lifting State Up in React</title>
      <link>https://paulund.co.uk/notebook/react/lifting-state-up-in-react</link>
      <description>When two components need to share state, you move it to their closest common ancestor. Here&apos;s what that looks like in practice and why it works.</description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/lifting-state-up-in-react</guid>
    </item>
    <item>
      <title>Conditional Rendering Patterns in React</title>
      <link>https://paulund.co.uk/notebook/react/conditional-rendering-patterns</link>
      <description>A practical look at the different ways to conditionally render content in React — when to use each pattern and which ones to avoid.</description>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/conditional-rendering-patterns</guid>
    </item>
    <item>
      <title>Lists and Keys in React: Why They Actually Matter</title>
      <link>https://paulund.co.uk/notebook/react/lists-and-keys-in-react</link>
      <description>React keys are more than a way to silence a console warning. Understanding how React uses them during reconciliation reveals why the wrong key can intro...</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/lists-and-keys-in-react</guid>
    </item>
    <item>
      <title>Why Dyslexia Made Me a Better Software Engineer</title>
      <link>https://paulund.co.uk/notebook/career/dyslexia-software-engineer</link>
      <description>A personal essay on how dyslexia shaped debugging instincts, pattern recognition, and systems thinking across a software engineering career.</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/career/dyslexia-software-engineer</guid>
    </item>
    <item>
      <title>Event Handling in React</title>
      <link>https://paulund.co.uk/notebook/react/event-handling-in-react</link>
      <description>How React&apos;s event system works, why it differs from vanilla JS, and how to handle clicks, form inputs, and keyboard events correctly — including TypeScr...</description>
      <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/event-handling-in-react</guid>
    </item>
    <item>
      <title>Git Commands for Reading New Codebases</title>
      <link>https://paulund.co.uk/notebook/git/git-commands-for-reading-new-codebases</link>
      <description>Five git commands to run before opening a single file in a new project, revealing churn hotspots, bus factor, bug clusters, and commit velocity.</description>
      <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/git/git-commands-for-reading-new-codebases</guid>
    </item>
    <item>
      <title>Props, Children, and Component Composition in React</title>
      <link>https://paulund.co.uk/notebook/react/props-children-and-component-composition</link>
      <description>Learn how props and the children prop work in React, and how to use component composition to build flexible UIs without tight coupling.</description>
      <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/props-children-and-component-composition</guid>
    </item>
    <item>
      <title>Extracting a Queries Layer from Next.js Server Components</title>
      <link>https://paulund.co.uk/notebook/nextjs/queries-layer-nextjs-prisma</link>
      <description>How to introduce a typed queries layer in a Next.js and Prisma app, moving read functions out of page components to improve discoverability and reuse.</description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/queries-layer-nextjs-prisma</guid>
    </item>
    <item>
      <title>The Virtual DOM and How React Reconciliation Works</title>
      <link>https://paulund.co.uk/notebook/react/react-virtual-dom-reconciliation</link>
      <description>What the virtual DOM actually is, how React&apos;s reconciliation algorithm decides what to update, and why understanding it helps you write faster components.</description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/react-virtual-dom-reconciliation</guid>
    </item>
    <item>
      <title>useState and the Mental Model of State</title>
      <link>https://paulund.co.uk/notebook/react/usestate-mental-model</link>
      <description>A clear look at what useState actually does in React, why state updates feel async, and how thinking about snapshots stops the confusion.</description>
      <pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/usestate-mental-model</guid>
    </item>
    <item>
      <title>Avoiding Unnecessary Rerenders in React</title>
      <link>https://paulund.co.uk/notebook/react/avoiding-unnecessary-rerenders-in-react</link>
      <description>How React decides to rerender, where reference equality matters, and the targeted use of memo, useMemo, and useCallback when profiling confirms a problem.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/avoiding-unnecessary-rerenders-in-react</guid>
    </item>
    <item>
      <title>Composition Over Prop Drilling in React</title>
      <link>https://paulund.co.uk/notebook/react/composition-over-prop-drilling</link>
      <description>How to use children as a prop, slot patterns, and component composition to avoid passing props through layers of components that don&apos;t care about them.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/composition-over-prop-drilling</guid>
    </item>
    <item>
      <title>Controlled vs Uncontrolled Forms in React</title>
      <link>https://paulund.co.uk/notebook/react/controlled-vs-uncontrolled-forms-in-react</link>
      <description>When React-controlled forms with useState make sense, and when uncontrolled refs with useRef are a better fit. The trade-offs are smaller than the debat...</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/controlled-vs-uncontrolled-forms-in-react</guid>
    </item>
    <item>
      <title>Custom Hooks: Naming and Structure</title>
      <link>https://paulund.co.uk/notebook/react/custom-hooks-naming-and-structure</link>
      <description>How to name, structure, and compose custom hooks so they stay readable and testable. One concern per hook, consistent return shapes, and when to split.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/custom-hooks-naming-and-structure</guid>
    </item>
    <item>
      <title>Deploying Next.js to Cloudflare Pages</title>
      <link>https://paulund.co.uk/notebook/nextjs/deploying-nextjs-to-cloudflare-pages</link>
      <description>How I deploy a statically exported Next.js 15 site to Cloudflare Pages with GitHub Actions, plus the gotchas around output mode, images, and route handl...</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/deploying-nextjs-to-cloudflare-pages</guid>
    </item>
    <item>
      <title>Error and Not-Found Pages in the App Router</title>
      <link>https://paulund.co.uk/notebook/nextjs/error-and-not-found-pages-in-app-router</link>
      <description>The error.tsx and not-found.tsx conventions in the Next.js App Router, how nested error boundaries work, and what happens when notFound() is called.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/error-and-not-found-pages-in-app-router</guid>
    </item>
    <item>
      <title>Fetching Data in Server Components</title>
      <link>https://paulund.co.uk/notebook/nextjs/fetching-data-in-server-components</link>
      <description>Patterns for fetching data in Next.js Server Components: direct database access, fetch with caching, parallel requests, and how React deduplicates ident...</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/fetching-data-in-server-components</guid>
    </item>
    <item>
      <title>generateStaticParams and Static Export</title>
      <link>https://paulund.co.uk/notebook/nextjs/generatestaticparams-and-static-export</link>
      <description>How generateStaticParams works with output: &apos;export&apos; to pre-render every dynamic route at build time, with patterns for nested segments and catch-all ro...</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/generatestaticparams-and-static-export</guid>
    </item>
    <item>
      <title>Image Optimisation in Next.js</title>
      <link>https://paulund.co.uk/notebook/nextjs/image-optimisation-in-nextjs</link>
      <description>How next/image works, the constraints of static export (unoptimized mode), and practical approaches to serve fast images whether you have a server or not.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/image-optimisation-in-nextjs</guid>
    </item>
    <item>
      <title>Incremental Static Regeneration Explained</title>
      <link>https://paulund.co.uk/notebook/nextjs/incremental-static-regeneration-explained</link>
      <description>What ISR does, how revalidation works, when ISR is better than full static or dynamic rendering, and what you lose when you move to output: &apos;export&apos;.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/incremental-static-regeneration-explained</guid>
    </item>
  </channel>
</rss>