<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Irfan Gulzar]]></title><description><![CDATA[Irfan Gulzar]]></description><link>https://irfangulzarx.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 03 Nov 2026 23:43:33 GMT</lastBuildDate><atom:link href="https://irfangulzarx.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Why 95% of AI Agent Prototypes Never Reach Production — and How to Build One That Does]]></title><description><![CDATA[Your AI agent demo works. Your AI agent doesn't. A team builds a dazzling prototype in a week. It answers questions, books meetings, drafts replies, and…]]></description><link>https://irfangulzarx.hashnode.dev/why-95-of-ai-agent-prototypes-never-reach-production-and-how-to-build-one-that-does</link><guid isPermaLink="true">https://irfangulzarx.hashnode.dev/why-95-of-ai-agent-prototypes-never-reach-production-and-how-to-build-one-that-does</guid><category><![CDATA[webdev]]></category><category><![CDATA[AI]]></category><category><![CDATA[automation]]></category><category><![CDATA[agents]]></category><dc:creator><![CDATA[Irfan Gulzar]]></dc:creator><pubDate>Tue, 03 Nov 2026 09:12:41 GMT</pubDate><content:encoded><![CDATA[<p>Your AI agent demo works. Your AI agent doesn't.</p>
<p>A team builds a dazzling prototype in a week. It answers questions, books meetings, drafts replies, and everyone in the room nods. Then it meets real customers, real data, and real consequences — and it quietly dies.</p>
<p>This is not a model problem. The model was never the hard part.</p>
<p>MIT's 2025 report The GenAI Divide: State of AI in Business found that 95% of generative AI pilots fail to deliver measurable profit-and-loss impact. Read that again: not 95% of bad ideas, but 95% of pilots — including many built by competent teams with good models. The gap between a demo and a production system is where almost every agent project is won or lost.</p>
<p>Here is what that gap looks like, and how to survive it.</p>
<h2>The demo is not the product</h2>
<p>A demo runs on clean data, a friendly user, and a forgiving audience. Production runs on none of those.</p>
<p>In a demo, the input is the one happy-path example you rehearsed. In production, it is a form field full of typos, a CRM record missing half its fields, and an API that fails at 2 a.m. A wrong answer in a demo is a laugh; in production it is a refund issued twice or an email sent to the wrong client. Demos do not need error handling. Production is mostly error handling.</p>
<p>That is the first uncomfortable truth: the model is perhaps 10% of a working automation. The rest is the boring engineering nobody posts about — observability, retry logic, guardrails, a data layer that does not lie, and a human who can hit stop.</p>
<h2>Why prototypes die: five production gaps</h2>
<ol>
<li>No permission boundaries</li>
</ol>
<p>A demo agent usually runs with your credentials, or with a single admin token, because that is the fastest way to make it work. In production, that is a liability with an API key.</p>
<p>Every tool an agent can call is a door. A production agent needs scoped, least-privilege credentials per task, and an explicit list of actions it is never allowed to take without a human. Before you ship, answer this precisely: if this agent went rogue for ten minutes, what is the worst thing it could do?</p>
<ol start="2">
<li>Messy data, not model quality</li>
</ol>
<p>Demos run on curated examples. Production data is duplicated, stale, half-empty, and contradictory. The same customer exists three times in the CRM under three spellings of their name. The price list has two versions. The calendar has a cancelled meeting that was never deleted.</p>
<p>An agent that trusts its data blindly will confidently act on lies. A production system validates before it acts. This is why so many agent projects stall at integration, not intelligence. The model was fine. The data layer was not.</p>
<ol start="3">
<li>No observability</li>
</ol>
<p>When a workflow breaks, you can point at the exact step that failed. When an agent breaks, you often get a confident answer and no explanation of how it got there. Production agents need logs for everything — goal, tools called, arguments, outputs, and final action — so a run can be replayed step by step. When a customer asks why something happened, "the agent decided" is not an answer.</p>
<ol start="4">
<li>Cost and drift nobody budgeted for</li>
</ol>
<p>A workflow costs roughly the same every time it runs. An agent does not. Token usage varies with every run, tool calls multiply, and a retry loop can turn a cheap task into an expensive one. Behaviour also drifts: the same prompt that worked in October can behave differently after a model update in November.</p>
<p>Production means budgets per run, capped retries, and regression tests run on a schedule against the live system. If you would not ship a normal feature without tests, do not ship an agent without them either.</p>
<ol start="5">
<li>No human at the money step</li>
</ol>
<p>The most dangerous agent is one that can move money, message customers, or change records with no human in the loop — not because agents are malicious, but because they are confident. The rule I use with clients is simple: AI can prepare, draft, and recommend, but a human approves anything irreversible.</p>
<h2>The architecture that survives: deterministic backbone, AI at the edges</h2>
<p>The agents that reach production almost all look the same, and they do not look like the demos. They have a deterministic backbone — a workflow with defined steps, validations, and fallbacks — and they use AI only where judgement is actually needed.</p>
<p>Take a lead-handling automation. Four of its five steps are deterministic: take the form lead, enrich it, check it against rules, and create the deal in the CRM. Only one step needs judgement: scoring the lead. That is a workflow with one language-model call in the middle — not an agent problem.</p>
<p>Here is the shape of that pattern in code:</p>
<pre><code class="language-python">def handle_lead(lead):
    # Deterministic steps: same input, same output, every time
    lead = validate(lead)          # reject bad data early, loudly
    lead = enrich(lead)            # one known source, not a web search
    if not passes_rules(lead):     # business rules, not model vibes
        return queue_for_review(lead, reason="failed rules")

    # AI only where judgement is needed
    score = score_lead_with_llm(lead)

    # Human at the money step: nothing irreversible happens unseen
    if score &gt;= 80:
        return request_approval(lead, score, action="create deal + notify sales")
    return queue_for_review(lead, reason="low score")
