<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Tech watch · Sébastien Rigaux</title><description>The latest links, tools, and ideas selected by Sébastien Rigaux.</description><link>https://sebastien.rigaux.be</link><language>en</language><atom:link href="https://sebastien.rigaux.be/en/tech-watch/rss.xml" rel="self" type="application/rss+xml"/><item><title>Reticle gives coding agents a verdict on the running app</title><link>https://sebastien.rigaux.be/en/tech-watch/links/reticle-gives-coding-agents-a-verdict-on-the-running-app</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/reticle-gives-coding-agents-a-verdict-on-the-running-app</guid><description>Reticle helps coding agents check what they actually built rather than stopping at the code change. The repository presents a runtime-perception tool for web and desktop apps; reticle compare drives two builds in a browser and reports differences users can see, network calls, and console errors. Verification happens from outside the app, with no SDK required. The comparator can pit a main build against a pull request preview and, with --base, classify differences as regressions, missed targets, or changes.</description><pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/owWNlWV7HEROjmVg_image-0.png?auto=format,compress&quot; alt=&quot;GitHub preview card for the reticlehq/reticle repository, showing its name, a description of runtime perception for AI agents, a black icon, and counts for contributors, users, discussions, stars, and forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Reticle helps coding agents check what they actually built rather than stopping at the code change. The repository presents a runtime-perception tool for web and desktop apps; &lt;code&gt;reticle compare&lt;/code&gt; drives two builds in a browser and reports differences users can see, network calls, and console errors.&lt;/p&gt;
&lt;p&gt;Verification happens from outside the app, with no SDK required. The comparator can pit a main build against a pull request preview and, with &lt;code&gt;--base&lt;/code&gt;, classify differences as regressions, missed targets, or changes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/reticlehq/reticle&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/owWNlWV7HEROjmVg_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub preview card for the reticlehq/reticle repository, showing its name, a description of runtime perception for AI agents, a black icon, and counts for contributors, users, discussions, stars, and forks.</media:description><category>AI Agents</category><category>End-to-end testing</category><category>Testing</category><category>Observability</category></item><item><title>Fimo automates website maintenance and search visibility</title><link>https://sebastien.rigaux.be/en/tech-watch/links/fimo-automates-website-maintenance-and-search-visibility</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/fimo-automates-website-maintenance-and-search-visibility</guid><description>Fimo helps marketing teams maintain a website and improve its visibility in search engines and AI answers with specialized agents for SEO, GEO, content, performance, accessibility, and compliance. The platform also includes a visual editor, hosting, previews, and change history. Agents run on a schedule or when the site changes. Small fixes can publish automatically; changes that need a decision arrive as proposals with previews for approval. The site stays connected to its existing framework without being rebuilt, while developers continue working in the code.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/6paiUEqVDxsGt6eK_image-0.png?auto=format,compress&quot; alt=&quot;Fimo graphic reading “Your website, with superpowers” and “Get found in AI answers and search,” on a light background with colored circular shapes.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;Fimo helps marketing teams maintain a website and improve its visibility in search engines and AI answers with specialized agents for SEO, GEO, content, performance, accessibility, and compliance. The platform also includes a visual editor, hosting, previews, and change history.&lt;/p&gt;
&lt;p&gt;Agents run on a schedule or when the site changes. Small fixes can publish automatically; changes that need a decision arrive as proposals with previews for approval. The site stays connected to its existing framework without being rebuilt, while developers continue working in the code.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://fimo.ai/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/6paiUEqVDxsGt6eK_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Fimo graphic reading “Your website, with superpowers” and “Get found in AI answers and search,” on a light background with colored circular shapes.</media:description><category>AI Agents</category><category>SEO</category><category>Generative engine optimization</category></item><item><title>x18n checks i18n keys across code and locale files</title><link>https://sebastien.rigaux.be/en/tech-watch/links/x18n-checks-i18n-keys-across-code-and-locale-files</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/x18n-checks-i18n-keys-across-code-and-locale-files</guid><description>x18n finds missing, unused, or broken translation keys by cross-checking code calls against locale files. Its CLI can fail CI on errors, while search and rename commands connect translated values to their usages. The CLI, VS Code extension, and browser UI share the same engine. Renaming can update locale files and code, with --dry-run available to inspect changes before writing; the UI also exposes MCP tools for coding agents.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/9UONh-VeHMuUCwBb_image-0.png?auto=format,compress&quot; alt=&quot;Screenshot of the x18n site in a dark theme: the left side shows “i18n files, checked and maintained,” while the right shows a translation interface with keys, values in several languages, and a missing French translation.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;x18n finds missing, unused, or broken translation keys by cross-checking code calls against locale files. Its CLI can fail CI on errors, while search and rename commands connect translated values to their usages.&lt;/p&gt;
&lt;p&gt;The CLI, VS Code extension, and browser UI share the same engine. Renaming can update locale files and code, with &lt;code&gt;--dry-run&lt;/code&gt; available to inspect changes before writing; the UI also exposes MCP tools for coding agents.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://x18n.dev/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/9UONh-VeHMuUCwBb_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Screenshot of the x18n site in a dark theme: the left side shows “i18n files, checked and maintained,” while the right shows a translation interface with keys, values in several languages, and a missing French translation.</media:description><category>Internationalization</category></item><item><title>React: detect unnecessary effects with ESLint</title><link>https://sebastien.rigaux.be/en/tech-watch/links/react-detect-unnecessary-effects-with-eslint</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/react-detect-unnecessary-effects-with-eslint</guid><description>This ESLint plugin flags useEffect patterns that unnecessarily complicate React code, pairing each anti-pattern with a specific alternative and a link to the documentation. It covers derived state, chained state updates, and effects used as event handlers, among other cases. Its analysis considers state, props, context, refs, and dependencies to assess when an effect runs. It offers recommended and strict configurations, and also works with Oxlint.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/u9AMptLq8gFgu6PB_image-0.png?auto=format,compress&quot; alt=&quot;GitHub repository banner showing its name, a profile photo, and counts for contributors, users, discussions, stars, and forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;This ESLint plugin flags &lt;code&gt;useEffect&lt;/code&gt; patterns that unnecessarily complicate React code, pairing each anti-pattern with a specific alternative and a link to the documentation. It covers derived state, chained state updates, and effects used as event handlers, among other cases.&lt;/p&gt;
&lt;p&gt;Its analysis considers state, props, context, refs, and dependencies to assess when an effect runs. It offers recommended and strict configurations, and also works with Oxlint.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nickjvandyke/eslint-plugin-react-you-might-not-need-an-effect&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/u9AMptLq8gFgu6PB_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub repository banner showing its name, a profile photo, and counts for contributors, users, discussions, stars, and forks.</media:description></item><item><title>Skullet generates skeleton states shaped like your content</title><link>https://sebastien.rigaux.be/en/tech-watch/links/skullet-generates-skeleton-states-shaped-like-your-content</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/skullet-generates-skeleton-states-shaped-like-your-content</guid><description>Skullet automates loading states without hand-drawn placeholders: the npm package renders invisible sample data, measures the elements, then draws skeletons in their shape to avoid layout shift. The demo shows several interfaces, from metrics to notifications, and also raises the question of server rendering.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/z6fxozLANK3DKxNU_image-0.png?auto=format,compress&quot; alt=&quot;Black graphic with a large gray skull in the background and the text “Skullet — Smart Skeleton States”.&quot; width=&quot;1440&quot; height=&quot;760&quot; /&gt;&lt;/p&gt;&lt;p&gt;Skullet automates loading states without hand-drawn placeholders: the npm package renders invisible sample data, measures the elements, then draws skeletons in their shape to avoid layout shift.&lt;/p&gt;
&lt;p&gt;The demo shows several interfaces, from metrics to notifications, and also raises the question of server rendering.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://skullet.lochie.me/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/z6fxozLANK3DKxNU_image-0.png?auto=format,compress" width="1440" height="760"/><media:description>Black graphic with a large gray skull in the background and the text “Skullet — Smart Skeleton States”.</media:description></item><item><title>react-resizable-panels: three patterns for resizable layouts</title><link>https://sebastien.rigaux.be/en/tech-watch/links/react-resizable-panels-three-patterns-for-resizable-layouts</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/react-resizable-panels-three-patterns-for-resizable-layouts</guid><description>The react-resizable-panels documentation introduces React components for building resizable interfaces: panels arranged in rows or columns, grids that resize in two dimensions, and workspaces with tab sets users can rearrange by dragging. The workspace example shows how to provide an initial model with defaultModel and select tab content through renderTabContent. The package includes TypeScript definitions.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/IogWwmmMVwggH229_image-0.png?auto=format,compress&quot; alt=&quot;Purple graphic with the words “react resizable panels” beside a symbol made of chevrons and a vertical bar.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;The react-resizable-panels documentation introduces React components for building resizable interfaces: panels arranged in rows or columns, grids that resize in two dimensions, and workspaces with tab sets users can rearrange by dragging.&lt;/p&gt;
&lt;p&gt;The workspace example shows how to provide an initial model with &lt;code&gt;defaultModel&lt;/code&gt; and select tab content through &lt;code&gt;renderTabContent&lt;/code&gt;. The package includes TypeScript definitions.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://react-resizable-panels.vercel.app/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/IogWwmmMVwggH229_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Purple graphic with the words “react resizable panels” beside a symbol made of chevrons and a vertical bar.</media:description><category>React</category></item><item><title>React hydration and SSR: prevent mismatches without hiding content</title><link>https://sebastien.rigaux.be/en/tech-watch/links/react-hydration-and-ssr-prevent-mismatches-without-hiding-content</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/react-hydration-and-ssr-prevent-mismatches-without-hiding-content</guid><description>In Next.js, a localStorage value can make server-rendered HTML differ from the first client render. The article compares the trade-offs: waiting until mount avoids the error but leaves the real content out of the SSR HTML; using the same initial value for both renders preserves that content, though a later update can cause flicker. To synchronize a sidebar without that flash, an inline script applies its saved state to the DOM before hydration and passes it to React, which uses the same classes. The article also distinguishes an isolated theme control from a mobile backdrop handled with CSS.</description><pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/mJPowUL3fg3mosuC_image-0.png?auto=format,compress&quot; alt=&quot;A white card on a pale blue background displays “Fixing a Hydration Mismatch Error and UI Flicker in React” and the label “Blog”.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;In Next.js, a &lt;code&gt;localStorage&lt;/code&gt; value can make server-rendered HTML differ from the first client render. The article compares the trade-offs: waiting until mount avoids the error but leaves the real content out of the SSR HTML; using the same initial value for both renders preserves that content, though a later update can cause flicker.&lt;/p&gt;
&lt;p&gt;To synchronize a sidebar without that flash, an inline script applies its saved state to the DOM before hydration and passes it to React, which uses the same classes. The article also distinguishes an isolated theme control from a mobile backdrop handled with CSS.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.gmoniava.com/blog/hydration-mismatch-errors-and-how-to-fix-them&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/mJPowUL3fg3mosuC_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>A white card on a pale blue background displays “Fixing a Hydration Mismatch Error and UI Flicker in React” and the label “Blog”.</media:description><category>Next.js</category><category>React</category><category>SSR</category><category>Hydration</category></item><item><title>Decap CMS brings content editing into a Git workflow</title><link>https://sebastien.rigaux.be/en/tech-watch/links/decap-cms-brings-content-editing-into-a-git-workflow</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/decap-cms-brings-content-editing-into-a-git-workflow</guid><description>Decap CMS adds an editorial interface to static sites while keeping content in the Git repository. Teams can manage drafts, reviews, and publishing with version history and a live preview that supports non-technical contributors. Its declarative setup lives in a config.yml file for defining collections, fields, and workflows, while custom widgets extend the editor. For teams needing centralized access or relief from Git API limits, Decap Turbo adds features including hosted authentication and a database proxy.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/El7JBafYDAXWFmzE_image-0.jpg?auto=format,compress&quot; alt=&quot;White Decap logo on a purple-to-pink gradient background.&quot; width=&quot;1500&quot; height=&quot;900&quot; /&gt;&lt;/p&gt;&lt;p&gt;Decap CMS adds an editorial interface to static sites while keeping content in the Git repository. Teams can manage drafts, reviews, and publishing with version history and a live preview that supports non-technical contributors.&lt;/p&gt;
&lt;p&gt;Its declarative setup lives in a &lt;code&gt;config.yml&lt;/code&gt; file for defining collections, fields, and workflows, while custom widgets extend the editor. For teams needing centralized access or relief from Git API limits, Decap Turbo adds features including hosted authentication and a database proxy.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://decapcms.org/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/El7JBafYDAXWFmzE_image-0.jpg?auto=format,compress" width="1500" height="900"/><media:description>White Decap logo on a purple-to-pink gradient background.</media:description><category>Headless CMS</category><category>SSG</category><category>Open Source</category></item><item><title>Taste Skill gives coding agents design rules and browser checks</title><link>https://sebastien.rigaux.be/en/tech-watch/links/taste-skill-gives-coding-agents-design-rules-and-browser-checks</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/taste-skill-gives-coding-agents-design-rules-and-browser-checks</guid><description>Taste Skill gives coding agents a system for building less generic company websites: palettes, hero layouts, UI fragments and real photographs, with art direction tailored to the type of business. The repository offers Claude Code and Codex integrations, plus installation through npx skills. Its distinctive feature is automated checking in headless Chrome: pages render at four widths, from 390 to 1440 px, and are checked for empty visuals, contrast, alignment and images missing on slow networks. WebGL and scroll effects are limited to tech, gaming and software pages, with static fallbacks for phones and reduced motion.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/1kRnF--NxAGvLbtr_image-0.jpg?auto=format,compress&quot; alt=&quot;Taste Skill banner on a beige background, with the project name on the left and stacked interface mockups on the right.&quot; width=&quot;1731&quot; height=&quot;909&quot; /&gt;&lt;/p&gt;&lt;p&gt;Taste Skill gives coding agents a system for building less generic company websites: palettes, hero layouts, UI fragments and real photographs, with art direction tailored to the type of business. The repository offers Claude Code and Codex integrations, plus installation through &lt;code&gt;npx skills&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Its distinctive feature is automated checking in headless Chrome: pages render at four widths, from 390 to 1440 px, and are checked for empty visuals, contrast, alignment and images missing on slow networks. WebGL and scroll effects are limited to tech, gaming and software pages, with static fallbacks for phones and reduced motion.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Leonxlnx/taste-skill&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/1kRnF--NxAGvLbtr_image-0.jpg?auto=format,compress" width="1731" height="909"/><media:description>Taste Skill banner on a beige background, with the project name on the left and stacked interface mockups on the right.</media:description><category>Agent skills</category><category>AI Agents</category><category>UI/UX</category><category>Testing</category><category>Responsive design</category></item><item><title>Kiri: a Docker-compatible container runtime for three OSes</title><link>https://sebastien.rigaux.be/en/tech-watch/links/kiri-a-docker-compatible-container-runtime-for-three-oses</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/kiri-a-docker-compatible-container-runtime-for-three-oses</guid><description>Kiri replaces Docker Desktop and OrbStack with a lightweight container runtime for macOS, Windows, and Linux, compatible with the Docker CLI, Compose, and buildx. The repository also describes a native UI and support for Kubernetes clusters and Linux machines. Its architecture uses a Linux VM and a Rust agent that starts containers through clone3, without runc, a shim, or dockerd. The project publishes startup-time benchmarks against Docker Desktop and OrbStack, along with instructions for reproducing them.</description><pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/PAyxHjMwSwHVENZ3_image-0.png?auto=format,compress&quot; alt=&quot;GitHub banner for the libracoder/kiri repository, showing its name, a short description of the container runtime, a man&amp;#39;s portrait, and counts for contributors, issues, discussions, stars, and forks.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Kiri replaces Docker Desktop and OrbStack with a lightweight container runtime for macOS, Windows, and Linux, compatible with the Docker CLI, Compose, and buildx. The repository also describes a native UI and support for Kubernetes clusters and Linux machines.&lt;/p&gt;
&lt;p&gt;Its architecture uses a Linux VM and a Rust agent that starts containers through &lt;code&gt;clone3&lt;/code&gt;, without runc, a shim, or dockerd. The project publishes startup-time benchmarks against Docker Desktop and OrbStack, along with instructions for reproducing them.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/libracoder/kiri&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/PAyxHjMwSwHVENZ3_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub banner for the libracoder/kiri repository, showing its name, a short description of the container runtime, a man&amp;#39;s portrait, and counts for contributors, issues, discussions, stars, and forks.</media:description><category>Docker</category><category>Linux</category><category>Developer Experience</category></item><item><title>NewReleases centralizes version tracking and alerts</title><link>https://sebastien.rigaux.be/en/tech-watch/links/newreleases-centralizes-version-tracking-and-alerts</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/newreleases-centralizes-version-tracking-and-alerts</guid><description>NewReleases tracks new project and package versions across platforms such as GitHub, npm, NuGet, and Docker Hub, then sends alerts by email, instant messaging, or webhook. It removes the need to check each dependency or tool manually. Notifications can be instant or scheduled, and tracking can be configured from dependency files such as package.json, requirements.txt, or go.mod. Regular-expression and prerelease-status filters help narrow down which versions trigger alerts.</description><pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/1FPaxTPWGTJ8z2p2_image-0.png?auto=format,compress&quot; alt=&quot;NewReleases logo: “new” in blue and “(releases)” in black on a white background.&quot; width=&quot;2400&quot; height=&quot;1254&quot; /&gt;&lt;/p&gt;&lt;p&gt;NewReleases tracks new project and package versions across platforms such as GitHub, npm, NuGet, and Docker Hub, then sends alerts by email, instant messaging, or webhook. It removes the need to check each dependency or tool manually.&lt;/p&gt;
&lt;p&gt;Notifications can be instant or scheduled, and tracking can be configured from dependency files such as &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;requirements.txt&lt;/code&gt;, or &lt;code&gt;go.mod&lt;/code&gt;. Regular-expression and prerelease-status filters help narrow down which versions trigger alerts.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://newreleases.io/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/1FPaxTPWGTJ8z2p2_image-0.png?auto=format,compress" width="2400" height="1254"/><media:description>NewReleases logo: “new” in blue and “(releases)” in black on a white background.</media:description><category>Dependency management</category><category>Automation</category></item><item><title>Papra: an open-source document archive to self-host</title><link>https://sebastien.rigaux.be/en/tech-watch/links/papra-an-open-source-document-archive-to-self-host</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/papra-an-open-source-document-archive-to-self-host</guid><description>Papra brings document storage and management together in an open-source archiving platform. Full-text search, advanced filters, tags, and automatic imports from email or a folder help organize files and retrieve them later. The project can be deployed with Docker and also provides a CLI, API, SDKs, and webhooks for integration with other tools. Its online demo runs entirely in browser-local storage, with no backend.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/UhviEfcR4XFEzS4Z_image-0.png?auto=format,compress&quot; alt=&quot;Papra GitHub banner showing the repository name, a light-green document icon on a black background, and contributor, usage, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Papra brings document storage and management together in an open-source archiving platform. Full-text search, advanced filters, tags, and automatic imports from email or a folder help organize files and retrieve them later.&lt;/p&gt;
&lt;p&gt;The project can be deployed with Docker and also provides a CLI, API, SDKs, and webhooks for integration with other tools. Its online demo runs entirely in browser-local storage, with no backend.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/papra-hq/papra&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/UhviEfcR4XFEzS4Z_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Papra GitHub banner showing the repository name, a light-green document icon on a black background, and contributor, usage, star, and fork counts.</media:description><category>Document management</category><category>Self-hosting</category><category>Search</category></item><item><title>Pullboard coordinates AI agents with specs and independent verification</title><link>https://sebastien.rigaux.be/en/tech-watch/links/pullboard-coordinates-ai-agents-with-specs-and-independent-verification</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/pullboard-coordinates-ai-agents-with-specs-and-independent-verification</guid><description>Pullboard coordinates development agents around approved specifications: each claims an item in its own worktree, passes a test gate, then another agent verifies the commit before it is accepted. Rules and activity stay in the repository, with a local board instead of a hosted service. Its workflow puts concrete controls around agent work: approved requirements are frozen when an item is claimed, lanes restrict writable paths, and a state machine shared by the commands, interface, and documentation governs each transition.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/rihWX1gUkQAdBa6H_image-0.png?auto=format,compress&quot; alt=&quot;GitHub preview of the pullboard-dev/pullboard repository, showing its name, a truncated description, and contributor, issue, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Pullboard coordinates development agents around approved specifications: each claims an item in its own worktree, passes a test gate, then another agent verifies the commit before it is accepted. Rules and activity stay in the repository, with a local board instead of a hosted service.&lt;/p&gt;
&lt;p&gt;Its workflow puts concrete controls around agent work: approved requirements are frozen when an item is claimed, lanes restrict writable paths, and a state machine shared by the commands, interface, and documentation governs each transition.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/pullboard-dev/pullboard&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/rihWX1gUkQAdBa6H_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub preview of the pullboard-dev/pullboard repository, showing its name, a truncated description, and contributor, issue, star, and fork counts.</media:description><category>AI Agents</category><category>Workflow Orchestration</category><category>Spec-driven development</category><category>Code review</category></item><item><title>Zerobyte automates Restic backups for self-hosters</title><link>https://sebastien.rigaux.be/en/tech-watch/links/zerobyte-automates-restic-backups-for-self-hosters</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/zerobyte-automates-restic-backups-for-self-hosters</guid><description>Zerobyte brings scheduling, management, and monitoring of encrypted Restic backups into a web interface. It supports NFS, SMB, WebDAV, and SFTP sources as well as local directories, with destinations including S3, GCS, Azure, and rclone. The Docker Compose setup can be pared down when backing up only already-mounted directories: removing SYS_ADMIN and the FUSE device reduces the container’s granted capabilities, but prevents direct mounting of remote shares.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/SVr7cLf4nJYzzKtq_image-0.png?auto=format,compress&quot; alt=&quot;Screenshot of the Zerobyte interface showing scheduled backup jobs, their status, and destination repositories.&quot; width=&quot;3048&quot; height=&quot;1714&quot; /&gt;&lt;/p&gt;&lt;p&gt;Zerobyte brings scheduling, management, and monitoring of encrypted Restic backups into a web interface. It supports NFS, SMB, WebDAV, and SFTP sources as well as local directories, with destinations including S3, GCS, Azure, and rclone.&lt;/p&gt;
&lt;p&gt;The Docker Compose setup can be pared down when backing up only already-mounted directories: removing &lt;code&gt;SYS_ADMIN&lt;/code&gt; and the FUSE device reduces the container’s granted capabilities, but prevents direct mounting of remote shares.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/nicotsx/zerobyte&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/SVr7cLf4nJYzzKtq_image-0.png?auto=format,compress" width="3048" height="1714"/><media:description>Screenshot of the Zerobyte interface showing scheduled backup jobs, their status, and destination repositories.</media:description><category>Backup and restore</category><category>Restic</category><category>Self-hosting</category><category>Docker</category></item><item><title>AI agents to find exposed personal data and request its removal</title><link>https://sebastien.rigaux.be/en/tech-watch/links/ai-agents-to-find-exposed-personal-data-and-request-its-removal</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/ai-agents-to-find-exposed-personal-data-and-request-its-removal</guid><description>A three-agent workflow aims to find exposed personal data, identify removal procedures, and draft GDPR requests. The document sets out each agent’s role and instructions, then explains how to have them collaborate in a Cue group chat. The process keeps human approval before emails are sent and says never to share passwords. It also distinguishes sites that catalogue data breaches from the organizations responsible for them, helping avoid contacting the wrong party.</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/ZBmCZPRuUI4LbJ3T_image-0.png?auto=format,compress&quot; alt=&quot;Screenshot of a document showing links to Have I Been Pwned and multisearch, plus a warning about data-breach sources.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;A three-agent workflow aims to find exposed personal data, identify removal procedures, and draft GDPR requests. The document sets out each agent’s role and instructions, then explains how to have them collaborate in a Cue group chat.&lt;/p&gt;
&lt;p&gt;The process keeps human approval before emails are sent and says never to share passwords. It also distinguishes sites that catalogue data breaches from the organizations responsible for them, helping avoid contacting the wrong party.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://docs.google.com/document/d/1UKPyj16OonZsQg-Q0NQ-jbvfAvvCC9Qcn7BL3VLLLJY/mobilebasic?&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/ZBmCZPRuUI4LbJ3T_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Screenshot of a document showing links to Have I Been Pwned and multisearch, plus a warning about data-breach sources.</media:description><category>Data privacy</category><category>AI Agents</category><category>Automation</category></item><item><title>Cloudflare Security Audit Skill structures agent-led audits</title><link>https://sebastien.rigaux.be/en/tech-watch/links/cloudflare-security-audit-skill-structures-agent-led-audits</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/cloudflare-security-audit-skill-structures-agent-led-audits</guid><description>This skill turns a coding agent into a security auditor by orchestrating a six-phase repository audit, from reconnaissance to report generation. Findings are structured as machine-readable data and independently verified. A separate agent tries to disprove each candidate; results distinguish confirmed findings, leads needing validation, and rejected candidates. Running target code requires an OS-enforced sandbox with external networking disabled and resource limits in place.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/DHxWGOm7aMU9wETg_image-0.png?auto=format,compress&quot; alt=&quot;Banner for the cloudflare/security-audit-skill GitHub repository, showing its coding-agent skill description and contributor, issue, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;This skill turns a coding agent into a security auditor by orchestrating a six-phase repository audit, from reconnaissance to report generation. Findings are structured as machine-readable data and independently verified.&lt;/p&gt;
&lt;p&gt;A separate agent tries to disprove each candidate; results distinguish confirmed findings, leads needing validation, and rejected candidates. Running target code requires an OS-enforced sandbox with external networking disabled and resource limits in place.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/security-audit-skill&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/DHxWGOm7aMU9wETg_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Banner for the cloudflare/security-audit-skill GitHub repository, showing its coding-agent skill description and contributor, issue, star, and fork counts.</media:description><category>Agent skills</category><category>AI Agents</category><category>Security</category></item><item><title>Fetch Metadata: using request context to strengthen CSRF defenses</title><link>https://sebastien.rigaux.be/en/tech-watch/links/fetch-metadata-using-request-context-to-strengthen-csrf-defenses</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/fetch-metadata-using-request-context-to-strengthen-csrf-defenses</guid><description>The four Fetch Metadata headers tell servers where a request came from and how its response will be used. Andrew Lock explains Sec-Fetch-Site, Sec-Fetch-Mode, Sec-Fetch-Dest, and Sec-Fetch-User to help distinguish, for example, a legitimate navigation from a suspicious cross-site request. Examples contrast an image loaded from a CDN with a JavaScript fetch() call. Because JavaScript cannot modify these signals, servers can use them in a Resource Isolation Policy as an additional layer of defense against CSRF requests.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fpIu5TX2H8lLzQw3_image-0.webp?auto=format,compress&quot; alt=&quot;A black-and-white dog runs after a green tennis ball on a field.&quot; width=&quot;799&quot; height=&quot;533&quot; /&gt;&lt;/p&gt;&lt;p&gt;The four Fetch Metadata headers tell servers where a request came from and how its response will be used. Andrew Lock explains &lt;code&gt;Sec-Fetch-Site&lt;/code&gt;, &lt;code&gt;Sec-Fetch-Mode&lt;/code&gt;, &lt;code&gt;Sec-Fetch-Dest&lt;/code&gt;, and &lt;code&gt;Sec-Fetch-User&lt;/code&gt; to help distinguish, for example, a legitimate navigation from a suspicious cross-site request.&lt;/p&gt;
&lt;p&gt;Examples contrast an image loaded from a CDN with a JavaScript &lt;code&gt;fetch()&lt;/code&gt; call. Because JavaScript cannot modify these signals, servers can use them in a Resource Isolation Policy as an additional layer of defense against CSRF requests.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://andrewlock.net/understanding-the-fetch-metadata-http-headers-sec-fetch-site-and-friends/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fpIu5TX2H8lLzQw3_image-0.webp?auto=format,compress" width="799" height="533"/><media:description>A black-and-white dog runs after a green tennis ball on a field.</media:description><category>Security</category></item><item><title>Finbuckle.MultiTenant: isolate tenants in a .NET application</title><link>https://sebastien.rigaux.be/en/tech-watch/links/finbucklemultitenant-isolate-tenants-in-a-net-application</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/finbucklemultitenant-isolate-tenants-in-a-net-application</guid><description>Finbuckle.MultiTenant provides ASP.NET Core with tenant resolution, per-tenant configuration, and data-isolation building blocks. A basic setup combines a host-based strategy, a configuration-backed store, and the UseMultiTenant() middleware. The middleware must run before components that depend on the tenant, such as authentication and authorization. The library also includes integrations for per-tenant options, authentication, and Entity Framework Core data isolation.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Ltse_jt-4ItPqO0T_image-0.png?auto=format,compress&quot; alt=&quot;A cube-shaped logo made of gray blocks, with an orange block in the center.&quot; width=&quot;512&quot; height=&quot;512&quot; /&gt;&lt;/p&gt;&lt;p&gt;Finbuckle.MultiTenant provides ASP.NET Core with tenant resolution, per-tenant configuration, and data-isolation building blocks. A basic setup combines a host-based strategy, a configuration-backed store, and the &lt;code&gt;UseMultiTenant()&lt;/code&gt; middleware.&lt;/p&gt;
&lt;p&gt;The middleware must run before components that depend on the tenant, such as authentication and authorization. The library also includes integrations for per-tenant options, authentication, and Entity Framework Core data isolation.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.finbuckle.com/MultiTenant/#getting-started&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Ltse_jt-4ItPqO0T_image-0.png?auto=format,compress" width="512" height="512"/><media:description>A cube-shaped logo made of gray blocks, with an orange block in the center.</media:description><category>Multi-tenancy</category><category>Finbuckle.MultiTenant</category><category>ASP.NET Core</category><category>Entity Framework Core</category><category>.NET</category></item><item><title>.NET multi-tenancy: move a tenant without downtime — part 4/4</title><link>https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-move-a-tenant-without-downtime-part-44</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-move-a-tenant-without-downtime-part-44</guid><description>This installment explains how to move a tenant from a shared database to a dedicated one without taking the application offline or disrupting other tenants. The catalog drives the switch, while the same EF Core model and query filter serve both isolation modes. The migration uses an initial copy, a temporary read-only window, a delta copy, and verification before cutover. The runbook waits for the cache to expire before reopening writes, preventing instances that still hold the old connection from writing to the shared database after the switch.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fZlgTf99AQbWhZzY_image-0.jpg?auto=format,compress&quot; alt=&quot;Banner reading “Multi-Tenant .NET, Part 4: Moving Day,” with moving boxes, a guild emblem, and an illustrated portrait.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;This installment explains how to move a tenant from a shared database to a dedicated one without taking the application offline or disrupting other tenants. The catalog drives the switch, while the same EF Core model and query filter serve both isolation modes.&lt;/p&gt;
&lt;p&gt;The migration uses an initial copy, a temporary read-only window, a delta copy, and verification before cutover. The runbook waits for the cache to expire before reopening writes, preventing instances that still hold the old connection from writing to the shared database after the switch.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/08/multi-tenant-moving-day/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fZlgTf99AQbWhZzY_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Banner reading “Multi-Tenant .NET, Part 4: Moving Day,” with moving boxes, a guild emblem, and an illustrated portrait.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>Databases</category><category>Software Architecture</category></item><item><title>.NET multi-tenancy: one database per tenant — Part 3/4</title><link>https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-one-database-per-tenant-part-34</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-one-database-per-tenant-part-34</guid><description>With one database per tenant, EF Core no longer needs a global query filter, a TenantId column, or a tenant-specific model cache key: the tenant is selected through a connection string resolved from a catalog database. This isolation simplifies the model but shifts complexity to operations: each migration must be applied to every database. The article also explains how IDesignTimeDbContextFactory lets dotnet ef create the context without an active request or tenant.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/6Kkj_x73h6-CDgUF_image-0.jpg?auto=format,compress&quot; alt=&quot;A hand handles colorful network cables in front of rack-mounted equipment.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;With one database per tenant, EF Core no longer needs a global query filter, a &lt;code&gt;TenantId&lt;/code&gt; column, or a tenant-specific model cache key: the tenant is selected through a connection string resolved from a catalog database.&lt;/p&gt;
&lt;p&gt;This isolation simplifies the model but shifts complexity to operations: each migration must be applied to every database. The article also explains how &lt;code&gt;IDesignTimeDbContextFactory&lt;/code&gt; lets &lt;code&gt;dotnet ef&lt;/code&gt; create the context without an active request or tenant.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/08/multi-tenant-part-3/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/6Kkj_x73h6-CDgUF_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>A hand handles colorful network cables in front of rack-mounted equipment.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>Databases</category><category>Software Architecture</category></item><item><title>.NET multi-tenancy: isolate data by SQL Server schema — part 2/4</title><link>https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-isolate-data-by-sql-server-schema-part-24</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-isolate-data-by-sql-server-schema-part-24</guid><description>Part 2/4 shows how to isolate each tenant’s data in its own SQL Server schema, without a global query filter or a required TenantId column. EF Core can use a simple primary key again, while the database structure itself enforces the isolation boundary. The key change is model caching: OnModelCreating runs only once per model. The schema must be included in the cache key through IModelCacheKeyFactory, or EF Core may reuse the first tenant’s schema. The article also covers per-schema provisioning and migrations, plus strict validation of schema names interpolated into SQL.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/vzw31Z0w6cBjGZ5P_image-0.jpg?auto=format,compress&quot; alt=&quot;Graphic titled “Multi-Tenant .NET, Part 2 — Shared Database with Schema Separation,” showing a “House for Rent” sign, a circular emblem with two swords, and an illustrated portrait.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Part 2/4 shows how to isolate each tenant’s data in its own SQL Server schema, without a global query filter or a required &lt;code&gt;TenantId&lt;/code&gt; column. EF Core can use a simple primary key again, while the database structure itself enforces the isolation boundary.&lt;/p&gt;
&lt;p&gt;The key change is model caching: &lt;code&gt;OnModelCreating&lt;/code&gt; runs only once per model. The schema must be included in the cache key through &lt;code&gt;IModelCacheKeyFactory&lt;/code&gt;, or EF Core may reuse the first tenant’s schema. The article also covers per-schema provisioning and migrations, plus strict validation of schema names interpolated into SQL.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/07/multi-tenant-part-2/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/vzw31Z0w6cBjGZ5P_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Graphic titled “Multi-Tenant .NET, Part 2 — Shared Database with Schema Separation,” showing a “House for Rent” sign, a circular emblem with two swords, and an illustrated portrait.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>SQL Server</category><category>Software Architecture</category></item><item><title>.NET multi-tenancy: query isolation and SQL Server partitions — part 1/4</title><link>https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-query-isolation-and-sql-server-partitions-part-14</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/net-multi-tenancy-query-isolation-and-sql-server-partitions-part-14</guid><description>This first installment presents a shared-schema .NET multi-tenant design: EF Core filters reads by tenant, while SQL Server physically partitions rows to speed up data access. The key distinction is that partitioning is not a security boundary; isolation relies on the EF Core global query filter. The article also explains resolving the tenant per request, assigning its ID to new rows, and adding partitions to migrations with raw SQL. The primary key must include GuildId, a constraint SQL Server imposes when partitioning a unique index.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/hfTn_IrZQUYpxQ9__image-0.jpg?auto=format,compress&quot; alt=&quot;Banner over a photograph of apartment buildings, titled “Multi-Tenant .NET, Part 1 — Shared Database with Partitions,” with a crossed-swords emblem and an illustrated portrait.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;This first installment presents a shared-schema .NET multi-tenant design: EF Core filters reads by tenant, while SQL Server physically partitions rows to speed up data access. The key distinction is that partitioning is not a security boundary; isolation relies on the EF Core global query filter.&lt;/p&gt;
&lt;p&gt;The article also explains resolving the tenant per request, assigning its ID to new rows, and adding partitions to migrations with raw SQL. The primary key must include &lt;code&gt;GuildId&lt;/code&gt;, a constraint SQL Server imposes when partitioning a unique index.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://barretblake.dev/posts/development/2026/07/multi-tenant-part-1/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/hfTn_IrZQUYpxQ9__image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Banner over a photograph of apartment buildings, titled “Multi-Tenant .NET, Part 1 — Shared Database with Partitions,” with a crossed-swords emblem and an illustrated portrait.</media:description><category>Multi-tenancy</category><category>.NET</category><category>Entity Framework Core</category><category>SQL Server</category><category>Security</category></item><item><title>Agent loops in C# with Microsoft Agent Framework</title><link>https://sebastien.rigaux.be/en/tech-watch/links/agent-loops-in-c-with-microsoft-agent-framework</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/agent-loops-in-c-with-microsoft-agent-framework</guid><description>Agent loops combine action, observation, and evaluation to refine an answer or retry an operation until it meets a criterion. Jesse Liberty demonstrates the pattern in C# with Microsoft Agent Framework: a loop agent, an evaluator, and an iteration limit. The example contrasts a deterministic marker such as DONE with a model-based judge, then outlines safeguards to add: timeouts, idempotent calls, logging, and cost tracking. Each iteration adds latency and token usage.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/sDf9Rzn57jqZWsGe_image-0.jpg?auto=format,compress&quot; alt=&quot;Diagram of an agentic loop: the agent acts, observes, evaluates, then repeats or ends.&quot; width=&quot;800&quot; height=&quot;340&quot; /&gt;&lt;/p&gt;&lt;p&gt;Agent loops combine action, observation, and evaluation to refine an answer or retry an operation until it meets a criterion. Jesse Liberty demonstrates the pattern in C# with Microsoft Agent Framework: a loop agent, an evaluator, and an iteration limit.&lt;/p&gt;
&lt;p&gt;The example contrasts a deterministic marker such as &lt;code&gt;DONE&lt;/code&gt; with a model-based judge, then outlines safeguards to add: timeouts, idempotent calls, logging, and cost tracking. Each iteration adds latency and token usage.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://jesseliberty.com/2026/10/26/prompts-are-dead-long-live-loops/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/sDf9Rzn57jqZWsGe_image-0.jpg?auto=format,compress" width="800" height="340"/><media:description>Diagram of an agentic loop: the agent acts, observes, evaluates, then repeats or ends.</media:description><category>Microsoft Agent Framework</category><category>C#</category><category>AI Agents</category><category>Model Evaluation</category><category>Workflow Orchestration</category></item><item><title>Elephant-Goldfish Model: Google’s skills for shaping specs</title><link>https://sebastien.rigaux.be/en/tech-watch/links/elephant-goldfish-model-googles-skills-for-shaping-specs</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/elephant-goldfish-model-googles-skills-for-shaping-specs</guid><description>Elephant-Goldfish Model, Google’s open-source plugin, provides skills to explore an idea, draft a specification, and challenge it before implementation. An “Elephant” agent keeps the project context; “Goldfish” reviewers inspect the document without the conversation history to surface unstated assumptions and risks. The repository also covers resolving review findings and comparing documentation with code. Reviews require fresh subagent contexts; if the environment cannot create them, EGM stops that step.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/5iR3jqCDBycrtrSv_image-0.png?auto=format,compress&quot; alt=&quot;Elephant-Goldfish Model graphic: two panels show a blue elephant that remembers everything and an orange goldfish that remembers nothing.&quot; width=&quot;2400&quot; height=&quot;1260&quot; /&gt;&lt;/p&gt;&lt;p&gt;Elephant-Goldfish Model, Google’s open-source plugin, provides &lt;strong&gt;skills&lt;/strong&gt; to explore an idea, draft a specification, and challenge it before implementation. An “Elephant” agent keeps the project context; “Goldfish” reviewers inspect the document without the conversation history to surface unstated assumptions and risks.&lt;/p&gt;
&lt;p&gt;The repository also covers resolving review findings and comparing documentation with code. Reviews require fresh subagent contexts; if the environment cannot create them, EGM stops that step.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/google/elephant-goldfish-model&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/5iR3jqCDBycrtrSv_image-0.png?auto=format,compress" width="2400" height="1260"/><media:description>Elephant-Goldfish Model graphic: two panels show a blue elephant that remembers everything and an orange goldfish that remembers nothing.</media:description><category>Agent skills</category><category>Spec-driven development</category><category>AI Agents</category></item><item><title>Web accessibility: Laura Kalbag’s book is free to read online</title><link>https://sebastien.rigaux.be/en/tech-watch/links/web-accessibility-laura-kalbags-book-is-free-to-read-online</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/web-accessibility-laura-kalbags-book-is-free-to-read-online</guid><description>Laura Kalbag has made Accessibility for Everyone free to read on the web. First published by A Book Apart in 2017, the book is now available to the web community as a resource for learning about accessibility. Kalbag notes that accessibility best practices have changed little, while some recommended tools and job titles may be outdated; the Web Content Accessibility Guidelines are also approaching version 3.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/y7vCKGXoUTU4Qeh2_image-0.png?auto=format,compress&quot; alt=&quot;A green cover showing the title “Accessibility for Everyone,” Laura Kalbag’s name, and the words “Read for free.”&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Laura Kalbag has made &lt;em&gt;Accessibility for Everyone&lt;/em&gt; free to read on the web. First published by A Book Apart in 2017, the book is now available to the web community as a resource for learning about accessibility.&lt;/p&gt;
&lt;p&gt;Kalbag notes that accessibility best practices have changed little, while some recommended tools and job titles may be outdated; the Web Content Accessibility Guidelines are also approaching version 3.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://accessibilityforeveryone.site/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/y7vCKGXoUTU4Qeh2_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>A green cover showing the title “Accessibility for Everyone,” Laura Kalbag’s name, and the words “Read for free.”</media:description><category>Accessibility</category></item><item><title>Modern Web Guidance brings current web practices to coding agents</title><link>https://sebastien.rigaux.be/en/tech-watch/links/modern-web-guidance-brings-current-web-practices-to-coding-agents</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/modern-web-guidance-brings-current-web-practices-to-coding-agents</guid><description>Modern Web Guidance gives coding agents expert guidance on browser APIs, CSS, performance, and accessibility, steering them toward native solutions instead of legacy patterns. The repository brings together 232 features and 186 use cases as skills installable in multiple agents. Its CLI searches locally for a guide and adds it to the agent’s context. The guidance incorporates Baseline compatibility data, targeted fallbacks, and automated evaluation; the project is marked as a preview release.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/J1hz0dvFok1vq_YK_image-0.png?auto=format,compress&quot; alt=&quot;Image for the GoogleChrome/modern-web-guidance repository, showing the Chrome logo and contributor, issue, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Modern Web Guidance gives coding agents expert guidance on browser APIs, CSS, performance, and accessibility, steering them toward native solutions instead of legacy patterns. The repository brings together 232 features and 186 use cases as skills installable in multiple agents.&lt;/p&gt;
&lt;p&gt;Its CLI searches locally for a guide and adds it to the agent’s context. The guidance incorporates Baseline compatibility data, targeted fallbacks, and automated evaluation; the project is marked as a preview release.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/GoogleChrome/modern-web-guidance&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/J1hz0dvFok1vq_YK_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>Image for the GoogleChrome/modern-web-guidance repository, showing the Chrome logo and contributor, issue, star, and fork counts.</media:description><category>Agent skills</category><category>AI Agents</category><category>Progressive enhancement</category><category>Accessibility</category><category>Web Performance</category></item><item><title>emoji-picker-react: customize a React emoji picker</title><link>https://sebastien.rigaux.be/en/tech-watch/links/emoji-picker-react-customize-a-react-emoji-picker</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/emoji-picker-react-customize-a-react-emoji-picker</guid><description>emoji-picker-react provides an emoji picker for React, either with its built-in styling or adapted to a product’s visual design. The interactive playground lets developers try props, CSS themes, and customization examples. Features include search, skin tones, custom emojis, and multiple languages. Its reactions mode starts with a compact set of popular reactions, then opens access to the full emoji library.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;emoji-picker-react provides an emoji picker for React, either with its built-in styling or adapted to a product’s visual design. The interactive playground lets developers try props, CSS themes, and customization examples.&lt;/p&gt;
&lt;p&gt;Features include search, skin tones, custom emojis, and multiple languages. Its reactions mode starts with a compact set of popular reactions, then opens access to the full emoji library.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ealush.com/emoji-picker-react/#playground&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><category>React</category><category>UI/UX</category></item><item><title>OpenTUI builds TypeScript terminal interfaces with a native Zig renderer</title><link>https://sebastien.rigaux.be/en/tech-watch/links/opentui-builds-typescript-terminal-interfaces-with-a-native-zig-renderer</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/opentui-builds-typescript-terminal-interfaces-with-a-native-zig-renderer</guid><description>OpenTUI lets developers build terminal user interfaces in TypeScript, directly or with React and Solid. Its native renderer is written in Zig, and layouts use flexbox. The library supports selects, inputs, and scroll boxes controlled by keyboard or mouse. It can also display images, play sounds, and render 3D graphics.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/d0ol22PzIPoNO4uR_image-0.png?auto=format,compress&quot; alt=&quot;Black OpenTUI logo on a white background.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;OpenTUI lets developers build terminal user interfaces in TypeScript, directly or with React and Solid. Its native renderer is written in Zig, and layouts use flexbox.&lt;/p&gt;
&lt;p&gt;The library supports selects, inputs, and scroll boxes controlled by keyboard or mouse. It can also display images, play sounds, and render 3D graphics.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://opentui.com/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/d0ol22PzIPoNO4uR_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Black OpenTUI logo on a white background.</media:description><category>TypeScript</category><category>Zig</category><category>UI/UX</category></item><item><title>Puck, a visual editor for React: field and canvas updates in 0.24</title><link>https://sebastien.rigaux.be/en/tech-watch/links/puck-a-visual-editor-for-react-field-and-canvas-updates-in-024</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/puck-a-visual-editor-for-react-field-and-canvas-updates-in-024</guid><description>Puck, a visual page editor for React, adds field groups and tabs in version 0.24, along with a checkbox field for selecting multiple options. Drag handles also make it easier to reorder components in nested layouts. The renderFields API lets you compose these layouts. In the canvas, InlineTextField enables direct text editing, while fieldTransforms transforms values at render time without changing the underlying data.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/fqX2nrhIvI2o0pBt_image-0.png?auto=format,compress&quot; alt=&quot;Puck logo in a blue-to-purple gradient on a white background.&quot; width=&quot;1200&quot; height=&quot;675&quot; /&gt;&lt;/p&gt;&lt;p&gt;Puck, a visual page editor for React, adds field groups and tabs in version 0.24, along with a &lt;code&gt;checkbox&lt;/code&gt; field for selecting multiple options. Drag handles also make it easier to reorder components in nested layouts.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;renderFields&lt;/code&gt; API lets you compose these layouts. In the canvas, &lt;code&gt;InlineTextField&lt;/code&gt; enables direct text editing, while &lt;code&gt;fieldTransforms&lt;/code&gt; transforms values at render time without changing the underlying data.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://puckeditor.com/blog/puck-024&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/fqX2nrhIvI2o0pBt_image-0.png?auto=format,compress" width="1200" height="675"/><media:description>Puck logo in a blue-to-purple gradient on a white background.</media:description><category>Puck</category><category>React</category><category>No-code / low-code</category><category>UI/UX</category></item><item><title>React: preserve progressive enhancement with Server Actions</title><link>https://sebastien.rigaux.be/en/tech-watch/links/react-preserve-progressive-enhancement-with-server-actions</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/react-preserve-progressive-enhancement-with-server-actions</guid><description>React combines &lt;form action&gt;, useActionState, and useOptimistic to handle pending feedback and optimistic updates while keeping form submission available before JavaScript runs. The article shows how this continuity can enhance the interface after hydration without giving up the browser’s native form behavior. The key is to keep the server action directly in action: inserting a client function breaks submission without JavaScript. For optimistic updates, useHydrated() lets the form choose between the server action and its client-enhanced version.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;React combines &lt;code&gt;&amp;lt;form action&amp;gt;&lt;/code&gt;, &lt;code&gt;useActionState&lt;/code&gt;, and &lt;code&gt;useOptimistic&lt;/code&gt; to handle pending feedback and optimistic updates while keeping form submission available before JavaScript runs. The article shows how this continuity can enhance the interface after hydration without giving up the browser’s native form behavior.&lt;/p&gt;
&lt;p&gt;The key is to keep the server action directly in &lt;code&gt;action&lt;/code&gt;: inserting a client function breaks submission without JavaScript. For optimistic updates, &lt;code&gt;useHydrated()&lt;/code&gt; lets the form choose between the server action and its client-enhanced version.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ebey.dev/blog/3myyseusgd22h&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><category>React</category><category>Server Actions</category><category>Progressive enhancement</category><category>Forms</category><category>Hydration</category></item><item><title>C# 15 unions: exhaustive matching, with boxing to consider</title><link>https://sebastien.rigaux.be/en/tech-watch/links/c-15-unions-exhaustive-matching-with-boxing-to-consider</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/c-15-unions-exhaustive-matching-with-boxing-to-consider</guid><description>C# 15 introduces the union keyword to represent a value drawn from several types without forcing them into a base class or losing their type information in object. Andrew Lock shows how switch expressions enforce handling every case, and how to declare unions such as Result&lt;T&gt;. One performance detail to weigh: the generated implementation stores the value in an object, boxing value types. The article demonstrates a custom implementation using TryGetValue to avoid boxing in switch expressions.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/yi5OJqeAKwzhGLHH_image-0.png?auto=format,compress&quot; alt=&quot;C# code showing Windows, Linux and MacOS records, followed by a SupportedOS union containing those three types.&quot; width=&quot;600&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;&lt;p&gt;C# 15 introduces the &lt;code&gt;union&lt;/code&gt; keyword to represent a value drawn from several types without forcing them into a base class or losing their type information in &lt;code&gt;object&lt;/code&gt;. Andrew Lock shows how &lt;code&gt;switch&lt;/code&gt; expressions enforce handling every case, and how to declare unions such as &lt;code&gt;Result&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;One performance detail to weigh: the generated implementation stores the value in an &lt;code&gt;object&lt;/code&gt;, boxing value types. The article demonstrates a custom implementation using &lt;code&gt;TryGetValue&lt;/code&gt; to avoid boxing in &lt;code&gt;switch&lt;/code&gt; expressions.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://andrewlock.net/exploring-the-dotnet-11-preview-2-dotnet-gets-union-types/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/yi5OJqeAKwzhGLHH_image-0.png?auto=format,compress" width="600" height="400"/><media:description>C# code showing Windows, Linux and MacOS records, followed by a SupportedOS union containing those three types.</media:description><category>C#</category><category>.NET</category></item><item><title>Microsoft Agent Framework: choosing where to intercept calls</title><link>https://sebastien.rigaux.be/en/tech-watch/links/microsoft-agent-framework-choosing-where-to-intercept-calls</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/microsoft-agent-framework-choosing-where-to-intercept-calls</guid><description>In Microsoft Agent Framework, ChatClient middleware intercepts messages exchanged with the LLM, while agent middleware operates on the agent’s overall run, including session, identity, or token-budget management. This distinction helps place logging or modification at the right level. The C# example adds function-invocation middleware to log calls to the Researcher agent’s Tavily tool, without changing the other agents. The trace shows the function name and its arguments.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Ekq7OL1aNFQGqPQX_image-0.jpg?auto=format,compress&quot; alt=&quot;Three basketball players illustrate a sequence: the first holds the ball, the second watches through binoculars, and the third shoots toward the hoop.&quot; width=&quot;765&quot; height=&quot;457&quot; /&gt;&lt;/p&gt;&lt;p&gt;In Microsoft Agent Framework, &lt;code&gt;ChatClient&lt;/code&gt; middleware intercepts messages exchanged with the LLM, while agent middleware operates on the agent’s overall run, including session, identity, or token-budget management. This distinction helps place logging or modification at the right level.&lt;/p&gt;
&lt;p&gt;The C# example adds function-invocation middleware to log calls to the Researcher agent’s Tavily tool, without changing the other agents. The trace shows the function name and its arguments.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://jesseliberty.com/2026/08/08/chatclient-middleware-vs-agent-middleware/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Ekq7OL1aNFQGqPQX_image-0.jpg?auto=format,compress" width="765" height="457"/><media:description>Three basketball players illustrate a sequence: the first holds the ball, the second watches through binoculars, and the third shoots toward the hoop.</media:description><category>Microsoft Agent Framework</category><category>AI Agents</category><category>C#</category><category>Observability</category></item><item><title>C#: IfItQuacks turns duck typing into a library</title><link>https://sebastien.rigaux.be/en/tech-watch/links/c-ifitquacks-turns-duck-typing-into-a-library</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/c-ifitquacks-turns-duck-typing-into-a-library</guid><description>IfItQuacks lets C# code accept objects that match an interface without implementing it or sharing a base class. The [DuckTyped] attribute invokes a source generator that checks compatibility at compile time and creates an adapter—without reflection or dynamic. Anonymous types can also act as test stubs: an object such as { Name = &quot;Steven&quot;, Age = 90 } can satisfy an IPerson interface. Adapters also preserve identity by forwarding Equals, GetHashCode, and ToString to the wrapped instance.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/dW9zy7zmosJKDENv_image-1.png?auto=format,compress&quot; alt=&quot;Yellow “Buy me a coffee” graphic with a stylized cup.&quot; width=&quot;580&quot; height=&quot;146&quot; /&gt;&lt;/p&gt;&lt;p&gt;IfItQuacks lets C# code accept objects that match an interface without implementing it or sharing a base class. The &lt;code&gt;[DuckTyped]&lt;/code&gt; attribute invokes a source generator that checks compatibility at compile time and creates an adapter—without reflection or &lt;code&gt;dynamic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Anonymous types can also act as test stubs: an object such as &lt;code&gt;{ Name = &amp;quot;Steven&amp;quot;, Age = 90 }&lt;/code&gt; can satisfy an &lt;code&gt;IPerson&lt;/code&gt; interface. Adapters also preserve identity by forwarding &lt;code&gt;Equals&lt;/code&gt;, &lt;code&gt;GetHashCode&lt;/code&gt;, and &lt;code&gt;ToString&lt;/code&gt; to the wrapped instance.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://steven-giesel.com/blogPost/41599817-4457-441e-b874-1a5c67f4e7cc&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/dW9zy7zmosJKDENv_image-1.png?auto=format,compress" width="580" height="146"/><media:description>Yellow “Buy me a coffee” graphic with a stylized cup.</media:description><category>C#</category><category>.NET</category></item><item><title>.NET range types as first-class domain objects</title><link>https://sebastien.rigaux.be/en/tech-watch/links/net-range-types-as-first-class-domain-objects</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/net-range-types-as-first-class-domain-objects</guid><description>CodoMetis.ValueRanges offers .NET range types to replace pairs of dates and their scattered logic. Its five variants—finite, unbounded on either side, infinite, and empty—make possible shapes and rules explicit, while operations such as Contains and Overlaps run in memory. The companion EF Core package bridges the domain model to PostgreSQL: the same operations are translated into SQL operators through Npgsql. The article also explains the design trade-off: abstract records rather than structs, so each variant can be represented by a type hierarchy.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/2CXATPwyNQbCQXAM_image-0.webp?auto=format,compress&quot; alt=&quot;Article banner showing its title, Ricardo Groß’s name, and the date “Jun 11” on a white background.&quot; width=&quot;1200&quot; height=&quot;627&quot; /&gt;&lt;/p&gt;&lt;p&gt;CodoMetis.ValueRanges offers .NET range types to replace pairs of dates and their scattered logic. Its five variants—finite, unbounded on either side, infinite, and empty—make possible shapes and rules explicit, while operations such as &lt;code&gt;Contains&lt;/code&gt; and &lt;code&gt;Overlaps&lt;/code&gt; run in memory.&lt;/p&gt;
&lt;p&gt;The companion EF Core package bridges the domain model to PostgreSQL: the same operations are translated into SQL operators through Npgsql. The article also explains the design trade-off: abstract records rather than structs, so each variant can be represented by a type hierarchy.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://dev.to/caffeinatedcoder/the-interval-is-the-thing-modelling-range-types-as-first-class-domain-objects-in-net-3jha&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/2CXATPwyNQbCQXAM_image-0.webp?auto=format,compress" width="1200" height="627"/><media:description>Article banner showing its title, Ricardo Groß’s name, and the date “Jun 11” on a white background.</media:description><category>.NET</category><category>C#</category><category>Entity Framework Core</category><category>PostgreSQL</category><category>Software Architecture</category></item><item><title>WordPress RCE flaw targets the update window</title><link>https://sebastien.rigaux.be/en/tech-watch/links/wordpress-rce-flaw-targets-the-update-window</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/wordpress-rce-flaw-targets-the-update-window</guid><description>A remote code execution flaw in WordPress Core can let an unauthenticated attacker run code during a full-package update if the temporary directory is web-accessible. Wordfence says it blocked 62,969 attempts in 24 hours; a fix is available in version 7.1.4. The attack hinges on racing cleanup: installer files are unpacked to a predictable path under wp-content/upgrade, and attackers are repeatedly probing files such as setup-config.php to catch the exposure window, which may last only seconds. The flaw affects versions 4.7 through 7.1.3.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/XZwPRoEwVwbHUkLi_image-0.webp?auto=format,compress&quot; alt=&quot;White WordPress logo on layered blue panels, with file paths visible in the background.&quot; width=&quot;900&quot; height=&quot;470&quot; /&gt;&lt;/p&gt;&lt;p&gt;A remote code execution flaw in WordPress Core can let an unauthenticated attacker run code during a full-package update if the temporary directory is web-accessible. Wordfence says it blocked 62,969 attempts in 24 hours; a fix is available in version 7.1.4.&lt;/p&gt;
&lt;p&gt;The attack hinges on racing cleanup: installer files are unpacked to a predictable path under &lt;code&gt;wp-content/upgrade&lt;/code&gt;, and attackers are repeatedly probing files such as &lt;code&gt;setup-config.php&lt;/code&gt; to catch the exposure window, which may last only seconds. The flaw affects versions 4.7 through 7.1.3.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://thehackernews.com/2026/10/wordpress-rce-flaw-draws-nearly-63000.html?m=1&amp;amp;fbclid=IwVERDUAVSgZFleHRuA2FlbQIxMQBwZG9mBWZkaWQWURVldsH84Prb_V9O7MJ8RzmvQSBsuHNydGMGYXBwX2lkCjY2Mjg1NjgzNzkAAR8-ptU2QLdLnxH-DOwi8ZTpvDQvoHH5ARUtADcS_XgLJpuQ6RDMlL_aD1TW9g_aem_-NUl7MFU_kQudSHH6dvgVQ&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/XZwPRoEwVwbHUkLi_image-0.webp?auto=format,compress" width="900" height="470"/><media:description>White WordPress logo on layered blue panels, with file paths visible in the background.</media:description><category>Security</category></item><item><title>CVEngine connects attack-surface discovery with CVE validation</title><link>https://sebastien.rigaux.be/en/tech-watch/links/cvengine-connects-attack-surface-discovery-with-cve-validation</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/cvengine-connects-attack-surface-discovery-with-cve-validation</guid><description>CVEngine brings continuous asset discovery, vulnerability scanning, and matching against exploited CVEs into a self-hosted platform. It aims to prioritize flaws that actually apply, using read-only validation and evidence rather than presenting only a list of alerts. Version 1.3 adds Sentinels to run scans from private networks, along with an OpenVAS integration that is disabled by default. Results feed the same inventory and severity ratings; the tool also provides a REST API and MCP integration.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/5CEuysgDJnMsu6zd_image-0.png?auto=format,compress&quot; alt=&quot;GitHub banner for CVEngine showing its name, a short description, contributor, issue, star, and fork counts, plus a small image of a person holding out their hands.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;CVEngine brings continuous asset discovery, vulnerability scanning, and matching against exploited CVEs into a self-hosted platform. It aims to prioritize flaws that actually apply, using read-only validation and evidence rather than presenting only a list of alerts.&lt;/p&gt;
&lt;p&gt;Version 1.3 adds Sentinels to run scans from private networks, along with an OpenVAS integration that is disabled by default. Results feed the same inventory and severity ratings; the tool also provides a REST API and MCP integration.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/hevnsnt/CVEngine&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/5CEuysgDJnMsu6zd_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub banner for CVEngine showing its name, a short description, contributor, issue, star, and fork counts, plus a small image of a person holding out their hands.</media:description><category>Security</category><category>Penetration testing</category><category>Self-hosting</category></item><item><title>Mautic: automate marketing while keeping control of your data</title><link>https://sebastien.rigaux.be/en/tech-watch/links/mautic-automate-marketing-while-keeping-control-of-your-data</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/mautic-automate-marketing-while-keeping-control-of-your-data</guid><description>Mautic is an open-source marketing automation platform that brings together campaigns, email, landing pages, and contact management. It can be self-hosted on an organization’s infrastructure, with a REST API and plugins for integration and extension. The page also highlights drag-and-drop campaign creation, lead scoring, and privacy-focused features. Cited use cases include sending more than a million personalized, multilingual emails daily for an e-commerce business.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/QcT3-uJG_tmmZosI_image-0.jpg?auto=format,compress&quot; alt=&quot;Snow-covered mountains beneath a purple overlay, with the text “Free Your Marketing! empowered by mautic.”&quot; width=&quot;1919&quot; height=&quot;640&quot; /&gt;&lt;/p&gt;&lt;p&gt;Mautic is an open-source marketing automation platform that brings together campaigns, email, landing pages, and contact management. It can be self-hosted on an organization’s infrastructure, with a REST API and plugins for integration and extension.&lt;/p&gt;
&lt;p&gt;The page also highlights drag-and-drop campaign creation, lead scoring, and privacy-focused features. Cited use cases include sending more than a million personalized, multilingual emails daily for an e-commerce business.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://mautic.org/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/QcT3-uJG_tmmZosI_image-0.jpg?auto=format,compress" width="1919" height="640"/><media:description>Snow-covered mountains beneath a purple overlay, with the text “Free Your Marketing! empowered by mautic.”</media:description><category>Marketing automation</category><category>Self-hosting</category><category>Open Source</category></item><item><title>BillionMail: self-host an email platform and campaign workflow</title><link>https://sebastien.rigaux.be/en/tech-watch/links/billionmail-self-host-an-email-platform-and-campaign-workflow</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/billionmail-self-host-an-email-platform-and-campaign-workflow</guid><description>BillionMail combines a mail server, newsletters, and email marketing in an open-source, self-hosted package. Its repository outlines a setup flow connecting a domain and DNS verification to campaign creation and sending, with list and tag management. The project supports Docker and installation through aaPanel. It also integrates RoundCube for webmail, offers delivery analytics, and is licensed under AGPLv3; the team running it remains responsible for hosting the service.</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/XjK3o0AbUsXd_m7Y_image-0.png?auto=format,compress&quot; alt=&quot;BillionMail GitHub banner showing the project name, a description of a self-hosted mail and email marketing service, and contributor, issue, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;BillionMail combines a mail server, newsletters, and email marketing in an open-source, self-hosted package. Its repository outlines a setup flow connecting a domain and DNS verification to campaign creation and sending, with list and tag management.&lt;/p&gt;
&lt;p&gt;The project supports Docker and installation through aaPanel. It also integrates RoundCube for webmail, offers delivery analytics, and is licensed under AGPLv3; the team running it remains responsible for hosting the service.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Billionmail/BillionMail?fbclid=IwZnRzaAVSfsRleHRuA2FlbQIxMQBwZG9mBWZkaWQWURXNcp56FMhsSBMENWsMwQT7qCd6y3NydGMGYXBwX2lkCjY2Mjg1NjgzNzkAAR_MI9RcqU99pGd4uxK2p9-mnrPt77hPr6xfWTGamacb-oeBIqlbmf9PZ_hfIA_aem__boTMF88wTbUjGAZtHUMgQ&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/XjK3o0AbUsXd_m7Y_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>BillionMail GitHub banner showing the project name, a description of a self-hosted mail and email marketing service, and contributor, issue, star, and fork counts.</media:description><category>Marketing automation</category><category>Self-hosting</category><category>Open Source</category><category>Docker</category></item><item><title>Metalama generates C# patterns and enforces architecture at build time</title><link>https://sebastien.rigaux.be/en/tech-watch/links/metalama-generates-c-patterns-and-enforces-architecture-at-build-time</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/metalama-generates-c-patterns-and-enforces-architecture-at-build-time</guid><description>Metalama automates cross-cutting C# patterns with aspects that generate code at compile time, while checking architecture rules as you edit. The repetitive implementation stays out of business code and the repository, and one aspect can be applied to a method or to a set of methods selected in code. For example, an aspect can wrap a method in try/catch to log its entry, result, and exceptions. Metalama also lets you preview and debug the transformed code, making those changes inspectable.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://bd7d5fa0.cdn.prismic.io/bd7d5fa0/M-33MF2ZXaLfipgW_image-0.svg?auto=compress,format&quot; alt=&quot;&quot; width=&quot;750&quot; height=&quot;700&quot; /&gt;&lt;/p&gt;&lt;p&gt;Metalama automates cross-cutting C# patterns with aspects that generate code at compile time, while checking architecture rules as you edit. The repetitive implementation stays out of business code and the repository, and one aspect can be applied to a method or to a set of methods selected in code.&lt;/p&gt;
&lt;p&gt;For example, an aspect can wrap a method in &lt;code&gt;try/catch&lt;/code&gt; to log its entry, result, and exceptions. Metalama also lets you preview and debug the transformed code, making those changes inspectable.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://postsharp.net/metalama&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://bd7d5fa0.cdn.prismic.io/bd7d5fa0/M-33MF2ZXaLfipgW_image-0.svg?auto=compress,format" width="750" height="700"/><media:description/><category>C#</category><category>.NET</category><category>Software Architecture</category><category>Developer Experience</category></item><item><title>Motherload imports typed YAML, JSONC, CSV and Markdown into TypeScript</title><link>https://sebastien.rigaux.be/en/tech-watch/links/motherload-imports-typed-yaml-jsonc-csv-and-markdown-into-typescript</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/motherload-imports-typed-yaml-jsonc-csv-and-markdown-into-typescript</guid><description>Motherload lets you import data files as TypeScript modules typed from their contents. It supports TOML, YAML, JSONC, JSON5, CSV, TSV, Markdown, plain text and .env files; types appear in the editor, and tsc reports parsing errors with their locations. Type-checking uses TypeScript 7.1 content mappers, currently in beta, and requires --runExternalCode. At runtime, a preload or plugin adapts the same imports for Node.js and a range of bundlers.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/dXKQOoq5YQNzTzMV_image-0.png?auto=format,compress&quot; alt=&quot;Motherload graphic with the text “Import data files into TypeScript, fully typed” on the left and TypeScript code importing plans.toml, team.yaml, strings.jsonc, posts.csv, notes.md and .env on the right.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Motherload lets you import data files as TypeScript modules &lt;strong&gt;typed from their contents&lt;/strong&gt;. It supports TOML, YAML, JSONC, JSON5, CSV, TSV, Markdown, plain text and &lt;code&gt;.env&lt;/code&gt; files; types appear in the editor, and &lt;code&gt;tsc&lt;/code&gt; reports parsing errors with their locations.&lt;/p&gt;
&lt;p&gt;Type-checking uses TypeScript 7.1 &lt;em&gt;content mappers&lt;/em&gt;, currently in beta, and requires &lt;code&gt;--runExternalCode&lt;/code&gt;. At runtime, a preload or plugin adapts the same imports for Node.js and a range of bundlers.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://motherload.dev/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/dXKQOoq5YQNzTzMV_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Motherload graphic with the text “Import data files into TypeScript, fully typed” on the left and TypeScript code importing plans.toml, team.yaml, strings.jsonc, posts.csv, notes.md and .env on the right.</media:description><category>TypeScript</category><category>Developer Experience</category><category>Node.js</category></item><item><title>Next.js: an AI skill analyzes imports to reduce shipped JavaScript</title><link>https://sebastien.rigaux.be/en/tech-watch/links/nextjs-an-ai-skill-analyzes-imports-to-reduce-shipped-javascript</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/nextjs-an-ai-skill-analyzes-imports-to-reduce-shipped-javascript</guid><description>Next.js 16.4 includes an AI agent skill that analyzes Turbopack’s module and chunk graph to find imports that add to shipped JavaScript. It can, for example, spot when a static import elsewhere in the bundle prevents a component from staying deferred, then suggest changes for review before applying them. The analyzer also compares snapshots and filters code loaded on the initial render. Vercel reports nearly two megabytes of compressed JavaScript saved across v0 and vercel.com; the fixes were checked on preview deployments. The tool requires Turbopack, the default bundler since Next.js 16.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/LsCiTo3_qcg8nIQG_image-0.png?auto=format,compress&quot; alt=&quot;Black graphic with the text “Ship less JavaScript in Next.js with your AI agent” and the Next.js logo.&quot; width=&quot;2400&quot; height=&quot;1256&quot; /&gt;&lt;/p&gt;&lt;p&gt;Next.js 16.4 includes an AI agent skill that analyzes Turbopack’s module and chunk graph to find imports that add to shipped JavaScript. It can, for example, spot when a static import elsewhere in the bundle prevents a component from staying deferred, then suggest changes for review before applying them.&lt;/p&gt;
&lt;p&gt;The analyzer also compares snapshots and filters code loaded on the initial render. Vercel reports nearly two megabytes of compressed JavaScript saved across v0 and vercel.com; the fixes were checked on preview deployments. The tool requires Turbopack, the default bundler since Next.js 16.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://nextjs.org/blog/ship-less-javascript-with-ai&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/LsCiTo3_qcg8nIQG_image-0.png?auto=format,compress" width="2400" height="1256"/><media:description>Black graphic with the text “Ship less JavaScript in Next.js with your AI agent” and the Next.js logo.</media:description><category>Next.js</category><category>Agent skills</category><category>Web Performance</category><category>Turbopack</category></item><item><title>TanStack DB 1.0 RC1: using test oracles to harden agent-written code</title><link>https://sebastien.rigaux.be/en/tech-watch/links/tanstack-db-10-rc1-using-test-oracles-to-harden-agent-written-code</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/tanstack-db-10-rc1-using-test-oracles-to-harden-agent-written-code</guid><description>TanStack DB reaches 1.0 RC1 after extensive stabilization work. Kyle Mathews explains how test oracles—independent models that calculate expected behavior—and property-based testing uncovered bugs in collection updates and the change messages sent to subscribers. These executable references also give coding agents precise rules to preserve when changing the implementation. The trade-off is clear: writing and refining models takes work, but their simplicity makes complex algorithms easier to verify. The RC also supports incremental adoption, from existing REST APIs to local persistence, offline mutations, and real-time sync.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/21BsJxsdofB3ufTH_image-0.jpg?auto=format,compress&quot; alt=&quot;Illustrated map of mountains, valleys, and dotted paths connecting different points.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack DB reaches 1.0 RC1 after extensive stabilization work. Kyle Mathews explains how &lt;strong&gt;test oracles&lt;/strong&gt;—independent models that calculate expected behavior—and property-based testing uncovered bugs in collection updates and the change messages sent to subscribers.&lt;/p&gt;
&lt;p&gt;These executable references also give coding agents precise rules to preserve when changing the implementation. The trade-off is clear: writing and refining models takes work, but their simplicity makes complex algorithms easier to verify. The RC also supports incremental adoption, from existing REST APIs to local persistence, offline mutations, and real-time sync.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/tanstack-db-1.0-rc1-going-all-in-on-oracles&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/21BsJxsdofB3ufTH_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>Illustrated map of mountains, valleys, and dotted paths connecting different points.</media:description><category>TanStack DB</category><category>Property-based testing</category><category>Testing</category><category>AI Agents</category><category>Local-first</category></item><item><title>Vinext 1.4 cuts server work and speeds up hydration</title><link>https://sebastien.rigaux.be/en/tech-watch/links/vinext-14-cuts-server-work-and-speeds-up-hydration</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/vinext-14-cuts-server-work-and-speeds-up-hydration</guid><description>Vinext 1.4 reduces work across several rendering stages: App Router layouts run once per request, prefetching dynamic routes no longer renders the entire page, and the chunks needed for hydration can compile in the background in recent Chrome. On the Hacker News benchmark, the author reports 31.1 ms of CPU per request, versus 54.4 ms in 1.3 and 33.7 ms for Next.js. The release also keeps cached HTML and RSC payload generation in sync. Results still depend on the workload: on a content-site prototype, Next.js paints sooner and uses less CPU per request. A TanStack Redact test shows another trade-off: less JavaScript to download, but substantially more expensive hydration on content-heavy pages.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/VoW3Vlu1ZaFTUg9z_image-0.png?auto=format,compress&quot; alt=&quot;Visual for the Vinext 1.4 post, showing its title, a summary of the changes, and the October 28, 2026 date.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;Vinext 1.4 reduces work across several rendering stages: App Router layouts run once per request, prefetching dynamic routes no longer renders the entire page, and the chunks needed for hydration can compile in the background in recent Chrome. On the Hacker News benchmark, the author reports 31.1 ms of CPU per request, versus 54.4 ms in 1.3 and 33.7 ms for Next.js.&lt;/p&gt;
&lt;p&gt;The release also keeps cached HTML and RSC payload generation in sync. Results still depend on the workload: on a content-site prototype, Next.js paints sooner and uses less CPU per request. A TanStack Redact test shows another trade-off: less JavaScript to download, but substantially more expensive hydration on content-heavy pages.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://vinext.dev/blog/vinext-1-4&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/VoW3Vlu1ZaFTUg9z_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>Visual for the Vinext 1.4 post, showing its title, a summary of the changes, and the October 28, 2026 date.</media:description><category>Vinext</category><category>Next.js</category><category>Web Performance</category><category>Hydration</category><category>Prefetching</category></item><item><title>TanStack AI 1.0 stabilizes its core; the agent harness remains experimental</title><link>https://sebastien.rigaux.be/en/tech-watch/links/tanstack-ai-10-stabilizes-its-core-the-agent-harness-remains-experimental</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/tanstack-ai-10-stabilizes-its-core-the-agent-harness-remains-experimental</guid><description>TanStack AI 1.0 stabilizes its core APIs for combining chat, tools, media, and integrations across multiple providers and UI frameworks. Tree-shakable adapters and end-to-end tests using deterministic fixtures check the flows without live model calls. The agent harness adds durable sessions, interrupts, and background work, but remains 0.x and may change in minor releases. Upgrading requires moving the stable packages together and supplying a threadId explicitly; passing the type check does not migrate persisted conversations or files.</description><pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/WLRRw7i7xhI86EPe_image-0.jpg?auto=format,compress&quot; alt=&quot;TanStack AI 1.0 graphic with TanStack logos, the text “AI building blocks for TypeScript,” and a palm tree against a gradient background.&quot; width=&quot;1920&quot; height=&quot;1080&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack AI 1.0 stabilizes its core APIs for combining chat, tools, media, and integrations across multiple providers and UI frameworks. Tree-shakable adapters and end-to-end tests using deterministic fixtures check the flows without live model calls.&lt;/p&gt;
&lt;p&gt;The agent harness adds durable sessions, interrupts, and background work, but remains 0.x and may change in minor releases. Upgrading requires moving the stable packages together and supplying a &lt;code&gt;threadId&lt;/code&gt; explicitly; passing the type check does not migrate persisted conversations or files.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/tanstack-ai-1-0&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/WLRRw7i7xhI86EPe_image-0.jpg?auto=format,compress" width="1920" height="1080"/><media:description>TanStack AI 1.0 graphic with TanStack logos, the text “AI building blocks for TypeScript,” and a palm tree against a gradient background.</media:description><category>TanStack AI</category><category>LLMs</category><category>AI Agents</category><category>TypeScript</category><category>Testing</category></item><item><title>TanStack Redact trims React’s browser runtime</title><link>https://sebastien.rigaux.be/en/tech-watch/links/tanstack-redact-trims-reacts-browser-runtime</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/tanstack-redact-trims-reacts-browser-runtime</guid><description>TanStack Redact 0.2.0 replaces React and React DOM in the browser without changing application code. Its stable integrations support TanStack Start, Vite, Vinext, and Next.js; with the latter two, React still handles server rendering while Redact takes over hydration and client rendering. TanStack’s measurements show bundle reductions from 20.4% to 70.5% across its reference apps, but actual savings vary by project. The tradeoff is explicit: Redact renders synchronously, without React’s time slicing or interruptible rendering. A heavy render can therefore delay input, so compatibility and the busiest screens should be checked in each application.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/VmfoXPThQXMAljxd_image-0.jpg?auto=format,compress&quot; alt=&quot;TanStack Redact graphic reading “Your React app. Less JavaScript.” with logos for TanStack Start, Vite, Vinext, and Next.js.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;TanStack Redact 0.2.0 replaces React and React DOM in the browser without changing application code. Its stable integrations support TanStack Start, Vite, Vinext, and Next.js; with the latter two, React still handles server rendering while Redact takes over hydration and client rendering.&lt;/p&gt;
&lt;p&gt;TanStack’s measurements show bundle reductions from 20.4% to 70.5% across its reference apps, but actual savings vary by project. The tradeoff is explicit: Redact renders synchronously, without React’s time slicing or interruptible rendering. A heavy render can therefore delay input, so compatibility and the busiest screens should be checked in each application.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://tanstack.com/blog/introducing-tanstack-redact?ck_subscriber_id=2550494205&amp;amp;utm_source=convertkit&amp;amp;utm_medium=email&amp;amp;utm_campaign=%E2%9A%9B%EF%B8%8F%20This%20Week%20In%20React%20%23303%3A%20TanStack%2C%20Next.js%2C%20Vinext%2C%20Motion%2C%20React%20Hook%20Form%20%7C%20Expo%20Desktop%2C%20Legend%20Spark%2C%20Nitro%2C%20Exact%2C%20Skia%2C%20Screens%2C%20Unistyles%20%7C%20Node.js%2C%20Bun%2C%20SWC%2C%20Content%20Mappers%2C%20pnpm%2C%20Biome%20-%2023928066&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/VmfoXPThQXMAljxd_image-0.jpg?auto=format,compress" width="1200" height="630"/><media:description>TanStack Redact graphic reading “Your React app. Less JavaScript.” with logos for TanStack Start, Vite, Vinext, and Next.js.</media:description><category>TanStack Redact</category><category>React</category><category>Hydration</category><category>Web Performance</category></item><item><title>OpnForm: open-source forms for cloud or self-hosted deployments</title><link>https://sebastien.rigaux.be/en/tech-watch/links/opnform-open-source-forms-for-cloud-or-self-hosted-deployments</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/opnform-open-source-forms-for-cloud-or-self-hosted-deployments</guid><description>OpnForm is an open-source form builder available as both a managed cloud service and a self-hosted application. Its repository documents practical operational details: bundle-size limits, PostgreSQL index migrations that keep writes available, isolated Docker environments for worktrees, and dependency security checks. It also provides an MCP server that lets AI agents create and preview drafts, with versioned previews that support restoring earlier revisions.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/2LIDtYs1BVosHHc__image-0.png?auto=format,compress&quot; alt=&quot;OpnForm logo on a light background, with the tagline “The open-source form builder”.&quot; width=&quot;1200&quot; height=&quot;675&quot; /&gt;&lt;/p&gt;&lt;p&gt;OpnForm is an open-source form builder available as both a managed cloud service and a self-hosted application. Its repository documents practical operational details: bundle-size limits, PostgreSQL index migrations that keep writes available, isolated Docker environments for worktrees, and dependency security checks. It also provides an MCP server that lets AI agents create and preview drafts, with versioned previews that support restoring earlier revisions.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/OpnForm/OpnForm&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/2LIDtYs1BVosHHc__image-0.png?auto=format,compress" width="1200" height="675"/><media:description>OpnForm logo on a light background, with the tagline “The open-source form builder”.</media:description><category>Forms</category><category>Self-hosting</category><category>Open Source</category><category>MCP</category></item><item><title>Redact: a smaller React runtime with synchronous rendering</title><link>https://sebastien.rigaux.be/en/tech-watch/links/redact-a-smaller-react-runtime-with-synchronous-rendering</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/redact-a-smaller-react-runtime-with-synchronous-rendering</guid><description>Tanner Linsley’s AI-driven React projection experiment has become a TanStack project used in production. Redact is a smaller, React-compatible runtime that already works with Start, Next.js, Vinext, and Vite. On the server, React still handles SSR and Server Components. The tradeoff is in rendering: Redact renders synchronously, without React’s time slicing. As the blog post acknowledges, a heavy render can still delay input. The smaller runtime therefore comes with a constraint worth considering for interfaces that need to remain responsive under load.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/NfJa-Z3e60CZByow_image-0.png?auto=format,compress&quot; alt=&quot;GitHub preview of the shader-effects-inc/shaders repository, described as a WebGPU component library for React, Vue, Svelte, Solid, JavaScript, and Framer.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;Tanner Linsley’s AI-driven React projection experiment has become a TanStack project used in production. Redact is a smaller, React-compatible runtime that already works with Start, Next.js, Vinext, and Vite. On the server, React still handles SSR and Server Components.&lt;/p&gt;
&lt;p&gt;The tradeoff is in rendering: Redact renders synchronously, without React’s time slicing. As the blog post acknowledges, a heavy render can still delay input. The smaller runtime therefore comes with a constraint worth considering for interfaces that need to remain responsive under load.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/shader-effects-inc/shaders&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/NfJa-Z3e60CZByow_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub preview of the shader-effects-inc/shaders repository, described as a WebGPU component library for React, Vue, Svelte, Solid, JavaScript, and Framer.</media:description><category>TanStack Redact</category><category>React</category><category>Web Performance</category><category>SSR</category></item><item><title>WebCheck: inspect the public signals a website exposes</title><link>https://sebastien.rigaux.be/en/tech-watch/links/webcheck-inspect-the-public-signals-a-website-exposes</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/webcheck-inspect-the-public-signals-a-website-exposes</guid><description>WebCheck brings publicly exposed domain information into one interface: DNS, TLS certificates, HTTP headers, subdomains, detected technologies, and potential threat-list matches. It offers 44 checks and can also examine redirects, trackers, and email configuration. The results provide a useful starting point for surface-level checks, not a substitute for a thorough audit: some data, such as vulnerabilities linked by Shodan, depends on external sources. The project is open source, can be self-hosted, and provides an API.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/R77N_VHqf9Zrt_l7_image-0.png?auto=format,compress&quot; alt=&quot;WebCheck banner with the project name in green, the text “On-demand OSINT tool for exploring website data,” and a globe icon protected by a shield.&quot; width=&quot;1280&quot; height=&quot;640&quot; /&gt;&lt;/p&gt;&lt;p&gt;WebCheck brings publicly exposed domain information into one interface: DNS, TLS certificates, HTTP headers, subdomains, detected technologies, and potential threat-list matches. It offers &lt;strong&gt;44 checks&lt;/strong&gt; and can also examine redirects, trackers, and email configuration.&lt;/p&gt;
&lt;p&gt;The results provide a useful starting point for surface-level checks, not a substitute for a thorough audit: some data, such as vulnerabilities linked by Shodan, depends on external sources. The project is open source, can be self-hosted, and provides an API.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://web-check.xyz/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/R77N_VHqf9Zrt_l7_image-0.png?auto=format,compress" width="1280" height="640"/><media:description>WebCheck banner with the project name in green, the text “On-demand OSINT tool for exploring website data,” and a globe icon protected by a shield.</media:description><category>Security</category><category>Self-hosting</category><category>Open Source</category></item><item><title>RAG-Anything: handling charts in multimodal documents</title><link>https://sebastien.rigaux.be/en/tech-watch/links/rag-anything-handling-charts-in-multimodal-documents</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/rag-anything-handling-charts-in-multimodal-documents</guid><description>RAG-Anything is a framework built on LightRAG for indexing and querying documents that mix text, images, tables, equations, and charts. It coordinates parsing and content analysis in a single multimodal pipeline. The project combines vector similarity with a knowledge graph, provides processors for different content types, and can pass retrieved images to a vision model during queries. A recent change also routes rendered charts through the image pipeline while preserving captions and extracted text. To update a previously indexed document, multimodal reprocessing must be explicitly enabled with force_multimodal_reprocess=True.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/Yb0opRRi9ZimdNWl_image-0.png?auto=format,compress&quot; alt=&quot;GitHub preview of the HKUDS/RAG-Anything repository, showing the Open DataScience logo and contributor, issue, discussion, star, and fork counts.&quot; width=&quot;1200&quot; height=&quot;600&quot; /&gt;&lt;/p&gt;&lt;p&gt;RAG-Anything is a framework built on LightRAG for indexing and querying documents that mix text, images, tables, equations, and charts. It coordinates parsing and content analysis in a single multimodal pipeline.&lt;/p&gt;
&lt;p&gt;The project combines vector similarity with a knowledge graph, provides processors for different content types, and can pass retrieved images to a vision model during queries. A recent change also routes rendered charts through the image pipeline while preserving captions and extracted text. To update a previously indexed document, multimodal reprocessing must be explicitly enabled with &lt;code&gt;force_multimodal_reprocess=True&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/HKUDS/RAG-Anything&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/Yb0opRRi9ZimdNWl_image-0.png?auto=format,compress" width="1200" height="600"/><media:description>GitHub preview of the HKUDS/RAG-Anything repository, showing the Open DataScience logo and contributor, issue, discussion, star, and fork counts.</media:description><category>RAG</category><category>Vector search</category><category>Knowledge graphs</category><category>Document management</category></item><item><title>MicroKit: 54 React, CSS and Tailwind microinteractions to copy</title><link>https://sebastien.rigaux.be/en/tech-watch/links/microkit-54-react-css-and-tailwind-microinteractions-to-copy</link><guid isPermaLink="true">https://sebastien.rigaux.be/en/tech-watch/links/microkit-54-react-css-and-tailwind-microinteractions-to-copy</guid><description>MicroKit collects copy-ready interactions—animated buttons, tabs, inputs and hover effects—with React or CSS and Tailwind variants. Each component is copied separately in JavaScript or TypeScript, with no package to install; 26 of the 54 have no dependencies, while 28 use lucide-react. The code is MIT-licensed, and Tailwind variants are designed for versions 3 and 4. In the Next.js App Router, most components work in server components; those using state, refs or event handlers need « use client ».</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://images.prismic.io/bd7d5fa0/mMYhzXU28q2z9KG7_image-0.png?auto=format,compress&quot; alt=&quot;MicroKit UI graphic on a black background, showing the text “Microinteractions worth copying” beside concentric orange rounded squares.&quot; width=&quot;1200&quot; height=&quot;630&quot; /&gt;&lt;/p&gt;&lt;p&gt;MicroKit collects copy-ready interactions—animated buttons, tabs, inputs and hover effects—with React or CSS and Tailwind variants. Each component is copied separately in JavaScript or TypeScript, with no package to install; 26 of the 54 have no dependencies, while 28 use lucide-react.&lt;/p&gt;
&lt;p&gt;The code is MIT-licensed, and Tailwind variants are designed for versions 3 and 4. In the Next.js App Router, most components work in server components; those using state, refs or event handlers need « use client ».&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://microkit.co/&quot;&gt;Open original link&lt;/a&gt;&lt;/p&gt;</content:encoded><media:thumbnail url="https://images.prismic.io/bd7d5fa0/mMYhzXU28q2z9KG7_image-0.png?auto=format,compress" width="1200" height="630"/><media:description>MicroKit UI graphic on a black background, showing the text “Microinteractions worth copying” beside concentric orange rounded squares.</media:description><category>Animation</category><category>React</category><category>CSS</category><category>Tailwind CSS</category><category>UI/UX</category></item></channel></rss>