<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title><![CDATA[iloveblogs.blog]]></title>
    <link>https://www.iloveblogs.blog</link>
    <description><![CDATA[Production-focused guides for Next.js, Supabase, and SaaS engineering.]]></description>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Jul 2026 01:44:43 GMT</lastBuildDate>
    <atom:link href="https://www.iloveblogs.blog/rss.xml" rel="self" type="application/rss+xml" />
    <image>
      <url>https://www.iloveblogs.blog/logo.png</url>
      <title><![CDATA[iloveblogs.blog]]></title>
      <link>https://www.iloveblogs.blog</link>
    </image>
    
    <item>
      <title><![CDATA[Fix: Can't Bind to 'formGroup' in Angular (Known Property)]]></title>
      <link>https://www.iloveblogs.blog/post/cant-bind-to-formgroup-since-it-isnt-a-known-property-of-form</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/cant-bind-to-formgroup-since-it-isnt-a-known-property-of-form</guid>
      <description><![CDATA[The 'Can't bind to formGroup' error occurs when Angular doesn't recognize the formGroup directive. Here's how to fix it in both NgModule and standalone setups.]]></description>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>TypeScript</category>
      <category>Angular</category>
      <category>Reactive Forms</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The 'Can't bind to formGroup' error occurs when Angular doesn't recognize the formGroup directive. Here's how to fix it in both NgModule and standalone setups.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Missing Suspense boundary with useSearchParams in Next.js: 3 fixes]]></title>
      <link>https://www.iloveblogs.blog/post/fix-nextjs-missing-suspense-boundary-use-searchparams</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-nextjs-missing-suspense-boundary-use-searchparams</guid>
      <description><![CDATA[The error only surfaces during the production build — dev mode hides it completely. Here is why, and the three fixes ranked by situation.]]></description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>nextjs-supabase</category>
      <category>next.js</category>
      <category>app-router</category>
      <category>useSearchParams</category>
      <category>suspense</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-ff9fe0c870eb?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The error only surfaces during the production build — dev mode hides it completely. Here is why, and the three fixes ranked by situation.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix: Next.js proxy.js matcher not working for static assets]]></title>
      <link>https://www.iloveblogs.blog/post/fix-nextjs-proxy-matcher-breaking-static-assets-auth</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-nextjs-proxy-matcher-breaking-static-assets-auth</guid>
      <description><![CDATA[Without a matcher, proxy.js runs on every request including _next/static and public assets. And Server Functions are not separate routes — a matcher gap silently drops auth coverage.]]></description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>nextjs-supabase</category>
      <category>next.js</category>
      <category>proxy</category>
      <category>middleware</category>
      <category>authentication</category>
      <category>troubleshooting</category>
      <category>next.js 16</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Without a matcher, proxy.js runs on every request including _next/static and public assets. And Server Functions are not separate routes — a matcher gap silently drops auth coverage.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase getClaims() vs getSession(): The Silent Auth Bug]]></title>
      <link>https://www.iloveblogs.blog/post/fix-supabase-getclaims-vs-getsession-server-auth</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-supabase-getclaims-vs-getsession-server-auth</guid>
      <description><![CDATA[Your auth looks correct but users can bypass it. The bug: getSession() in server code reads from local storage without revalidating the token against the Auth server.]]></description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>nextjs-supabase</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>server-components</category>
      <category>next.js</category>
      <category>security</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Your auth looks correct but users can bypass it. The bug: getSession() in server code reads from local storage without revalidating the token against the Auth server.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase redirectTo Failing on Vercel Previews: SITE_URL Fix]]></title>
      <link>https://www.iloveblogs.blog/post/fix-supabase-redirectto-not-working-vercel-preview</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-supabase-redirectto-not-working-vercel-preview</guid>
      <description><![CDATA[The redirect lands on your production domain instead of the preview URL, or you get a "redirect URL not allowed" error. Here is the exact Supabase dashboard config and the Vercel env var pattern.]]></description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>nextjs-supabase</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>vercel</category>
      <category>deployment</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The redirect lands on your production domain instead of the preview URL, or you get a "redirect URL not allowed" error. Here is the exact Supabase dashboard config and the Vercel env var pattern.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[VERCEL_EXPERIMENTAL_DEV_SKIP_LINK: Stop Dev Link Hangs]]></title>
      <link>https://www.iloveblogs.blog/post/vercel-experimental-dev-skip-link</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/vercel-experimental-dev-skip-link</guid>
      <description><![CDATA[Configure VERCEL_EXPERIMENTAL_DEV_SKIP_LINK to skip the Vercel CLI dev link and speed up local Next.js development.]]></description>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>Vercel</category>
      <category>Next.js</category>
      <category>environment-variables</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Configure VERCEL_EXPERIMENTAL_DEV_SKIP_LINK to skip the Vercel CLI dev link and speed up local Next.js development.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[TypeScript Getter Setter Errors: TS1056, TS1028, TS2378 Fix]]></title>
      <link>https://www.iloveblogs.blog/post/get-and-set-in-typescript</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/get-and-set-in-typescript</guid>
      <description><![CDATA[TypeScript getter/setter errors come from ES target misconfiguration or type mismatches. Fix TS1056, TS1028, and TS2378 in minutes.]]></description>
      <pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>TypeScript</category>
      <category>JavaScript</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[TypeScript getter/setter errors come from ES target misconfiguration or type mismatches. Fix TS1056, TS1028, and TS2378 in minutes.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Docker Tutorial 2026: Dockerfile, Compose + Production Setup]]></title>
      <link>https://www.iloveblogs.blog/post/docker-tutorial-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/docker-tutorial-2026</guid>
      <description><![CDATA[Production Docker for Node.js — Dockerfile caching, Compose named networks and volumes, and the footguns that break every first attempt.]]></description>
      <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>docker</category>
      <category>docker-compose</category>
      <category>devops</category>
      <category>next.js</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Production Docker for Node.js — Dockerfile caching, Compose named networks and volumes, and the footguns that break every first attempt.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[JSX.Element vs ReactNode vs ReactElement: TS2322 Fix]]></title>
      <link>https://www.iloveblogs.blog/post/jsxelement-vs-reactnode-vs-reactelement</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/jsxelement-vs-reactnode-vs-reactelement</guid>
      <description><![CDATA[Fix TS2322 by understanding when ReactNode, JSX.Element, and ReactElement apply in React + TypeScript component typing.]]></description>
      <pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>TypeScript</category>
      <category>React</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1547082299-de196ea013d6?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Fix TS2322 by understanding when ReactNode, JSX.Element, and ReactElement apply in React + TypeScript component typing.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix ChunkLoadError: Loading Chunk Failed in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-chunkloaderror-loading-chunk-failed-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-chunkloaderror-loading-chunk-failed-fix</guid>
      <description><![CDATA["ChunkLoadError: Loading chunk 5760 failed" almost always means a user has an old tab open after you shipped a new deploy. The fix is configuration — deploymentId, build IDs, and CDN headers — not a try/catch.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>deployment</category>
      <category>webpack</category>
      <category>troubleshooting</category>
      <category>vercel</category>
      <enclosure url="https://images.unsplash.com/photo-1633356122544-f134324a6cee?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA["ChunkLoadError: Loading chunk 5760 failed" almost always means a user has an old tab open after you shipped a new deploy. The fix is configuration — deploymentId, build IDs, and CDN headers — not a try/catch.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Dynamic Server Usage Error in Next.js App Router]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-dynamic-server-usage-couldnt-be-rendered-statically-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-dynamic-server-usage-couldnt-be-rendered-statically-fix</guid>
      <description><![CDATA[Next.js throws this when a route it wants to render at build time calls a dynamic function — cookies(), headers(), searchParams, or a no-store fetch. The fix is either opt the route into dynamic rendering, or remove the request-time dependency if it should be static.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>app-router</category>
      <category>rendering</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1542831371-29b0f74f9713?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Next.js throws this when a route it wants to render at build time calls a dynamic function — cookies(), headers(), searchParams, or a no-store fetch. The fix is either opt the route into dynamic rendering, or remove the request-time dependency if it should be static.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix next/image Hostname Not Configured in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-image-hostname-not-configured-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-image-hostname-not-configured-fix</guid>
      <description><![CDATA[next/image strictly allow-lists remote hosts. The fix is images.remotePatterns in next.config — matched exactly on protocol, hostname, port, and pathname. Get one wrong (http vs https, a subdomain, a missing port) and it still blocks.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>next-image</category>
      <category>configuration</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[next/image strictly allow-lists remote hosts. The fix is images.remotePatterns in next.config — matched exactly on protocol, hostname, port, and pathname. Get one wrong (http vs https, a subdomain, a missing port) and it still blocks.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[use client vs use server in Next.js: The Real Difference]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-use-client-vs-use-server-directives</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-use-client-vs-use-server-directives</guid>
      <description><![CDATA[The #1 misconception in the App Router: "use server" is not the opposite of "use client". One marks a client boundary in the module graph; the other exposes callable server functions. Server Components are the default — no directive needed.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>react</category>
      <category>app-router</category>
      <category>server-components</category>
      <enclosure url="https://images.unsplash.com/photo-1607799279861-4dd421887fb3?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The #1 misconception in the App Router: "use server" is not the opposite of "use client". One marks a client boundary in the module graph; the other exposes callable server functions. Server Components are the default — no directive needed.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Postgres 'Could Not Serialize Access' (40001)]]></title>
      <link>https://www.iloveblogs.blog/post/postgres-could-not-serialize-access-concurrent-update-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/postgres-could-not-serialize-access-concurrent-update-supabase</guid>
      <description><![CDATA[Postgres aborts one transaction with 40001 to prevent a serialization anomaly. The docs are explicit: apps using REPEATABLE READ or SERIALIZABLE must be prepared to retry. Here's the correct retry loop and how to reduce conflicts.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>postgres</category>
      <category>supabase</category>
      <category>transactions</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Postgres aborts one transaction with 40001 to prevent a serialization anomaly. The docs are explicit: apps using REPEATABLE READ or SERIALIZABLE must be prepared to retry. Here's the correct retry loop and how to reduce conflicts.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Foreign Key Constraint Violation in Supabase (23503)]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-foreign-key-constraint-violation-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-foreign-key-constraint-violation-fix</guid>
      <description><![CDATA[23503 means a foreign key relationship is broken. Inserting a child before its parent? Insert the parent first. Can't delete a parent with children? Choose an ON DELETE action. The most common Supabase case is a profiles row referencing auth.users.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>supabase</category>
      <category>postgres</category>
      <category>database</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1605379399642-870262d3d051?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[23503 means a foreign key relationship is broken. Inserting a child before its parent? Insert the parent first. Can't delete a parent with children? Choose an ON DELETE action. The most common Supabase case is a profiles row referencing auth.users.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Select the First Row per Group in Supabase Postgres]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-select-first-row-per-group-distinct-on</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-select-first-row-per-group-distinct-on</guid>
      <description><![CDATA[The "greatest-N-per-group" problem: one representative row per group. Postgres solves it with DISTINCT ON; supabase-js can't express that directly, so you wrap it in a view or an RPC function. Both confirmed by Supabase maintainers.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>supabase</category>
      <category>postgres</category>
      <category>sql</category>
      <category>database</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The "greatest-N-per-group" problem: one representative row per group. Postgres solves it with DISTINCT ON; supabase-js can't express that directly, so you wrap it in a view or an RPC function. Both confirmed by Supabase maintainers.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix TS7016: Could Not Find Declaration File for Module]]></title>
      <link>https://www.iloveblogs.blog/post/typescript-could-not-find-declaration-file-module-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/typescript-could-not-find-declaration-file-module-fix</guid>
      <description><![CDATA[TS7016 fires when you import an untyped JavaScript module under noImplicitAny. The right fix is usually `npm i -D @types/X` — but sometimes the package already ships types, and sometimes you need to write a one-line declaration.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>typescript</category>
      <category>modules</category>
      <category>types</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[TS7016 fires when you import an untyped JavaScript module under noImplicitAny. The right fix is usually `npm i -D @types/X` — but sometimes the package already ships types, and sometimes you need to write a one-line declaration.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix TS2305: Module Has No Exported Member in TypeScript]]></title>
      <link>https://www.iloveblogs.blog/post/typescript-module-has-no-exported-member-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/typescript-module-has-no-exported-member-fix</guid>
      <description><![CDATA[TS2305 says the export you're importing doesn't exist under that name. The cause is almost always one of: a typo, default-vs-named confusion, a CJS/ESM interop mismatch, or @types drifting from the runtime package. Each has a precise fix.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>typescript</category>
      <category>modules</category>
      <category>esmodules</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1516116216624-53e697fedbea?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[TS2305 says the export you're importing doesn't exist under that name. The cause is almost always one of: a typo, default-vs-named confusion, a CJS/ESM interop mismatch, or @types drifting from the runtime package. Each has a precise fix.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix TS2564: Property Has No Initializer in TypeScript]]></title>
      <link>https://www.iloveblogs.blog/post/typescript-property-has-no-initializer-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/typescript-property-has-no-initializer-fix</guid>
      <description><![CDATA[TS2564 fires when a class field is typed but never guaranteed to be set. The fix depends on WHY it's unset: a default value, constructor assignment, the definite-assignment `!`, or an optional `?`. Picking the wrong one hides real bugs.]]></description>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>typescript</category>
      <category>classes</category>
      <category>strict-mode</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1517180102446-f3ece451e9d8?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[TS2564 fires when a class field is typed but never guaranteed to be set. The fix depends on WHY it's unset: a default value, constructor assignment, the definite-assignment `!`, or an optional `?`. Picking the wrong one hides real bugs.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix "Property does not exist on Window" in TypeScript]]></title>
      <link>https://www.iloveblogs.blog/post/how-do-you-explicitly-set-a-new-property-on-window-in-typescript</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-do-you-explicitly-set-a-new-property-on-window-in-typescript</guid>
      <description><![CDATA[Learn how to safely extend the Window interface in TypeScript using declaration merging, type assertions, and bracket notation to avoid compile-time errors.]]></description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>TypeScript</category>
      <category>TypeScript</category>
      <category>DOM</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1587620962725-abab7fe55159?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn how to safely extend the Window interface in TypeScript using declaration merging, type assertions, and bracket notation to avoid compile-time errors.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Build Passed But Production Broke]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-build-passes-production-broken-postmortem</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-build-passes-production-broken-postmortem</guid>
      <description><![CDATA[A green build only proves the bundle compiled. This postmortem walks through three production-only failures: missing Vercel env vars, Edge runtime imports, and cache behavior that changed after deploy.]]></description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Next.js</category>
      <category>nextjs</category>
      <category>vercel</category>
      <category>production</category>
      <category>postmortem</category>
      <category>debugging</category>
      <enclosure url="https://images.unsplash.com/photo-1550751827-4bd374c3f58b?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A green build only proves the bundle compiled. This postmortem walks through three production-only failures: missing Vercel env vars, Edge runtime imports, and cache behavior that changed after deploy.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Middleware Not Running on Vercel: 3 Causes]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-middleware-not-running-vercel-production</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-middleware-not-running-vercel-production</guid>
      <description><![CDATA[Middleware that works locally can disappear in Vercel production because the matcher never matches, Edge bundles a Node-only import, or auth middleware cannot read the token. This guide gives you the diagnosis order I use before touching app code.]]></description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Next.js</category>
      <category>nextjs</category>
      <category>vercel</category>
      <category>middleware</category>
      <category>auth</category>
      <category>debugging</category>
      <enclosure url="https://images.unsplash.com/photo-1550751827-4bd374c3f58b?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Middleware that works locally can disappear in Vercel production because the matcher never matches, Edge bundles a Node-only import, or auth middleware cannot read the token. This guide gives you the diagnosis order I use before touching app code.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Realtime Not Receiving Events: Complete Fix]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-realtime-subscription-not-receiving-events</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-realtime-subscription-not-receiving-events</guid>
      <description><![CDATA[A Supabase Realtime subscription can say SUBSCRIBED and still receive nothing. This fix walks through RLS, filter syntax, stale React subscriptions, paused projects, and broadcast versus postgres_changes confusion.]]></description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Supabase</category>
      <category>supabase</category>
      <category>realtime</category>
      <category>nextjs</category>
      <category>rls</category>
      <category>debugging</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A Supabase Realtime subscription can say SUBSCRIBED and still receive nothing. This fix walks through RLS, filter syntax, stale React subscriptions, paused projects, and broadcast versus postgres_changes confusion.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to set the next/image component to 100% height]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-set-the-nextimage-component-to-100-height</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-set-the-nextimage-component-to-100-height</guid>
      <description><![CDATA[If your <Image / component ignores height: 100% and appears too small or misaligned, the issue is almost always that the parent container lacks an explicit]]></description>
      <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>nextjs-supabase</category>
      <category>nextjs-supabase</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If your <Image / component ignores height: 100% and appears too small or misaligned, the issue is almost always that the parent container lacks an explicit]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Module not found: Can't resolve 'encoding' in Vercel]]></title>
      <link>https://www.iloveblogs.blog/post/module-not-found-cant-resolve-encoding-in-vercelpath0nodemodu</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/module-not-found-cant-resolve-encoding-in-vercelpath0nodemodu</guid>
      <description><![CDATA[You see "Module not found: Can't resolve 'encoding'" in your Vercel deployment logs. This guide explains why it happens with cross-fetch/node-fetch and how to fix it permanently.]]></description>
      <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Next.js</category>
      <category>Next.js</category>
      <category>Supabase</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1550751827-4bd374c3f58b?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[You see "Module not found: Can't resolve 'encoding'" in your Vercel deployment logs. This guide explains why it happens with cross-fetch/node-fetch and how to fix it permanently.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix 'new row violates row-level security policy for table]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-bucket-new-row-violates-row-level-security-policy-for-table</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-bucket-new-row-violates-row-level-security-policy-for-table</guid>
      <description><![CDATA[You're seeing 'new row violates row-level security policy for table objects' when uploading to Supabase Storage. Here's why it happens, how to fix it, and how to prevent it in the future.]]></description>
      <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Supabase</category>
      <category>Supabase</category>
      <category>Storage</category>
      <category>RLS</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[You're seeing 'new row violates row-level security policy for table objects' when uploading to Supabase Storage. Here's why it happens, how to fix it, and how to prevent it in the future.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to get COUNT(*) in Supabase]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-get-count-in-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-get-count-in-supabase</guid>
      <description><![CDATA[If you are fetching whole result sets just to count them, you are paying for bandwidth and latency you do not need. Supabase already returns counts in query metadata.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>PostgreSQL in Production</category>
      <category>supabase</category>
      <category>postgres</category>
      <category>count</category>
      <category>queries</category>
      <category>performance</category>
      <category>sql</category>
      <enclosure url="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If you are fetching whole result sets just to count them, you are paying for bandwidth and latency you do not need. Supabase already returns counts in query metadata.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to get query string parameters in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-get-query-string-parameters-in-nextjs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-get-query-string-parameters-in-nextjs</guid>
      <description><![CDATA[If `router.query` examples keep breaking on you, the problem is usually that you're mixing App Router and Pages Router APIs. Here is the exact fix for each case.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>app router</category>
      <category>pages router</category>
      <category>query string</category>
      <category>useSearchParams</category>
      <category>routing</category>
      <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If `router.query` examples keep breaking on you, the problem is usually that you're mixing App Router and Pages Router APIs. Here is the exact fix for each case.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to set the next/image component to 100% height]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-set-next-image-component-to-100-percent-height</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-set-next-image-component-to-100-percent-height</guid>
      <description><![CDATA[If your `next/image` still asks for width and height or collapses to zero height, the image is not the real problem. The parent box is.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>next image</category>
      <category>image optimization</category>
      <category>css</category>
      <category>core web vitals</category>
      <category>cls</category>
      <enclosure url="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If your `next/image` still asks for width and height or collapses to zero height, the image is not the real problem. The parent box is.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[n8n requested webhook is not registered fix]]></title>
      <link>https://www.iloveblogs.blog/post/n8n-requested-webhook-is-not-registered-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/n8n-requested-webhook-is-not-registered-fix</guid>
      <description><![CDATA[This n8n webhook error is usually not about your payload. It is almost always a test-vs-production URL mixup or an inactive workflow.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>n8n</category>
      <category>webhooks</category>
      <category>automation</category>
      <category>debugging</category>
      <category>self-hosting</category>
      <category>integrations</category>
      <enclosure url="https://images.unsplash.com/photo-1551434678-e076c223a692?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[This n8n webhook error is usually not about your payload. It is almost always a test-vs-production URL mixup or an inactive workflow.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Redirect from / to another page]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-redirect-from-root-to-another-page</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-redirect-from-root-to-another-page</guid>
      <description><![CDATA[If your redirect works only after render, flickers, or fires in the wrong place, you are probably using the wrong redirect API for the job. Here is the exact mapping.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>redirects</category>
      <category>app router</category>
      <category>next.config.js</category>
      <category>useRouter</category>
      <category>routing</category>
      <enclosure url="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If your redirect works only after render, flickers, or fires in the wrong place, you are probably using the wrong redirect API for the job. Here is the exact mapping.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Return inserted row ID in Supabase JS]]></title>
      <link>https://www.iloveblogs.blog/post/return-inserted-row-id-in-supabase-js</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/return-inserted-row-id-in-supabase-js</guid>
      <description><![CDATA[If `data` is null after an insert, Supabase is doing exactly what the current docs say. You need to ask for the row back explicitly.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>PostgreSQL in Production</category>
      <category>supabase</category>
      <category>supabase-js</category>
      <category>insert</category>
      <category>postgres</category>
      <category>ids</category>
      <category>api</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-aa79dcee981c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If `data` is null after an insert, Supabase is doing exactly what the current docs say. You need to ask for the row back explicitly.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase bucket RLS policy for table objects fix]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-storage-new-row-violates-rls-policy-objects</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-storage-new-row-violates-rls-policy-objects</guid>
      <description><![CDATA[This Storage error almost never means Supabase is broken. It usually means your upload path, your RLS policy, or your use of `upsert` does not match how Storage actually authorizes writes.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>supabase</category>
      <category>storage</category>
      <category>rls</category>
      <category>security</category>
      <category>file uploads</category>
      <category>next.js</category>
      <enclosure url="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[This Storage error almost never means Supabase is broken. It usually means your upload path, your RLS policy, or your use of `upsert` does not match how Storage actually authorizes writes.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Why useEffect runs twice in Next.js dev]]></title>
      <link>https://www.iloveblogs.blog/post/why-useeffect-runs-twice-in-nextjs-dev</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/why-useeffect-runs-twice-in-nextjs-dev</guid>
      <description><![CDATA[If your logs, API calls, or subscriptions fire twice in local dev, you are probably seeing React's development-only Strict Mode check. Here is what to fix and what not to panic about.]]></description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>react</category>
      <category>next.js</category>
      <category>useEffect</category>
      <category>strict mode</category>
      <category>debugging</category>
      <category>app router</category>
      <enclosure url="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If your logs, API calls, or subscriptions fire twice in local dev, you are probably seeing React's development-only Strict Mode check. Here is what to fix and what not to panic about.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to Access Route Parameter Inside getServerSideProps]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-access-route-parameter-inside-getserversideprops-in-nextjs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-access-route-parameter-inside-getserversideprops-in-nextjs</guid>
      <description><![CDATA[Learn why your dynamic route parameter appears as undefined in getServerSideProps and how to correctly extract it from the context object for server-side data fetching.]]></description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Next.js</category>
      <category>Next.js</category>
      <category>TypeScript</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1550751827-4bd374c3f58b?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn why your dynamic route parameter appears as undefined in getServerSideProps and how to correctly extract it from the context object for server-side data fetching.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Jest vs Supabase: Mocking vs Integration in 2026]]></title>
      <link>https://www.iloveblogs.blog/post/jest-vs-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/jest-vs-supabase</guid>
      <description><![CDATA[If you're shipping a logic-heavy frontend with simple data fetching, pick Jest (Mocking) for raw speed and instant feedback]]></description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>Jest</category>
      <category>Supabase</category>
      <category>testing</category>
      <enclosure url="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If you're shipping a logic-heavy frontend with simple data fetching, pick Jest (Mocking) for raw speed and instant feedback]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js 15 Minimum Node.js Version 18.18.0]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-15-minimum-nodejs-version-18180</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-15-minimum-nodejs-version-18180</guid>
      <description><![CDATA[Next.js 15 drops support for older Node versions. Here is how to upgrade to Node.js 18.18.0 or later and fix build errors.]]></description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>Next.js</category>
      <category>Node.js</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Next.js 15 drops support for older Node versions. Here is how to upgrade to Node.js 18.18.0 or later and fix build errors.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase service_role Key: Bypass RLS Safely in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-service-role-key-nextjs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-service-role-key-nextjs</guid>
      <description><![CDATA[Learn how to securely use the Supabase service role key in Next.js Edge Functions and Server Actions to bypass RLS and manage users.]]></description>
      <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>Supabase</category>
      <category>Next.js</category>
      <category>Security</category>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn how to securely use the Supabase service role key in Next.js Edge Functions and Server Actions to bypass RLS and manage users.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase vs Testing Library: 2026 Strategy]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-vs-testing-library</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-vs-testing-library</guid>
      <description><![CDATA[If you're shipping UI-heavy features where the backend logic is already proven, pick Testing Library with mocks for speed and]]></description>
      <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>Supabase</category>
      <category>Testing Library</category>
      <category>comparison</category>
      <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If you're shipping UI-heavy features where the backend logic is already proven, pick Testing Library with mocks for speed and]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Create an enum column in Supabase – 2026 guide]]></title>
      <link>https://www.iloveblogs.blog/post/how-can-i-create-an-enum-column-in-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-can-i-create-an-enum-column-in-supabase</guid>
      <description><![CDATA[Step‑by‑step guide to adding a PostgreSQL enum type and column in Supabase, including verification and common pitfalls.]]></description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>PostgreSQL in Production</category>
      <category>supabase</category>
      <category>postgresql</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504868584819-f8e8b4b6d7e3?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Step‑by‑step guide to adding a PostgreSQL enum type and column in Supabase, including verification and common pitfalls.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix "EADDRINUSE: address already in use :::3000" Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-set-port-in-nextjs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-set-port-in-nextjs</guid>
      <description><![CDATA[Change the default Next.js port when it collides with another process. Step‑by‑step fix with code, verification, and prevention tips.]]></description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>port</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504639725590-34d0984388bd?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Change the default Next.js port when it collides with another process. Step‑by‑step fix with code, verification, and prevention tips.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix React 18 Hydration Mismatch in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/react-18-hydration-failed-because-the-initial-ui-does-not-match-what</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/react-18-hydration-failed-because-the-initial-ui-does-not-match-what</guid>
      <description><![CDATA[A step‑by‑step fix for the React 18 hydration mismatch error in Next.js apps, covering root cause, code changes, verification, and prevention.]]></description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>nextjs</category>
      <category>react</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1460925895917-afdab827c52f?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A step‑by‑step fix for the React 18 hydration mismatch error in Next.js apps, covering root cause, code changes, verification, and prevention.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix "permission denied for schema public" in Supabase]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-client-permission-denied-for-schema-public</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-client-permission-denied-for-schema-public</guid>
      <description><![CDATA[Learn the exact steps to grant the right permissions in Supabase and stop the 'permission denied for schema public' error from breaking your app.]]></description>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>PostgreSQL in Production</category>
      <category>supabase</category>
      <category>postgresql</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504868584819-f8e8b4b6d7e3?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn the exact steps to grant the right permissions in Supabase and stop the 'permission denied for schema public' error from breaking your app.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix "lcp" not working in production]]></title>
      <link>https://www.iloveblogs.blog/post/fix-lcp-not-working-in-production</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-lcp-not-working-in-production</guid>
      <description><![CDATA[When LCP data never appears in your analytics, a missing reportWebVitals export is usually to blame. Follow these steps to fix it.]]></description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>nextjs</category>
      <category>performance</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504868584819-f8e8b4b6d7e3?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[When LCP data never appears in your analytics, a missing reportWebVitals export is usually to blame. Follow these steps to fix it.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to implement LCP end to end]]></title>
      <link>https://www.iloveblogs.blog/post/how-to-implement-lcp-end-to-end</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-to-implement-lcp-end-to-end</guid>
      <description><![CDATA[Learn how to instrument Largest Contentful Paint (LCP) in a Next.js project, send the metric to your analytics provider, and verify that the data is accurate.]]></description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>nextjs</category>
      <category>performance</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1504868584819-f8e8b4b6d7e3?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn how to instrument Largest Contentful Paint (LCP) in a Next.js project, send the metric to your analytics provider, and verify that the data is accurate.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Magic Link Production Checklist]]></title>
      <link>https://www.iloveblogs.blog/post/magic-link-production-checklist</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/magic-link-production-checklist</guid>
      <description><![CDATA[Run this checklist before you ship magic‑link auth to production. It covers configuration, RLS, monitoring, performance, and cost safeguards.]]></description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>checklist</category>
      <category>supabase-auth</category>
      <category>production</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Run this checklist before you ship magic‑link auth to production. It covers configuration, RLS, monitoring, performance, and cost safeguards.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Disable Turbopack for a Next.js Production Build (Webpack)]]></title>
      <link>https://www.iloveblogs.blog/post/disable-turbopack-for-a-nextjs-production-build</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/disable-turbopack-for-a-nextjs-production-build</guid>
      <description><![CDATA[Disable Turbopack for Next.js 16 production builds and fall back to Webpack with the one flag that actually exists.]]></description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>Next.js</category>
      <category>Supabase</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Disable Turbopack for Next.js 16 production builds and fall back to Webpack with the one flag that actually exists.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[TypeError cookies() crash in Next.js route handler]]></title>
      <link>https://www.iloveblogs.blog/post/typeerror-cookies-crash-nextjs-route-handler</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/typeerror-cookies-crash-nextjs-route-handler</guid>
      <description><![CDATA[A production‑grade fix for the `TypeError: cookies() is not a function` crash that appears in Next.js route handlers after a deploy.]]></description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>nextjs</category>
      <category>supabase</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1624996379697-f01d168b1a52?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A production‑grade fix for the `TypeError: cookies() is not a function` crash that appears in Next.js route handlers after a deploy.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix "cookies() should be awaited" Error in Next.js 15]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-15-cookies-async-error-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-15-cookies-async-error-fix</guid>
      <description><![CDATA[Next.js 15 broke synchronous `cookies().get()`. Every server-side call must now `await cookies()` first. Here's the precise migration — App Router pages, route handlers, Server Actions, and Supabase SSR — plus the codemod that fixes 90% of call sites automatically.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>next.js 15</category>
      <category>app router</category>
      <category>server components</category>
      <category>migration</category>
      <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Next.js 15 broke synchronous `cookies().get()`. Every server-side call must now `await cookies()` first. Here's the precise migration — App Router pages, route handlers, Server Actions, and Supabase SSR — plus the codemod that fixes 90% of call sites automatically.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Disable Turbopack in Next.js 16: next build --webpack]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-16-disable-turbopack-production-build</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-16-disable-turbopack-production-build</guid>
      <description><![CDATA[Next.js 16 makes Turbopack the default builder. If `next start` crashes or pages 500 after a Turbopack production build, here's the exact way to opt out per-script, per-environment, or per-project — and the symptoms that mean you should.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>next.js 16</category>
      <category>turbopack</category>
      <category>production build</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Next.js 16 makes Turbopack the default builder. If `next start` crashes or pages 500 after a Turbopack production build, here's the exact way to opt out per-script, per-environment, or per-project — and the symptoms that mean you should.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Next.js revalidatePath Not Working in Server Actions]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-server-actions-revalidatepath-not-working-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-server-actions-revalidatepath-not-working-fix</guid>
      <description><![CDATA[Your Server Action mutates data but the page shows stale values until you hard-refresh. `revalidatePath` is one of those APIs that "succeeds" while doing nothing. Here are the six reasons it no-ops, with the exact fix for each — including the one nobody tells you about: `dynamic = 'force-static'`.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>next.js</category>
      <category>server actions</category>
      <category>app router</category>
      <category>caching</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1633356122544-f134324a6cee?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Your Server Action mutates data but the page shows stale values until you hard-refresh. `revalidatePath` is one of those APIs that "succeeds" while doing nothing. Here are the six reasons it no-ops, with the exact fix for each — including the one nobody tells you about: `dynamic = 'force-static'`.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Stripe Webhook Signature Verification Failed in Next.js]]></title>
      <link>https://www.iloveblogs.blog/post/stripe-webhook-signature-verification-failed-nextjs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/stripe-webhook-signature-verification-failed-nextjs</guid>
      <description><![CDATA[If Stripe webhooks return `Webhook signature verification failed`, your Next.js route is parsing the JSON before Stripe sees it. Here's the exact raw-body pattern for App Router, Pages Router, and Vercel Edge — plus the three secret-mismatch traps that cause the same error.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>stripe</category>
      <category>webhooks</category>
      <category>next.js</category>
      <category>payments</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If Stripe webhooks return `Webhook signature verification failed`, your Next.js route is parsing the JSON before Stripe sees it. Here's the exact raw-body pattern for App Router, Pages Router, and Vercel Edge — plus the three secret-mismatch traps that cause the same error.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Auth Error Codes: Fixes + TS Cheat Sheet (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-auth-error-codes-typescript</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-auth-error-codes-typescript</guid>
      <description><![CDATA[Supabase Auth returns precise error codes — `invalid_credentials`, `weak_password`, `same_password`, `email_not_confirmed` — but most apps collapse them all into "Something went wrong." Here's the full TypeScript enum, a typed handler, and the UX pattern that doubles signup completion.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>typescript</category>
      <category>error handling</category>
      <category>ux</category>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Supabase Auth returns precise error codes — `invalid_credentials`, `weak_password`, `same_password`, `email_not_confirmed` — but most apps collapse them all into "Something went wrong." Here's the full TypeScript enum, a typed handler, and the UX pattern that doubles signup completion.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Supabase RLS Infinite Recursion (Production 2026)]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-rls-infinite-recursion-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-rls-infinite-recursion-fix</guid>
      <description><![CDATA[If your Supabase query returns `infinite recursion detected in policy for relation "X"`, your RLS policy is querying the same table it protects. Here's exactly why it loops, and three production-grade fixes that don't leak data.]]></description>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>supabase</category>
      <category>postgres</category>
      <category>rls</category>
      <category>row level security</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[If your Supabase query returns `infinite recursion detected in policy for relation "X"`, your RLS policy is querying the same table it protects. Here's exactly why it loops, and three production-grade fixes that don't leak data.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Auth 2026: Clerk vs Better Auth vs Supabase]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-authentication-comparison-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-authentication-comparison-2026</guid>
      <description><![CDATA[We tested all four major auth solutions across 50+ real-world scenarios in production. Here is the honest comparison nobody else gives you — including the middleware vulnerability that changed everything, migration costs, and which one actually scales.]]></description>
      <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>Technology</category>
      <category>nextjs</category>
      <category>authentication</category>
      <category>clerk</category>
      <category>better-auth</category>
      <category>supabase</category>
      <category>auth-js</category>
      <category>nextauth</category>
      <category>security</category>
      <category>middleware</category>
      <category>session-management</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[We tested all four major auth solutions across 50+ real-world scenarios in production. Here is the honest comparison nobody else gives you — including the middleware vulnerability that changed everything, migration costs, and which one actually scales.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[I Tanked My Core Web Vitals Score With Next.js Images]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-image-layout-shift-cls-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-image-layout-shift-cls-fix</guid>
      <description><![CDATA[Added images to my Next.js app and watched my Core Web Vitals tank. After debugging for days, here are the 7 fixes that brought my CLS score back to green.]]></description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>performance</category>
      <category>web-vitals</category>
      <category>images</category>
      <category>optimization</category>
      <category>cls</category>
      <category>layout-shift</category>
      <enclosure url="https://images.unsplash.com/photo-1460925895917-afdab827c52f?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Added images to my Next.js app and watched my Core Web Vitals tank. After debugging for days, here are the 7 fixes that brought my CLS score back to green.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Stale Data: How I Fixed Cache Revalidation]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-stale-cache-revalidation-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-stale-cache-revalidation-fix</guid>
      <description><![CDATA[My mutations worked but the UI showed stale data. Took me a week to understand Next.js App Router caching. Here are the 6 fixes that made my data fresh again.]]></description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>caching</category>
      <category>app-router</category>
      <category>server-components</category>
      <category>revalidation</category>
      <category>performance</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[My mutations worked but the UI showed stale data. Took me a week to understand Next.js App Router caching. Here are the 6 fixes that made my data fresh again.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[11 Supabase Auth Lessons From a Year in Production]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-auth-production-year-11-lessons</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-auth-production-year-11-lessons</guid>
      <description><![CDATA[One year, 50K users, and a surprising number of 2 a.m. pages. Here is what I would tell my past self before pushing Supabase Auth to production.]]></description>
      <pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>production</category>
      <category>lessons</category>
      <category>postmortem</category>
      <category>security</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[One year, 50K users, and a surprising number of 2 a.m. pages. Here is what I would tell my past self before pushing Supabase Auth to production.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js 15 Caching Explained: Why Data Shows Stale]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-15-caching-explained</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-15-caching-explained</guid>
      <description><![CDATA[Upgraded to Next.js 15 and suddenly your data is stale — or refreshing too often? The caching model changed completely. Here is what actually happens and how to control it.]]></description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>caching</category>
      <category>app-router</category>
      <category>performance</category>
      <category>server-components</category>
      <enclosure url="https://images.unsplash.com/photo-1485827404703-89b55fcc595e?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Upgraded to Next.js 15 and suddenly your data is stale — or refreshing too often? The caching model changed completely. Here is what actually happens and how to control it.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Free Tier Limits in 2026: What You Actually Get]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-free-tier-limits-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-free-tier-limits-2026</guid>
      <description><![CDATA[Supabase free tier is genuinely generous — but there are limits that will surprise you at exactly the wrong time. Here is what they are, when you hit them, and whether the $25/month Pro plan is worth it.]]></description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>pricing</category>
      <category>indie-hacking</category>
      <category>saas</category>
      <category>database</category>
      <category>backend</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Supabase free tier is genuinely generous — but there are limits that will surprise you at exactly the wrong time. Here is what they are, when you hit them, and whether the $25/month Pro plan is worth it.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Why Your Supabase Queries Are Slow (And How to Fix)]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-slow-queries-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-slow-queries-fix</guid>
      <description><![CDATA[Slow Supabase queries kill your app feel and inflate your bill. Here are the six causes I keep seeing in production apps, and the exact SQL and code fixes for each one.]]></description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>performance</category>
      <category>postgresql</category>
      <category>database</category>
      <category>optimization</category>
      <category>next.js</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Slow Supabase queries kill your app feel and inflate your bill. Here are the six causes I keep seeing in production apps, and the exact SQL and code fixes for each one.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How I Built a Self-Running Client Reporting System in n8n]]></title>
      <link>https://www.iloveblogs.blog/post/how-i-built-client-reporting-automation-n8n</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-i-built-client-reporting-automation-n8n</guid>
      <description><![CDATA[Client reports were taking 3 hours every Friday. After one weekend building an n8n automation, they now take 10 minutes to review and send. Here's the workflow, the mistakes I made, and the parts that surprised me.]]></description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>n8n</category>
      <category>Client Reporting</category>
      <category>Freelancer</category>
      <category>Automation</category>
      <category>Productivity</category>
      <category>Google Sheets</category>
      <enclosure url="https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Client reports were taking 3 hours every Friday. After one weekend building an n8n automation, they now take 10 minutes to review and send. Here's the workflow, the mistakes I made, and the parts that surprised me.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How I Fixed My n8n Workflow Failing Silently for Weeks]]></title>
      <link>https://www.iloveblogs.blog/post/how-i-fixed-n8n-workflow-failing-silently</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-i-fixed-n8n-workflow-failing-silently</guid>
      <description><![CDATA[My n8n workflow was silently failing every Tuesday for three weeks. No errors, no alerts, just nothing happening. Here's the debugging story and the monitoring setup I built so it can never sneak past me again.]]></description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>n8n</category>
      <category>Debugging</category>
      <category>Workflow Automation</category>
      <category>Error Handling</category>
      <category>Monitoring</category>
      <enclosure url="https://images.unsplash.com/photo-1518432031352-d6fc5c10da5a?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[My n8n workflow was silently failing every Tuesday for three weeks. No errors, no alerts, just nothing happening. Here's the debugging story and the monitoring setup I built so it can never sneak past me again.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[From Zapier to n8n: How I Cut My Automation Bill to Zero]]></title>
      <link>https://www.iloveblogs.blog/post/how-i-migrated-from-zapier-to-n8n</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-i-migrated-from-zapier-to-n8n</guid>
      <description><![CDATA[I was paying $120/month on Zapier and barely using a third of it. Here's the honest story of migrating to n8n — the wins, the failures, and the one thing that almost made me give up.]]></description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>n8n</category>
      <category>Zapier</category>
      <category>Automation</category>
      <category>Migration</category>
      <category>Self-Hosted</category>
      <category>Freelancer</category>
      <enclosure url="https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[I was paying $120/month on Zapier and barely using a third of it. Here's the honest story of migrating to n8n — the wins, the failures, and the one thing that almost made me give up.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Set Up Ollama With n8n: Cut AI API Costs to Zero]]></title>
      <link>https://www.iloveblogs.blog/post/how-i-set-up-ollama-n8n-zero-ai-costs</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-i-set-up-ollama-n8n-zero-ai-costs</guid>
      <description><![CDATA[$50/month in OpenAI API charges was eating into my automation ROI. I switched to Ollama for local AI and my costs dropped to zero. Here's the full setup and honest tradeoffs.]]></description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>Ollama</category>
      <category>n8n</category>
      <category>Local AI</category>
      <category>AI Automation</category>
      <category>Cost Optimization</category>
      <category>LLM</category>
      <enclosure url="https://images.unsplash.com/photo-1485827404703-89b55fcc595e?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[$50/month in OpenAI API charges was eating into my automation ROI. I switched to Ollama for local AI and my costs dropped to zero. Here's the full setup and honest tradeoffs.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How I Stopped Missing Leads with a $0 n8n CRM Automation]]></title>
      <link>https://www.iloveblogs.blog/post/how-i-stopped-missing-leads-n8n-crm</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/how-i-stopped-missing-leads-n8n-crm</guid>
      <description><![CDATA[A $4,000 project slipped through my fingers because I missed a contact form email. Here's the n8n automation I built to make sure that never happens again — and it cost nothing to run.]]></description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>automation</category>
      <category>n8n</category>
      <category>CRM</category>
      <category>Lead Generation</category>
      <category>Freelancer</category>
      <category>Automation</category>
      <category>Notion</category>
      <enclosure url="https://images.unsplash.com/photo-1518432031352-d6fc5c10da5a?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A $4,000 project slipped through my fingers because I missed a contact form email. Here's the n8n automation I built to make sure that never happens again — and it cost nothing to run.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[How to Structure Your Next.js App Router Project for Scale]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-app-router-folder-structure-scale</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-app-router-folder-structure-scale</guid>
      <description><![CDATA[Stop shoving everything into the components folder. Learn the Feature-Sliced Design pattern adapted perfectly for the Next.js App Router.]]></description>
      <pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js app router</category>
      <category>folder structure</category>
      <category>next.js architecture</category>
      <content:encoded><![CDATA[Stop shoving everything into the components folder. Learn the Feature-Sliced Design pattern adapted perfectly for the Next.js App Router.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[The Hidden Costs of Building a Full-Stack B2B SaaS in 2026]]></title>
      <link>https://www.iloveblogs.blog/post/hidden-costs-fullstack-saas-development-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/hidden-costs-fullstack-saas-development-2026</guid>
      <description><![CDATA[We often talk about how cheap serverless makes starting a SaaS. But the hidden costs of scale, compliance, and multi-tenancy are rarely discussed. Here is a breakdown.]]></description>
      <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>saas development</category>
      <category>startup costs</category>
      <category>b2b saas</category>
      <content:encoded><![CDATA[We often talk about how cheap serverless makes starting a SaaS. But the hidden costs of scale, compliance, and multi-tenancy are rarely discussed. Here is a breakdown.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Build a Full-Stack App with Next.js + Supabase in 20 min]]></title>
      <link>https://www.iloveblogs.blog/post/build-fullstack-app-nextjs-supabase-step-by-step</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/build-fullstack-app-nextjs-supabase-step-by-step</guid>
      <description><![CDATA[Build a complete full-stack application with Next.js 15 and Supabase from scratch. Authentication, database, CRUD operations, and deployment — all in 20 minutes.]]></description>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>full-stack</category>
      <category>tutorial</category>
      <category>beginner</category>
      <category>crud</category>
      <category>authentication</category>
      <enclosure url="https://images.unsplash.com/photo-1633356122102-3fe601e05bd2?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Build a complete full-stack application with Next.js 15 and Supabase from scratch. Authentication, database, CRUD operations, and deployment — all in 20 minutes.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase vs Firebase in 2026: The Honest Comparison]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-vs-firebase-2026-complete-comparison</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-vs-firebase-2026-complete-comparison</guid>
      <description><![CDATA[Supabase vs Firebase — which backend should you pick in 2026? We compare pricing, performance, developer experience, and scalability with real benchmarks and code examples.]]></description>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>firebase</category>
      <category>next.js</category>
      <category>backend-as-a-service</category>
      <category>comparison</category>
      <category>database</category>
      <category>authentication</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Supabase vs Firebase — which backend should you pick in 2026? We compare pricing, performance, developer experience, and scalability with real benchmarks and code examples.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Why Developers Switch from Firebase to Supabase in 2026]]></title>
      <link>https://www.iloveblogs.blog/post/why-developers-switching-firebase-to-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/why-developers-switching-firebase-to-supabase</guid>
      <description><![CDATA[Thousands of developers are migrating from Firebase to Supabase. Here is why — with real migration stories, cost savings, and a step-by-step guide to make the switch.]]></description>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>firebase</category>
      <category>migration</category>
      <category>next.js</category>
      <category>database</category>
      <category>backend-as-a-service</category>
      <category>developer-tools</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Thousands of developers are migrating from Firebase to Supabase. Here is why — with real migration stories, cost savings, and a step-by-step guide to make the switch.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Offline-First Next.js + Supabase: Sync That Actually Works]]></title>
      <link>https://www.iloveblogs.blog/post/building-offline-first-nextjs-supabase</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/building-offline-first-nextjs-supabase</guid>
      <description><![CDATA[Build a Next.js app that works offline, queues writes, and syncs cleanly to Supabase when the network returns — IndexedDB, sync queue, conflict resolution, with code.]]></description>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>offline-first</category>
      <category>local-storage</category>
      <category>sync</category>
      <category>progressive-web-apps</category>
      <enclosure url="https://images.unsplash.com/photo-1629654297299-c8506221ca97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Build a Next.js app that works offline, queues writes, and syncs cleanly to Supabase when the network returns — IndexedDB, sync queue, conflict resolution, with code.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase RLS Not Working: Debug & Fix Policies (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/debugging-supabase-rls-issues</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/debugging-supabase-rls-issues</guid>
      <description><![CDATA[Master RLS debugging techniques. Learn how to identify, diagnose, and fix Row Level Security policy issues that block data access in production.]]></description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>rls</category>
      <category>debugging</category>
      <category>security</category>
      <category>postgresql</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Master RLS debugging techniques. Learn how to identify, diagnose, and fix Row Level Security policy issues that block data access in production.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[7 Next.js + Supabase Architecture Decisions I'd Skip]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-supabase-architecture-decisions-regrets</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-supabase-architecture-decisions-regrets</guid>
      <description><![CDATA[After shipping multiple production apps with Next.js and Supabase, here are the decisions that cost the most time to undo — and what I'd do instead from day one.]]></description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>architecture</category>
      <category>lessons-learned</category>
      <category>production</category>
      <category>best-practices</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[After shipping multiple production apps with Next.js and Supabase, here are the decisions that cost the most time to undo — and what I'd do instead from day one.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase RLS Policies Silently Failing: How to Debug Them]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-rls-silent-failures-debug</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-rls-silent-failures-debug</guid>
      <description><![CDATA[RLS failures don't throw errors — they return empty results. Here is exactly how to find and fix the most common Row Level Security bugs in Supabase before they reach production.]]></description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>rls</category>
      <category>row-level-security</category>
      <category>debugging</category>
      <category>postgres</category>
      <category>security</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[RLS failures don't throw errors — they return empty results. Here is exactly how to find and fix the most common Row Level Security bugs in Supabase before they reach production.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[7 Lessons Scaling Next.js + Supabase to 100K Users]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-supabase-lessons-learned-production</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-supabase-lessons-learned-production</guid>
      <description><![CDATA[Hard lessons from taking a Next.js and Supabase app from MVP to production scale. The mistakes that cost us hours, the patterns that saved us, and what I would do differently.]]></description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>production</category>
      <category>scaling</category>
      <category>lessons-learned</category>
      <category>architecture</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Hard lessons from taking a Next.js and Supabase app from MVP to production scale. The mistakes that cost us hours, the patterns that saved us, and what I would do differently.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase vs Firebase in 2026: I Migrated and Here's What Actually Matters]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-vs-firebase-2026-honest-comparison</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-vs-firebase-2026-honest-comparison</guid>
      <description><![CDATA[After migrating a production app from Firebase to Supabase, here is the honest comparison. Not the marketing hype, but what actually matters when you are building real applications.]]></description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>firebase</category>
      <category>comparison</category>
      <category>migration</category>
      <category>backend</category>
      <category>database</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[After migrating a production app from Firebase to Supabase, here is the honest comparison. Not the marketing hype, but what actually matters when you are building real applications.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[I Cut Next.js + Supabase Load Time 73%: 5 Techniques]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-supabase-performance-secrets-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-supabase-performance-secrets-2026</guid>
      <description><![CDATA[Real performance optimization results from a production SaaS app. These battle-tested techniques reduced load times from 4.2s to 1.1s and improved Core Web Vitals scores across the board.]]></description>
      <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>performance</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>optimization</category>
      <category>web-vitals</category>
      <category>production</category>
      <enclosure url="https://images.unsplash.com/photo-1544383835-bda2bc66a55d?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Real performance optimization results from a production SaaS app. These battle-tested techniques reduced load times from 4.2s to 1.1s and improved Core Web Vitals scores across the board.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Auth Pattern That Saved My Startup's $50K Audit]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-auth-patterns-that-scale-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-auth-patterns-that-scale-2026</guid>
      <description><![CDATA[How we went from failing enterprise security requirements to passing SOC 2 compliance in 6 weeks. The authentication architecture patterns that actually work at scale.]]></description>
      <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>authentication</category>
      <category>supabase</category>
      <category>security</category>
      <category>enterprise</category>
      <category>compliance</category>
      <category>startup</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-ff9fe0c870eb?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[How we went from failing enterprise security requirements to passing SOC 2 compliance in 6 weeks. The authentication architecture patterns that actually work at scale.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Server Actions vs API Routes: When to Use Each]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-server-actions-vs-api-routes</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-server-actions-vs-api-routes</guid>
      <description><![CDATA[Understand the differences between Server Actions and API Routes in Next.js 15. Learn when to use each approach with real-world examples and performance comparisons.]]></description>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>server-actions</category>
      <category>api-routes</category>
      <category>performance</category>
      <category>best-practices</category>
      <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Understand the differences between Server Actions and API Routes in Next.js 15. Learn when to use each approach with real-world examples and performance comparisons.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Realtime Gotchas: 7 Issues and How to Fix Them]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-realtime-gotchas-solutions</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-realtime-gotchas-solutions</guid>
      <description><![CDATA[Avoid common Supabase Realtime pitfalls that cause memory leaks, missed updates, and performance issues. Learn real-world solutions from production applications.]]></description>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>realtime</category>
      <category>websockets</category>
      <category>next.js</category>
      <category>debugging</category>
      <category>performance</category>
      <enclosure url="https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Avoid common Supabase Realtime pitfalls that cause memory leaks, missed updates, and performance issues. Learn real-world solutions from production applications.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js + Supabase: 10 Critical Mistakes and Exact Fixes]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-supabase-common-mistakes</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-supabase-common-mistakes</guid>
      <description><![CDATA[Avoid these critical mistakes when building with Next.js and Supabase. Learn from real-world errors that cost developers hours of debugging and discover proven solutions.]]></description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>best-practices</category>
      <category>debugging</category>
      <category>common-mistakes</category>
      <enclosure url="https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Avoid these critical mistakes when building with Next.js and Supabase. Learn from real-world errors that cost developers hours of debugging and discover proven solutions.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js + Supabase Performance: 7 Fixes Cut Load 70%]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-supabase-performance-optimization-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-supabase-performance-optimization-2026</guid>
      <description><![CDATA[The 7 optimizations that took a sluggish Next.js + Supabase app from 4.2s LCP to 1.1s — RLS indexes, ISR config, image pipeline, and the connection-pooler trap on Vercel.]]></description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>supabase</category>
      <category>performance</category>
      <category>optimization</category>
      <category>web-vitals</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[The 7 optimizations that took a sluggish Next.js + Supabase app from 4.2s LCP to 1.1s — RLS indexes, ISR config, image pipeline, and the connection-pooler trap on Vercel.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Auth Session Missing? Fix for Next.js (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/fix-supabase-auth-session-persistence</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/fix-supabase-auth-session-persistence</guid>
      <description><![CDATA[Supabase auth sessions mysteriously disappearing after page refresh? Learn the exact cause and fix it in 5 minutes with this tested solution.]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>next.js</category>
      <category>session-management</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1633265486064-086b219458ec?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Supabase auth sessions mysteriously disappearing after page refresh? Learn the exact cause and fix it in 5 minutes with this tested solution.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Auth Errors in Middleware: 5 Fixes That Work]]></title>
      <link>https://www.iloveblogs.blog/post/handle-supabase-auth-errors-middleware</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/handle-supabase-auth-errors-middleware</guid>
      <description><![CDATA[Auth errors crashing your Next.js middleware? Learn how to handle Supabase auth errors gracefully with proper error handling patterns.]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>next.js</category>
      <category>middleware</category>
      <category>error-handling</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-ff9fe0c870eb?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Auth errors crashing your Next.js middleware? Learn how to handle Supabase auth errors gracefully with proper error handling patterns.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js 15 vs 14: Real Benchmarks + Upgrade Verdict (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-15-vs-14-performance-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-15-vs-14-performance-2026</guid>
      <description><![CDATA[Side-by-side benchmarks on real apps — build time, bundle size, runtime perf, and the breaking changes that hurt. The honest verdict on whether the upgrade is worth it.]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>performance</category>
      <category>comparison</category>
      <category>react</category>
      <category>web-development</category>
      <enclosure url="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Side-by-side benchmarks on real apps — build time, bundle size, runtime perf, and the breaking changes that hurt. The honest verdict on whether the upgrade is worth it.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Auth Callback Redirect Not Working? Next.js Fix]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-auth-redirect-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-auth-redirect-fix</guid>
      <description><![CDATA[Auth redirect not working after Supabase sign-in? Here are the three root causes and the exact fixes — callback route, redirect URL allowlist, and router.refresh().]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>next.js</category>
      <category>app-router</category>
      <category>oauth</category>
      <enclosure url="https://images.unsplash.com/photo-1614064641938-3bbee52942c7?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Auth redirect not working after Supabase sign-in? Here are the three root causes and the exact fixes — callback route, redirect URL allowlist, and router.refresh().]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase vs Firebase Authentication: Which is Better]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-vs-firebase-auth-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-vs-firebase-auth-2026</guid>
      <description><![CDATA[Compare Supabase and Firebase authentication features, pricing, performance, and developer experience. Learn which backend solution fits your Next.js project best.]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>firebase</category>
      <category>authentication</category>
      <category>comparison</category>
      <category>next.js</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-ff9fe0c870eb?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Compare Supabase and Firebase authentication features, pricing, performance, and developer experience. Learn which backend solution fits your Next.js project best.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Vercel Next.js Environment Variables: Fix & Deploy (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-vercel-env-variables-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-vercel-env-variables-fix</guid>
      <description><![CDATA[Environment variables not working on Vercel? Learn the exact configuration needed for Next.js 15 deployment with zero errors.]]></description>
      <pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>vercel</category>
      <category>deployment</category>
      <category>environment-variables</category>
      <category>production</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Environment variables not working on Vercel? Learn the exact configuration needed for Next.js 15 deployment with zero errors.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[GraphQL vs REST: The Definitive API Design Guide for 2026]]></title>
      <link>https://www.iloveblogs.blog/post/graphql-vs-rest-api-design-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/graphql-vs-rest-api-design-2026</guid>
      <description><![CDATA[Discover when to use GraphQL vs REST for your API. Includes performance comparisons, implementation examples, and best practices for modern API design.]]></description>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>GraphQL</category>
      <category>REST</category>
      <category>API</category>
      <category>Backend</category>
      <category>Architecture</category>
      <category>Performance</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Discover when to use GraphQL vs REST for your API. Includes performance comparisons, implementation examples, and best practices for modern API design.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Kubernetes & Docker: Container Orchestration Mastery 2026]]></title>
      <link>https://www.iloveblogs.blog/post/kubernetes-docker-container-orchestration-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/kubernetes-docker-container-orchestration-2026</guid>
      <description><![CDATA[Learn Kubernetes and Docker from basics to production deployment. Includes real-world examples, scaling strategies, and DevOps best practices for 2026.]]></description>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>Kubernetes</category>
      <category>Docker</category>
      <category>DevOps</category>
      <category>Containers</category>
      <category>Cloud</category>
      <category>Microservices</category>
      <enclosure url="https://images.unsplash.com/photo-1667372393119-3d4c48d07fc9?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Learn Kubernetes and Docker from basics to production deployment. Includes real-world examples, scaling strategies, and DevOps best practices for 2026.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js PWA in 2026: Service Worker, Offline + Real Code]]></title>
      <link>https://www.iloveblogs.blog/post/progressive-web-apps-complete-guide-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/progressive-web-apps-complete-guide-2026</guid>
      <description><![CDATA[Build a working PWA from scratch — full service worker, offline cache, install prompt, and push notifications. Real code you can paste into a Next.js or Vite project today.]]></description>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>PWA</category>
      <category>Web Development</category>
      <category>Service Workers</category>
      <category>Mobile</category>
      <category>Performance</category>
      <enclosure url="https://images.unsplash.com/photo-1512941937669-90a1b58e7e9c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Build a working PWA from scratch — full service worker, offline cache, install prompt, and push notifications. Real code you can paste into a Next.js or Vite project today.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Micro-Frontends in 2026: When They Are Worth It (and When They Are Not)]]></title>
      <link>https://www.iloveblogs.blog/post/micro-frontends-architecture-guide-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/micro-frontends-architecture-guide-2026</guid>
      <description><![CDATA[Module Federation, single-spa, or iframes? A practical look at what each micro-frontend approach actually costs in build complexity, runtime perf, and team coordination.]]></description>
      <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>Architecture</category>
      <category>Micro-frontends</category>
      <category>JavaScript</category>
      <category>React</category>
      <category>Vue</category>
      <category>Angular</category>
      <enclosure url="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Module Federation, single-spa, or iframes? A practical look at what each micro-frontend approach actually costs in build complexity, runtime perf, and team coordination.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Hydration Mismatch: 8 Fixes for App Router (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-hydration-mismatch-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-hydration-mismatch-fix</guid>
      <description><![CDATA[Hydration mismatch errors breaking your Next.js app? Learn the root causes and 8 proven fixes to eliminate these errors permanently.]]></description>
      <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>react</category>
      <category>hydration</category>
      <category>ssr</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1633356122544-f134324a6cee?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Hydration mismatch errors breaking your Next.js app? Learn the root causes and 8 proven fixes to eliminate these errors permanently.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Serverless Edge Computing: The Revolution in Web Performance]]></title>
      <link>https://www.iloveblogs.blog/post/serverless-edge-computing-revolution-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/serverless-edge-computing-revolution-2026</guid>
      <description><![CDATA[Edge computing is revolutionizing web performance. Learn how to leverage Cloudflare Workers, Vercel Edge Functions, and Deno Deploy for lightning-fast applications.]]></description>
      <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>Edge Computing</category>
      <category>Serverless</category>
      <category>Performance</category>
      <category>Web Development</category>
      <category>Cloud</category>
      <enclosure url="https://images.unsplash.com/photo-1451187580459-43490279c0fa?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Edge computing is revolutionizing web performance. Learn how to leverage Cloudflare Workers, Vercel Edge Functions, and Deno Deploy for lightning-fast applications.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[WebAssembly vs JavaScript: When WASM Is Actually Faster]]></title>
      <link>https://www.iloveblogs.blog/post/web-assembly-javascript-performance-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/web-assembly-javascript-performance-2026</guid>
      <description><![CDATA[WASM is faster than JS — sometimes. Real benchmarks on image processing, parsing, and compute loops show when it is a 20x win and when V8 is still the right tool.]]></description>
      <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>WebAssembly</category>
      <category>Performance</category>
      <category>JavaScript</category>
      <category>Web Development</category>
      <category>Optimization</category>
      <enclosure url="https://images.unsplash.com/photo-1518432031352-d6fc5c10da5a?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[WASM is faster than JS — sometimes. Real benchmarks on image processing, parsing, and compute loops show when it is a 20x win and when V8 is still the right tool.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Fix Next.js "Module Not Found" After Deploy or Build]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-build-module-not-found</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-build-module-not-found</guid>
      <description><![CDATA[Module not found errors only in production? Learn why Next.js builds fail after deploy and get 6 proven fixes that work on Vercel, AWS, and other platforms.]]></description>
      <pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>deployment</category>
      <category>build-errors</category>
      <category>vercel</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1618401471353-b98afee0b2eb?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Module not found errors only in production? Learn why Next.js builds fail after deploy and get 6 proven fixes that work on Vercel, AWS, and other platforms.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Turbopack Stuck? 5 Fixes + Disable Guide (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-turbopack-stuck-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-turbopack-stuck-fix</guid>
      <description><![CDATA[Turbopack stuck on compiling in Next.js 15/16? Learn the exact causes and 5 proven fixes, plus how to disable Turbopack safely with next build --webpack when production builds crash.]]></description>
      <pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>next.js</category>
      <category>turbopack</category>
      <category>build-issues</category>
      <category>performance</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Turbopack stuck on compiling in Next.js 15/16? Learn the exact causes and 5 proven fixes, plus how to disable Turbopack safely with next build --webpack when production builds crash.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Next.js Performance Optimization: 10 Essential Techniques]]></title>
      <link>https://www.iloveblogs.blog/post/nextjs-performance-10-techniques-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/nextjs-performance-10-techniques-2026</guid>
      <description><![CDATA[Essential Next.js performance optimization techniques. Learn image optimization, caching, bundle splitting, and how to improve Core Web Vitals.]]></description>
      <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>NextJS</category>
      <category>Performance</category>
      <category>Web Development</category>
      <category>React</category>
      <category>Optimization</category>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Essential Next.js performance optimization techniques. Learn image optimization, caching, bundle splitting, and how to improve Core Web Vitals.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[React Performance Optimization: 15 Proven Techniques 2026]]></title>
      <link>https://www.iloveblogs.blog/post/react-performance-optimization-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/react-performance-optimization-2026</guid>
      <description><![CDATA[Complete guide to React performance optimization. 15 proven techniques to make your React apps faster, including lazy loading, memoization, and code splitting.]]></description>
      <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>React</category>
      <category>Performance</category>
      <category>JavaScript</category>
      <category>Web Development</category>
      <category>Optimization</category>
      <enclosure url="https://images.unsplash.com/photo-1633356122544-f134324a6cee?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Complete guide to React performance optimization. 15 proven techniques to make your React apps faster, including lazy loading, memoization, and code splitting.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Supabase Email Confirmation Not Sending: 5 Fixes (2026)]]></title>
      <link>https://www.iloveblogs.blog/post/supabase-email-confirmation-fix</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/supabase-email-confirmation-fix</guid>
      <description><![CDATA[Email confirmations not sending from Supabase? Learn the exact causes and fixes for SMTP, template, and configuration issues in 10 minutes.]]></description>
      <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>supabase</category>
      <category>authentication</category>
      <category>email</category>
      <category>next.js</category>
      <category>troubleshooting</category>
      <enclosure url="https://images.unsplash.com/photo-1557200134-90327ee9fafa?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Email confirmations not sending from Supabase? Learn the exact causes and fixes for SMTP, template, and configuration issues in 10 minutes.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Docker Dev Environment: Compose + Hot Reload Setup 2026]]></title>
      <link>https://www.iloveblogs.blog/post/docker-development-environment-setup</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/docker-development-environment-setup</guid>
      <description><![CDATA[Step-by-step guide to creating a production-ready Docker development environment with hot reload, debugging, and Docker Compose.]]></description>
      <pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>Docker</category>
      <category>DevOps</category>
      <category>Development</category>
      <category>Containers</category>
      <category>Web Development</category>
      <enclosure url="https://images.unsplash.com/photo-1605745341112-85968b19335b?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Step-by-step guide to creating a production-ready Docker development environment with hot reload, debugging, and Docker Compose.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[TypeScript Migration Guide 2026: From JavaScript]]></title>
      <link>https://www.iloveblogs.blog/post/typescript-javascript-migration-guide-2026</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/typescript-javascript-migration-guide-2026</guid>
      <description><![CDATA[Migrate a JS codebase to TypeScript file-by-file — no full rewrite required. The tsconfig settings, file order, and tricks for handling untyped packages along the way.]]></description>
      <pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>TypeScript</category>
      <category>JavaScript</category>
      <category>Web Development</category>
      <category>Programming</category>
      <category>Code Quality</category>
      <enclosure url="https://images.unsplash.com/photo-1587620962725-abab7fe55159?auto=format&fit=crop&w=1200&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Migrate a JS codebase to TypeScript file-by-file — no full rewrite required. The tsconfig settings, file order, and tricks for handling untyped packages along the way.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Machine Learning Basics for JavaScript Developers]]></title>
      <link>https://www.iloveblogs.blog/post/machine-learning-basics-for-js-developers</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/machine-learning-basics-for-js-developers</guid>
      <description><![CDATA[Bridge the gap between web development and AI. Learn core machine learning concepts using JavaScript frameworks like TensorFlow.js.]]></description>
      <pubDate>Sun, 21 Dec 2025 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>JavaScript</category>
      <category>Machine Learning</category>
      <category>Tutorial</category>
      <category>TensorFlow.js</category>
      <enclosure url="https://images.unsplash.com/photo-1677442136019-21780ecad995?auto=format&fit=crop&w=800&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[Bridge the gap between web development and AI. Learn core machine learning concepts using JavaScript frameworks like TensorFlow.js.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[Design Systems: Building for Scale]]></title>
      <link>https://www.iloveblogs.blog/post/design-systems-scale-consistency</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/design-systems-scale-consistency</guid>
      <description><![CDATA[How modern design systems create cohesive user experiences across products and teams while enabling rapid development.]]></description>
      <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>UI/UX</category>
      <category>Design Systems</category>
      <category>Frontend</category>
      <category>Scalability</category>
      <enclosure url="https://images.unsplash.com/photo-1561070791-2526d30994b5?auto=format&fit=crop&w=800&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[How modern design systems create cohesive user experiences across products and teams while enabling rapid development.]]></content:encoded>
    </item>

    <item>
      <title><![CDATA[AI Coding Assistants: Revolution or Hype?]]></title>
      <link>https://www.iloveblogs.blog/post/ai-coding-assistants-productivity</link>
      <guid isPermaLink="true">https://www.iloveblogs.blog/post/ai-coding-assistants-productivity</guid>
      <description><![CDATA[A realistic look at how GitHub Copilot, ChatGPT, and other AI tools are actually changing software development workflows.]]></description>
      <pubDate>Tue, 09 Dec 2025 00:00:00 GMT</pubDate>
      <author>noreply@iloveblogs.blog (Mahdi Br)</author>
      <category>technology</category>
      <category>AI</category>
      <category>Software Development</category>
      <category>Productivity</category>
      <category>Coding Tools</category>
      <enclosure url="https://images.unsplash.com/photo-1555949963-aa79dcee981c?auto=format&fit=crop&w=800&q=80" type="image/jpeg" />
      <content:encoded><![CDATA[A realistic look at how GitHub Copilot, ChatGPT, and other AI tools are actually changing software development workflows.]]></content:encoded>
    </item>
  </channel>
</rss>