</code></pre>
<p>And the guardrails around it are explicit, not implied:</p>
<pre><code class="language-json">{
  "agent_policy": {
    "allowed_tools": ["crm.read", "crm.create_deal"],
    "forbidden_tools": ["email.send", "payment.refund"],
    "max_retries": 2,
    "max_cost_per_run_usd": 0.50,
    "requires_human_approval": ["create_deal", "send_to_customer"],
    "log_everything": true
  }
}
</code></pre>
<p>Notice what this buys you. When it breaks, you know which step broke. When it is wrong, a human saw it before the customer did. That is not less ambitious than a fully autonomous agent. It is the version that still exists in six months.</p>
<h2>A production checklist before you launch</h2>
<p>Run through this before any agent touches real customers:</p>
<ul>
<li>Permissions: scoped credentials, an explicit forbidden-action list, and a tested answer to "what is the worst ten minutes of rogue behaviour?"</li>
<li>Validation: every input checked, every tool output sanity-checked before the next step runs.</li>
<li>Observability: full run logs you can replay, plus alerts when a run fails, loops, or exceeds its cost budget.</li>
<li>Retries and fallbacks: capped retries with backoff, and a graceful fallback — queue for a human — instead of retrying forever.</li>
<li>Human approval: a person approves anything irreversible, especially anything involving money or customer-facing messages.</li>
<li>Regression tests: your ten most important tasks, run on a schedule against the live system, with failures alerting a human.</li>
</ul>
<p>If you cannot tick all six, you do not have a production agent yet. You have a demo with a launch date. Fix the checklist first — it is cheaper than explaining a failure to a customer later.</p>
<h2>Stop asking which model to use</h2>
<p>The model question is the easiest question in agent building, and the least important. Swap the model in a well-built system and the system still works. Start instead with the question that decides whether your agent survives contact with reality: what happens when it fails? Build the boring backbone first. Earn the agent later.</p>
<p>I break down systems like this daily — follow for more.</p>
]]></content:encoded></item><item><title><![CDATA[Your Title Doesn't Ship. Your Live Link Does.]]></title><description><![CDATA[LinkedIn is full of titles. Titles don't ship. "Software Engineer | Full Stack | AI Enthusiast | Open to Work" — I have seen the same badge-line on a dozen…]]></description><link>https://irfangulzarx.hashnode.dev/your-title-doesn-t-ship-your-live-link-does</link><guid isPermaLink="true">https://irfangulzarx.hashnode.dev/your-title-doesn-t-ship-your-live-link-does</guid><category><![CDATA[webdev]]></category><category><![CDATA[Career]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Irfan Gulzar]]></dc:creator><pubDate>Fri, 30 Oct 2026 09:07:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69add36586766ac3a653a1cb/df207da8-ac51-4f38-85a7-9393d4be6cba.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>LinkedIn is full of titles. Titles don't ship.</p>
<p>"Software Engineer | Full Stack | AI Enthusiast | Open to Work" — I have seen the same badge-line on a dozen profiles this week. None of them tell me whether you can build something a stranger can click.</p>
<p>That is not a criticism of ambition. It is a description of how hiring actually works in 2026. Recruiters cross-reference now. They check GitHub, they check a personal site, they click a live link. A title is a claim. A deployed app is evidence.</p>
<p>If you are a developer looking for work, clients, or your next role, this is the one shift that matters most: stop polishing the headline first. Ship one small thing, put the link where people can find it, and let the work introduce you.</p>
<h2>The recruiter check changed</h2>
<p>A few years ago, a profile was the proof. Your headline, your summary, your list of skills — that was the package a recruiter judged.</p>
<p>That package broke for two reasons. First, everyone learned the same keywords, so the keywords stopped meaning anything. Second, AI tools made it trivial to produce a polished-looking profile without producing anything real. A summary can be generated in ten seconds. A working product cannot.</p>
<p>So the check moved one step further out. Can I click something you built? Does it load? Does it do one thing clearly? Does the code behind it look like it was written by someone who understands the problem?</p>
<p>One live link answers all of that faster than a paragraph of adjectives ever will. It shows taste, follow-through, and judgement — the three things no headline can prove.</p>
<h2>A title says what you want to be called</h2>
<p>There is nothing wrong with calling yourself a full-stack developer. The problem is only that the title carries no information about range, depth, or reliability.</p>
<p>Two developers can hold the same title and be completely different hires. One has shipped a booking form that handles real validation, real errors, and real edge cases. The other has followed tutorials and never deployed anything. On paper they look identical. In a browser tab they do not.</p>
<p>That is why "proof converts, claims don't" is not a slogan. It is how trust works. A claim asks the reader to believe you. Proof lets the reader verify you, without needing to take your word for anything.</p>
<p>If you want to be taken seriously, give people something to verify.</p>
<h2>What counts as proof</h2>
<p>Proof does not mean a huge project. In fact, huge projects are often worse proof, because nobody has time to explore them and they are rarely finished.</p>
<p>Good proof is small, finished, and legible. It has:</p>
<ul>
<li><strong>One clear job.</strong> A visitor understands in five seconds what it does.</li>
<li><strong>A live URL.</strong> Not a screenshot, not a repo link alone — something that loads.</li>
<li><strong>Readable code.</strong> A repo a reviewer can open and follow without a guided tour.</li>
<li><strong>A real decision in it.</strong> Something you chose, and can explain why.</li>
</ul>
<p>Examples that work: a single-page tool that solves one annoying problem, a landing page with a working form and proper validation, a small dashboard that fetches real data and handles loading and error states honestly. The scope is small. The finish is what sells it.</p>
<p>Here is the test I use: if a stranger clicks your link on their phone, on mobile data, and cannot tell what you built within ten seconds, it is not proof yet. Simplify it until they can.</p>
<h2>Ship one thing this weekend</h2>
<p>You do not need a new stack, a new course, or permission. Pick the smallest useful thing you can finish, and finish it properly.</p>
<p>A practical shape for a weekend proof project:</p>
<ol>
<li>Pick one user and one task — for example, a local clinic that needs a booking enquiry form, or a freelancer who needs a one-page price calculator.</li>
<li>Build it as a single page with real validation, not placeholder alerts.</li>
<li>Deploy it so it has a real URL.</li>
<li>Write a short README: what it does, who it is for, and what you would improve next.</li>
</ol>
<p>The deployment step is the part most people skip, and it is the part that turns a project into proof. A minimal example with a static page is enough to start:</p>
<pre><code class="language-bash"># From your project folder, ship it
npx vercel --prod
</code></pre>
<p>And the form itself should behave like a real product, not a demo. Validate on the client, show errors next to the field, and never leave the user guessing:</p>
<pre><code class="language-javascript">function validateBooking(form) {
  const errors = {};
  if (!form.name.trim()) errors.name = "Please add a name.";
  if (!/^\S+@\S+\.\S+$/.test(form.email)) {
    errors.email = "That email does not look right.";
  }
  if (!form.date) errors.date = "Pick a date for the booking.";
  return errors;
}

