<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Javid Fazaeli</title>
    <description>The latest articles on DEV Community by Javid Fazaeli (@jfaza).</description>
    <link>https://dev.to/jfaza</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3476646%2F1838fe17-ab2a-4335-883e-8255200c0d0f.jpeg</url>
      <title>DEV Community: Javid Fazaeli</title>
      <link>https://dev.to/jfaza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jfaza"/>
    <language>en</language>
    <item>
      <title>When Robots Knocked on My Door</title>
      <dc:creator>Javid Fazaeli</dc:creator>
      <pubDate>Thu, 11 Sep 2025 05:28:00 +0000</pubDate>
      <link>https://dev.to/jfaza/when-robots-knocked-on-my-door-30bd</link>
      <guid>https://dev.to/jfaza/when-robots-knocked-on-my-door-30bd</guid>
      <description>&lt;h2&gt;
  
  
  When Robots Knocked on My Door
&lt;/h2&gt;

&lt;p&gt;It started with a simple thought:&lt;br&gt;&lt;br&gt;
“Do the robots even know where to find me?”&lt;/p&gt;

&lt;p&gt;I wasn’t thinking about sci-fi cyborgs or apocalyptic machines — just the quiet, tireless web crawlers that roam the internet day and night, indexing everything they see. Googlebot, Bingbot, DuckDuckGo’s little spiders… the whole buzzing colony of digital bees.&lt;/p&gt;

&lt;p&gt;So I opened my browser, typed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://fazaeli.dev/robots.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and hit Enter.&lt;/p&gt;

&lt;p&gt;What greeted me wasn’t mine. It was Cloudflare’s. A whole manifesto about not scraping data, followed by a long blacklist of bots I didn’t even know existed. Amazonbot, ClaudeBot, GPTBot — all shut out with a single &lt;code&gt;Disallow: /&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For a second, it felt like someone else was answering the door to my house, telling visitors what they could and couldn’t see.&lt;/p&gt;

&lt;p&gt;That’s when it hit me: if I don’t give the crawlers a map, they’ll wander my site blind. My blog posts, my projects, my little corner of the web might stay hidden in the dark corners of the internet.&lt;/p&gt;

&lt;p&gt;So I rolled up my sleeves.&lt;/p&gt;

&lt;p&gt;Inside ExpressionEngine, I created a template called &lt;code&gt;seo/robot&lt;/code&gt; and gave it the simplest set of lines you can imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Disallow:

Sitemap: https://fazaeli.dev/sitemap.xml

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I mapped the template to &lt;code&gt;/robots.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;At first, Cloudflare fought me, insisting on injecting its own text. But after some tweaking, bypass rules, and a little stubbornness, my voice came through. The crawlers could finally hear me.&lt;/p&gt;

&lt;p&gt;The last piece was the sitemap — a quiet XML file at the root of my site. It doesn’t look like much, just lines of &lt;code&gt;&amp;lt;url&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt;, but it’s the treasure map. It tells Google where every page lives, when I last dusted it off, and how important it is in the grand scheme of things.&lt;/p&gt;

&lt;p&gt;When I finally curled it in the terminal with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -A "Googlebot" https://fazaeli.dev/sitemap.xml

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and saw those clean XML lines, it felt like unlocking a door.&lt;/p&gt;

&lt;p&gt;Now, if you drop by my robots.txt, you’ll see my own words, my own directions. The crawlers know where to go. And soon, the posts and projects I’ve been working on in the quiet will be easier for the world to find.&lt;/p&gt;

&lt;p&gt;Sometimes, building a website isn’t just about design or features — it’s about remembering that even the robots need a little guidance.&lt;/p&gt;

&lt;p&gt;And if you don’t tell them where the map is, they’ll never know where to look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fazaeli.dev/blog/entry/when-robots-knocked-on-my-door" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>robots</category>
      <category>sitemap</category>
    </item>
    <item>
      <title>How I Deployed My GitHub Project to Vercel in Minutes</title>
      <dc:creator>Javid Fazaeli</dc:creator>
      <pubDate>Sat, 06 Sep 2025 18:07:00 +0000</pubDate>
      <link>https://dev.to/jfaza/how-i-deployed-my-github-project-to-vercel-in-minutes-3b08</link>
      <guid>https://dev.to/jfaza/how-i-deployed-my-github-project-to-vercel-in-minutes-3b08</guid>
      <description>&lt;p&gt;When you finish a side project, the next step is getting it online. Vercel makes this almost frictionless — especially if you’re already using GitHub.&lt;/p&gt;

&lt;p&gt;This is exactly how I deployed my &lt;a href="https://github.com/jfaza/innow" rel="noopener noreferrer"&gt;Innoweg repo&lt;/a&gt; → &lt;a href="https://innoweg.vercel.app" rel="noopener noreferrer"&gt;innoweg.vercel.app&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1) Initialize Git + Push to GitHub
&lt;/h2&gt;

&lt;p&gt;If your project isn’t versioned yet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/username/repo-name.git
git push -u origin main

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm it’s live at: &lt;code&gt;https://github.com/username/repo-name&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Sign in to Vercel
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;vercel.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sign in with GitHub (recommended)&lt;/li&gt;
&lt;li&gt;Authorize Vercel to access your repos&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3) Import the GitHub Repo
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;New Project&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select your GitHub repository&lt;/li&gt;
&lt;li&gt;Vercel auto-detects your framework (React, Next.js, Vue, static, etc.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a Vite/React project, defaults typically are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build command:&lt;/strong&gt; &lt;code&gt;vite build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output directory:&lt;/strong&gt; &lt;code&gt;dist/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4) Deploy 🚀
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;. Within ~1 minute, you’ll get a live URL like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://your-project.vercel.app

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5) Continuous Deployment
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;git push&lt;/code&gt; triggers an automatic redeploy. Every PR gets a preview URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "Update UI"
git push origin main

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Gotchas &amp;amp; Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment variables:&lt;/strong&gt; Set them in &lt;em&gt;Settings → Environment Variables&lt;/em&gt;. They’re available at build/runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branch config:&lt;/strong&gt; By default, Vercel deploys &lt;code&gt;main&lt;/code&gt;. Adjust under &lt;em&gt;Project Settings → Git&lt;/em&gt; if you use &lt;code&gt;develop&lt;/code&gt; or &lt;code&gt;staging&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Framework detection:&lt;/strong&gt; If auto-detect fails, add a minimal &lt;code&gt;vercel.json&lt;/code&gt; (example for Node):&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CI/CD contexts:&lt;/strong&gt; Production (pushes to &lt;code&gt;main&lt;/code&gt;), Preview (PRs), Development (&lt;code&gt;vercel dev&lt;/code&gt; locally).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/jfaza/innow" rel="noopener noreferrer"&gt;github.com/jfaza/innow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://innoweg.vercel.app" rel="noopener noreferrer"&gt;innoweg.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://fazaeli.dev/blog/entry/how-i-deployed-my-github-project-to-vercel-in-minutes" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>github</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
