<?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>Sun, 02 Aug 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://paulund.co.uk/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Email verification belongs at the API boundary</title>
      <link>https://paulund.co.uk/notebook/apis/email-verification-belongs-at-the-api-boundary</link>
      <description>Email verification should protect the API capability that needs it, while leaving sign-in, recovery, and account management usable.</description>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/apis/email-verification-belongs-at-the-api-boundary</guid>
    </item>
    <item>
      <title>Infrastructure questions belong before the first line of code</title>
      <link>https://paulund.co.uk/notebook/ai/infrastructure-questions-before-code</link>
      <description>I added infrastructure discovery to my project boilerplate because generic scaffolding hides the services and failure modes that shape a real application.</description>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/infrastructure-questions-before-code</guid>
    </item>
    <item>
      <title>SEO feedback should become bounded engineering work</title>
      <link>https://paulund.co.uk/notebook/ai/seo-feedback-bounded-engineering-work</link>
      <description>A Search Console workflow can turn delayed SEO signals into bounded GitHub issues, giving agents useful work without granting them unrestricted control.</description>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/seo-feedback-bounded-engineering-work</guid>
    </item>
    <item>
      <title>A status page should explain incidents, not just show green</title>
      <link>https://paulund.co.uk/notebook/observability/status-pages-should-explain-incidents</link>
      <description>A useful status page makes operational reliability visible before the first incident by showing evidence, history, notifications, and honest limits.</description>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/observability/status-pages-should-explain-incidents</guid>
    </item>
    <item>
      <title>Agent workflows should outlive their models</title>
      <link>https://paulund.co.uk/notebook/ai/agent-workflows-should-outlive-their-models</link>
      <description>I migrated scheduled agent workflows from OpenCode to Codex without rewriting their rules, and it changed how I design durable automation.</description>
      <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/agent-workflows-should-outlive-their-models</guid>
    </item>
    <item>
      <title>Building PostConductor: Why I Pivoted to MCP-First</title>
      <link>https://paulund.co.uk/notebook/ai/building-postconductor-mcp-first</link>
      <description>Why I rebuilt PostConductor as an MCP-first tool inside the agent interface, and how the shift changed the way I design software products.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/building-postconductor-mcp-first</guid>
    </item>
    <item>
      <title>Stop Blaming the Model</title>
      <link>https://paulund.co.uk/notebook/ai/stop-blaming-the-model</link>
      <description>Google just published a 51-page paper on the new SDLC. The single most important idea: your agent is not the model. It is the harness around it.</description>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/stop-blaming-the-model</guid>
    </item>
    <item>
      <title>Harness Engineering</title>
      <link>https://paulund.co.uk/notebook/ai/harness-engineering</link>
      <description>Cole Medin explains why a coding agent&apos;s harness matters more than its model. I compare his framing with the agent workflow I use each day.</description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/harness-engineering</guid>
    </item>
    <item>
      <title>A Modern Quality Pipeline and Testing Strategy for Frontend Projects</title>
      <link>https://paulund.co.uk/notebook/good-code/a-modern-quality-pipeline-and-testing-strategy-for-frontend-projects</link>
      <description>A practical guide to a 15-layer frontend quality pipeline, from type safety to observability, with a phased order for adopting each check.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/good-code/a-modern-quality-pipeline-and-testing-strategy-for-frontend-projects</guid>
    </item>
    <item>
      <title>Agents Are Cron Jobs and Markdown Files</title>
      <link>https://paulund.co.uk/notebook/ai/agents-are-cron-jobs-and-markdown-files</link>
      <description>Ryan Carson runs his startup solo with AI agents. His core thesis strips agentic automation down to schedulers and plain-text instructions.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/agents-are-cron-jobs-and-markdown-files</guid>
    </item>
    <item>
      <title>Measure Your Agent Skills or Delete Them</title>
      <link>https://paulund.co.uk/notebook/ai/measure-your-agent-skills-or-delete-them</link>
      <description>Nick Nisi discovered one of his skills dropped accuracy from 97% to 77%. The lesson: skills actively hurt without measurement. Evaluate or delete.</description>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/measure-your-agent-skills-or-delete-them</guid>
    </item>
    <item>
      <title>What to Do If You&apos;re Not Detail Oriented</title>
      <link>https://paulund.co.uk/notebook/career/what-to-do-if-youre-not-detail-oriented</link>
      <description>Wes Kao four-question self-check for shipping quality work and why you only need to be good enough at details, not in the ninety-fifth percentile for detail.</description>
      <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/career/what-to-do-if-youre-not-detail-oriented</guid>
    </item>
    <item>
      <title>How to Stay Resilient in a Difficult Engineering Job</title>
      <link>https://paulund.co.uk/notebook/career/staying-resilient-in-a-difficult-engineering-job</link>
      <description>Seven strategies for staying intact when your engineering job drains you, adapted for developers dealing with on-call pressure, toxic environments, and burnout.</description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/career/staying-resilient-in-a-difficult-engineering-job</guid>
    </item>
    <item>
      <title>Agentic Engineering Patterns</title>
      <link>https://paulund.co.uk/notebook/ai/agentic-engineering-patterns</link>
      <description>Willison agentic engineering guide codifies patterns I use daily in my agent orchestration system. What maps, what does not, and three things I am adopting.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/agentic-engineering-patterns</guid>
    </item>
    <item>
      <title>AI Ate the Translation Layer</title>
      <link>https://paulund.co.uk/notebook/ai/ai-ate-the-translation-layer</link>
      <description>Ajey Gore&apos;s thesis on AI-native organizations — why the translation layer between business and engineering is collapsing and what the new org chart looks like.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/ai-ate-the-translation-layer</guid>
    </item>
    <item>
      <title>Why Smaller Teams Will Win With AI</title>
      <link>https://paulund.co.uk/notebook/ai/why-smaller-teams-will-win-with-ai</link>
      <description>AI narrows the advantage of large teams. Small teams move faster, have fewer handoffs and redesign without process layers. AI amplifies that speed advantage.</description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/why-smaller-teams-will-win-with-ai</guid>
    </item>
    <item>
      <title>AI Code Review: Pre-Existing Bugs as a Side Quest</title>
      <link>https://paulund.co.uk/notebook/ai/ai-code-review-pre-existing-bugs-as-a-side-quest</link>
      <description>Running multiple AI models in parallel for PR review finds bugs you never knew you had. The catch? It makes you slower, not faster. And that is the point.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/ai-code-review-pre-existing-bugs-as-a-side-quest</guid>
    </item>
    <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 the spot.</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>Software Ecology and the 10x Moment</title>
      <link>https://paulund.co.uk/notebook/ai/software-ecology-and-the-10x-moment</link>
      <description>A framework for understanding developer ecosystems as socio-technical systems, and what breaks first when AI-driven velocity pushes every node to 10x capacity.</description>
      <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/ai/software-ecology-and-the-10x-moment</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 how I build software, from nested loops and AFK workflows to risk-gated PRs and scheduled orchestration.</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 human-in-the-loop 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/paulundgoldcli-v110-caching-layer-keeps-you-under-the-api-free-tier</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 tier.</description>
      <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/releases/paulundgoldcli-v110-caching-layer-keeps-you-under-the-api-free-tier</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 cross-cutting concern 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-in-react</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-in-react</guid>
    </item>
    <item>
      <title>React Fragments and When You Actually Need Them</title>
      <link>https://paulund.co.uk/notebook/react/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 different ways to write them.</description>
      <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/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 component 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-and-optional-props-in-react</link>
      <description>How to type optional props in TypeScript and set sensible default values without reaching for the deprecated defaultProps API in modern React applications.</description>
      <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/default-props-and-optional-props-in-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 including async submit handlers, loading states, error display, and resetting the form after a successful submission.</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-in-nextjs</link>
      <description>Server Actions do not replace client validation. Catch invalid form input early and prevent unhandled errors from becoming five hundred server error 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-in-nextjs</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 for safety.</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 without credentials or third-party deps.</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>Version 3.1.0 adds a dedicated Writing Humanizer skill to the paulundai collection, giving Claude Code a 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-a-url-shortener-with-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 tracking.</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/nextjs/building-a-url-shortener-with-nextjs</guid>
    </item>
    <item>
      <title>Magic Link Authentication in Next.js</title>
      <link>https://paulund.co.uk/notebook/apis/magic-link-authentication-in-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-in-nextjs</guid>
    </item>
    <item>
      <title>API Key Management in Next.js</title>
      <link>https://paulund.co.uk/notebook/apis/api-key-management-in-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 for secure access control.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/apis/api-key-management-in-nextjs</guid>
    </item>
    <item>
      <title>paulund/ai v3.0.0 - Skills-only layout and new planning skills</title>
      <link>https://paulund.co.uk/releases/pauundai-v300-skills-only-layout-and-new-planning-skills</link>
      <description>Version 3.0.0 removes the Claude plugin system for a flat skills directory and adds plan, ship, and several developer workflow skills to the collection.</description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/releases/pauundai-v300-skills-only-layout-and-new-planning-skills</guid>
    </item>
    <item>
      <title>Transactional Email with Resend and React Email</title>
      <link>https://paulund.co.uk/notebook/nextjs/transactional-email-with-resend-and-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-with-resend-and-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/the-compound-component-pattern-in-react</link>
      <description>Learn how the compound component pattern lets you build flexible and composable React UI components that share state without prop drilling or complex APIs.</description>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/the-compound-component-pattern-in-react</guid>
    </item>
    <item>
      <title>The Render Prop Pattern in React</title>
      <link>https://paulund.co.uk/notebook/react/the-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 keep.</description>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/the-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 complex component state that has multiple related values or state transitions depending 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>The React Context API: Shared State Without a Library</title>
      <link>https://paulund.co.uk/notebook/react/the-react-context-api-shared-state-without-a-library</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 state management library.</description>
      <pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/the-react-context-api-shared-state-without-a-library</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-in-nextjs-with-opengraph-imagetsx</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-in-nextjs-with-opengraph-imagetsx</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 is what that looks like in practice and why the pattern 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-in-react</link>
      <description>A practical look at the different ways to conditionally render content in React, covering when to use each pattern and which approaches you should avoid.</description>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <guid isPermaLink="true">https://paulund.co.uk/notebook/react/conditional-rendering-patterns-in-react</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-why-they-actually-matter</link>
      <description>React keys do more than silence console warnings. Understanding how React uses keys during reconciliation reveals why the wrong key introduces subtle bugs.</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-why-they-actually-matter</guid>
    </item>
  </channel>
</rss>