// If errors is empty, submit. Otherwise, render each
// message next to its field — no silent failures.
</code></pre>
<p>That is not impressive code, and that is the point. Reviewers are not looking for cleverness. They are looking for care: handled states, honest errors, and a page that works when something goes wrong.</p>
<p>Then put the link in your featured section, in your GitHub profile README, and at the top of your personal site. Do not bury your best evidence three clicks deep.</p>
<h2>Let the work introduce you</h2>
<p>I won my first real clients because they could click something I built — not because my headline was clever. They did not hire a title. They hired the evidence that I could take a vague idea and turn it into something that loads, works, and looks considered.</p>
<p>That is still how it works, only more so. In a market full of generated profiles and generated portfolios, the scarcest signal is a finished thing with your name on it.</p>
<p>So before you polish your headline this week, ask a simpler question: what is the one live link on your profile that you are genuinely proud of?</p>
<p>If you do not have one yet, that is your weekend job. Not a rebrand. Not a new headline. One small, finished, deployed thing — and a link a stranger can click.</p>
<p>I break down systems like this daily — follow for more.</p>
]]></content:encoded></item><item><title><![CDATA[SEO vs GEO Is the Wrong Argument: AI Search Sends Less Traffic and Better Buyers]]></title><description><![CDATA[Everyone is arguing SEO versus GEO, as if one of them has to win. The numbers coming out of real analytics accounts suggest the argument itself is broken…]]></description><link>https://irfangulzarx.hashnode.dev/seo-vs-geo-is-the-wrong-argument-ai-search-sends-less-traffic-and-better-buyers</link><guid isPermaLink="true">https://irfangulzarx.hashnode.dev/seo-vs-geo-is-the-wrong-argument-ai-search-sends-less-traffic-and-better-buyers</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[AI]]></category><category><![CDATA[SEO]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[Irfan Gulzar]]></dc:creator><pubDate>Tue, 27 Oct 2026 09:06:29 GMT</pubDate><content:encoded><![CDATA[<p>Everyone is arguing SEO versus GEO, as if one of them has to win. The numbers coming out of real analytics accounts suggest the argument itself is broken — because it is measuring the wrong thing.</p>
<p>Traffic was always a proxy. It stood in for attention, then for interest, then — hopefully — for revenue. AI search has broken that chain in an interesting way: it sends fewer visitors, but the visitors it does send are much closer to buying. If your dashboard only counts sessions, AI search looks like a disaster. If it counts signups, it looks like the best channel you have.</p>
<h2>The numbers that break the old dashboard</h2>
<p>Ahrefs shared their own data: AI search accounted for just 0.5% of their traffic, but 12.1% of their signups. That is not a rounding error. It is a completely different ratio from organic search, where a large volume of visits produces a small share of conversions.</p>
<p>An Opollo study across 312 IT firms points the same way: AI referrals converted at 14.2%, against 2.8% for Google organic. Again, the story is not volume. It is intent. By the time an AI answer sends someone to your site, that person has usually already had the comparison, the objection handling, and the shortlisting done for them — inside the answer.</p>
<p>And Ethan Smith's analysis adds the part most teams miss: roughly 45 billion monthly AI sessions, with about 83% happening inside apps — ChatGPT, Gemini, Perplexity, Claude — rather than on the open web. Most AI activity is not happening on websites at all. Your site is not the destination any more. It is the source the answer was built from, and occasionally the place the buyer lands to finish the job.</p>
<p>Put those three data points together and the picture changes. The funnel did not disappear. It moved upstream, into the answer itself. The click is no longer the start of the buying journey. It is near the end of it.</p>
<h2>Why an AI referral converts differently</h2>
<p>A Google click is often the start of research. Someone types a broad query, opens five tabs, and bounces from four of them. An AI referral is different because the filtering already happened before the visit.</p>
<p>The AI has already:</p>
<ul>
<li>Understood the question in full sentences, not keywords</li>
<li>Compared options against the buyer's actual criteria</li>
<li>Answered the obvious objections in the answer itself</li>
<li>Recommended a shortlist, with reasons</li>
</ul>
<p>So the visitor who arrives is pre-qualified in a way a search click rarely is. They are not asking "what is this?" They are asking "is this the one, and how do I start?" That is why a tiny share of traffic can produce an outsized share of signups. The denominator shrank. The numerator did not shrink nearly as much.</p>
<p>This also explains why the usual SEO panic is misplaced. Yes, AI answers will eat some informational traffic — the "what is X" visits that never converted anyway. Losing those visits hurts a traffic chart. It does not necessarily hurt revenue. The visits worth keeping are the ones attached to a buying question, and those are exactly the visits AI answers are now routing.</p>
<h2>Stop optimising for clicks. Start optimising for the answer.</h2>
<p>If the click is now the end of the journey, the work moves earlier: into being the source the answer quotes, and into being the obvious next step once it does.</p>
<h3>1. Say what you do in one quotable paragraph</h3>
<p>AI answers quote pages that state a claim plainly, with evidence on the same page. A homepage that says "we help businesses grow with innovative solutions" gives an answer engine nothing to quote — because it says nothing specific. A page that says who you serve, what problem you solve, and how you are different, in the first paragraph, gives it a sentence it can lift whole.</p>
<p>Write the paragraph you would want quoted. Then check whether it actually appears on the page, in crawlable HTML, not buried in a JavaScript widget.</p>
<h3>2. Answer the buyer's real question, not the keyword</h3>
<p>Ranking content targets a keyword. Answer content targets a question a buyer actually asks, in the words they ask it: "which tool is best for a small team on a budget?", "what does it cost after the first year?", "what breaks when you scale past 10,000 users?" Pages built around those questions — with a direct answer first and the detail after — are the pages AI systems reach for.</p>
<h3>3. Make the conversion step obvious from the answer</h3>
<p>If an AI answer sends a buyer to your pricing page, that page has to finish the job: clear pricing, a visible next step, and proof — testimonials, case results, a comparison — on the same page. A buyer who arrives pre-sold and then has to hunt for a signup button is a buyer you will lose to a competitor whose page does not make them hunt.</p>
<h3>4. Measure signups per AI referral, not AI sessions</h3>
<p>This is the dashboard change that matters most. Split your analytics so AI referrals are a separate source, and track them all the way to signup, not just to session. A simple way to start is to segment referral traffic from the major AI platforms and compare its signup rate against organic search over the same period:</p>
<pre><code>// Segment AI referrals in your analytics by referrer
const aiReferrers = ["chatgpt.com", "perplexity.ai", "claude.ai", "gemini.google.com"];
const isAiReferral = aiReferrers.some((domain) =&gt;
  document.referrer.includes(domain)
);
// Tag the session, then compare signup rate: AI referrals vs organic
</code></pre>
<p>The point is not the code. It is the comparison. Once you can see that one AI referral is worth several organic visits, the internal argument about "losing traffic" ends, because the team is finally looking at the number that pays.</p>
<h2>Ranking still matters — but the finish line moved</h2>
<p>None of this means SEO is dead. Ranking still matters, for two reasons. First, the pages AI systems trust are usually the pages that already earned authority the old-fashioned way: consistent content, real expertise, third-party mentions. Second, not every buyer journey runs through an AI answer yet. Search still drives discovery for a huge share of queries.</p>
<p>What changed is the finish line. It used to be the most traffic. Now it is the most-quoted answer on the question buyers actually ask — followed by a page that converts the buyer who arrives. Traffic without that second half is just a chart going up. A cited answer with a working signup path is a business.</p>
<p>So stop asking whether SEO or GEO wins. Ask a better question: when an AI answer mentions your category, does it mention you — and when it sends you a buyer, does your page close?</p>
<p>That is the game now. The dashboards just have not caught up yet.</p>
]]></content:encoded></item><item><title><![CDATA[Your Vibe-Coded Site Works. AI Search Can't See It.]]></title><description><![CDATA[Last weekend someone shipped a full landing page — pricing section, testimonials, a working contact form — without writing a single line of code. It looked…]]></description><link>https://irfangulzarx.hashnode.dev/your-vibe-coded-site-works-ai-search-can-t-see-it</link><guid isPermaLink="true">https://irfangulzarx.hashnode.dev/your-vibe-coded-site-works-ai-search-can-t-see-it</guid><category><![CDATA[webdev]]></category><category><![CDATA[AI]]></category><category><![CDATA[SEO]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Irfan Gulzar]]></dc:creator><pubDate>Fri, 23 Oct 2026 09:06:12 GMT</pubDate><content:encoded><![CDATA[<p>Last weekend someone shipped a full landing page — pricing section, testimonials, a working contact form — without writing a single line of code. It looked flawless in the browser. Animations, gradients, the lot.</p>
<p>Then they asked ChatGPT what the site was about.</p>
<p>It had no idea the site existed. Not a wrong answer — <em>no</em> answer at all.</p>
<p>That's the quiet failure mode of the vibe-coding boom. These tools didn't just change <em>who</em> builds websites. They quietly changed <em>what</em> gets indexed. And most vibe-built sites ship on the one rendering model that makes them invisible to AI search.</p>
<h2>The vibe stack defaults to client-side rendering</h2>
<p>Most AI builders — Lovable, v0, Bolt, Replit's agent mode — scaffold React/Vite-style single-page apps. Your entire page is assembled <em>in the browser at runtime</em>. The HTML the server actually sends looks like this:</p>
<pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Loading...&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="root"&gt;&lt;/div&gt;
    &lt;script type="module" src="/src/main.tsx"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>That is the entire page. A few hundred bytes of "we'll get back to you." In your browser, JavaScript fills it in within milliseconds. To a crawler, it is a blank wall with a polite title.</p>
<h2>Why bots don't see what you see</h2>
<p>Fetching HTML is cheap. Executing JavaScript is expensive — a full browser context, memory, timeouts, multiplied across billions of pages. Crawlers operate on budgets, and those budgets are spent on the highest-value work first.</p>
<p>Google invests in a rendering pipeline for its index, and even <em>that</em> is queued and delayed — JS-rendered content routinely enters the index days behind the HTML version. AI crawlers — GPTBot, ClaudeBot, the bots that decide whether ChatGPT or Claude ever cite your site — run leaner still. The widely observed behaviour: they fetch the raw HTML and move on. No JavaScript execution, no hydration, no content.</p>
<p>So the question that matters is no longer "does my site look good?" It is: <strong>what does my site look like with JavaScript switched off?</strong> If the answer is an empty <code>div</code>, then as far as AI search is concerned, your content does not exist. There is nothing to cite, quote, or recommend — no matter how beautiful it renders in Chrome.</p>
<p>This is exactly why the new SEO conversation has shifted from rankings to citations. An AI answer engine doesn't browse your site like a visitor. It reads what its crawler could read, and it quotes what it could understand. An empty HTML shell gives it nothing to work with.</p>
<h2>The 60-second test</h2>
<p><code>curl</code> is the most honest reviewer your site will ever meet. It shows you exactly what a no-JS bot sees:</p>
<pre><code class="language-bash">curl -s https://your-site.com | wc -c
curl -s https://your-site.com | head -c 600
</code></pre>
<p>If the byte count is in the low hundreds and the output is a shell with an empty root <code>div</code>, your page is invisible to AI search. Try it right now — the result takes five seconds and has ended more than a few launch-day celebrations.</p>
<p>For comparison, run the same test on a server-rendered page and watch kilobytes of real headings, paragraphs, and links stream past. That is the difference between being quotable and being a loading spinner.</p>
<h2>The fix — you don't have to give up the vibe</h2>
<p>Vibe-coding the <em>content</em> is fine. Shipping the <em>rendering</em> client-side is the problem. The fixes are all on the delivery layer:</p>
<p><strong>1. Server-render or statically generate.</strong> Frameworks that ship HTML on first byte — Next.js (App Router), Astro, Nuxt, SvelteKit with prerendering — give every bot the full page immediately. The browser still hydrates into the interactive app your users see; the crawler never needed the interactivity.</p>
<p><strong>2. Prerender as a bridge.</strong> If you're locked into a client-side build, prerendering services generate static HTML snapshots of your routes and serve them to crawlers. It is not as clean as true SSR, but it converts an invisible page into a readable one in an afternoon.</p>
<p><strong>3. Prioritise the pages AI needs to quote.</strong> Your homepage, pricing, and services pages are the ones answer engines will cite. A blog post buried three clicks deep matters less than the page that says, in plain words, what you do. Make sure <em>those</em> pages render as HTML.</p>
<p><strong>4. Don't rely on "Google renders JavaScript" as your safety net.</strong> Even Google's rendering is budgeted and delayed — and AI crawlers are stricter still. "It'll probably get rendered eventually" is not a strategy; it is a hope.</p>
<h2>Ship HTML, not apps</h2>
<p>The irony is sharp: the tools that made building websites effortless quietly rebuilt the exact problem the industry spent a decade solving. We fought the client-side-rendering wars in the 2010s, learned that HTML-first wins for discoverability, and then vibe-coding reintroduced the SPA as the default — this time to people who never saw the first war.</p>
<p>So here's the practical checklist before your next launch:</p>
<ul>
<li><strong>Build with the vibe tools for speed, render like it's 2009 for the bots:</strong> HTML first, JavaScript as enhancement.</li>
<li><strong><code>curl</code> every launch.</strong> If a page serves under a couple of kilobytes of real text content, fix the rendering before you announce it.</li>
<li><strong>Say the plain truth in text.</strong> A single clear paragraph describing what you do beats a clever animation that no bot will ever watch. AI search rewards clarity, not cleverness.</li>
</ul>
<p>Your site can be both stunning <em>and</em> visible. It just has to arrive as a page, not a promise.</p>
<p><em>I break down systems like this daily — follow for more on web architecture, AI automation, and getting cited by the machines that now decide what gets read.</em></p>
]]></content:encoded></item></channel></rss>