<?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: Shabbir</title>
    <description>The latest articles on DEV Community by Shabbir (@shabbir_hr).</description>
    <link>https://dev.to/shabbir_hr</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%2F3960401%2Ff435b2cc-fd44-4b03-8149-b7e310e0b51b.png</url>
      <title>DEV Community: Shabbir</title>
      <link>https://dev.to/shabbir_hr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shabbir_hr"/>
    <language>en</language>
    <item>
      <title>I built a free AI learning roadmap generator in 3 weeks</title>
      <dc:creator>Shabbir</dc:creator>
      <pubDate>Sat, 30 May 2026 19:31:40 +0000</pubDate>
      <link>https://dev.to/shabbir_hr/i-built-a-free-ai-learning-roadmap-generator-in-3-weeks-45mi</link>
      <guid>https://dev.to/shabbir_hr/i-built-a-free-ai-learning-roadmap-generator-in-3-weeks-45mi</guid>
      <description>&lt;h2&gt;
  
  
  The Problem That Drove Me Crazy
&lt;/h2&gt;

&lt;p&gt;Every time I wanted to learn something new — Python, React, Machine Learning — &lt;br&gt;
the same thing happened.&lt;/p&gt;

&lt;p&gt;I'd open YouTube. Search "learn Python." Get 47 results. Pick one. Watch 20 minutes. &lt;br&gt;
Get confused. Open another tab. Find a different tutorial. That one uses a different &lt;br&gt;
approach. Now I have 8 tabs open, 3 half-finished courses, and I've learned nothing.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;This is tutorial hell. And it's not your fault — it's a discovery problem. &lt;br&gt;
There's too much content and no clear path through it.&lt;/p&gt;

&lt;p&gt;I spent more time searching for how to learn than actually learning.&lt;/p&gt;

&lt;p&gt;So I decided to fix it.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bf9i4bdztyu2bmoi4oz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bf9i4bdztyu2bmoi4oz.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2m8wjgtafyze52v9q6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2m8wjgtafyze52v9q6q.png" alt=" " width="799" height="515"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmrrbyrjdmmt8cplk7gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmrrbyrjdmmt8cplk7gc.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqig9cvpeam2xfgtowd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqig9cvpeam2xfgtowd4.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Solution
&lt;/h2&gt;

&lt;p&gt;I wanted something simple: &lt;strong&gt;type a skill, get a clear structured path.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not a generic list of YouTube channels. Not a $200 course. A real roadmap — &lt;br&gt;
phases, topics in the right order, and direct links to the best free videos for each topic.&lt;/p&gt;

&lt;p&gt;After 3 weeks of building I launched &lt;strong&gt;Path AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what it does:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Type any skill
&lt;/h3&gt;

&lt;p&gt;Python, React, Machine Learning, UI/UX Design, Cybersecurity, Flutter — anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Get a structured roadmap
&lt;/h3&gt;

&lt;p&gt;AI generates 4-6 phases in the correct learning order. Each phase has a clear title, &lt;br&gt;
duration estimate, and 4-5 specific topics.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Every topic links to YouTube
&lt;/h3&gt;

&lt;p&gt;Click any topic and it opens a YouTube search for that exact topic with the latest &lt;br&gt;
videos filtered. No outdated tutorials from 2015.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. See career paths
&lt;/h3&gt;

&lt;p&gt;After the roadmap, you see which careers that skill opens up — with difficulty rating, &lt;br&gt;
math intensity, and realistic salary ranges. Click any career to get a dedicated &lt;br&gt;
roadmap for that specific goal.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Track your progress
&lt;/h3&gt;

&lt;p&gt;Check off topics as you complete them. Progress saves automatically and syncs &lt;br&gt;
across devices if you sign in with Google.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Technically
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React + Vite + Tailwind CSS&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI:&lt;/strong&gt; Google Gemini API — generates structured JSON roadmaps from a carefully &lt;br&gt;
crafted prompt. The prompt forces specific phase counts, topic counts, and &lt;br&gt;
career paths relevant to the exact skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Vercel serverless functions — the API key never touches the browser. &lt;br&gt;
All Gemini calls go through a server function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt; Supabase (PostgreSQL) — stores roadmaps, progress, and generation &lt;br&gt;
counts per user. Row Level Security ensures users only see their own data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth:&lt;/strong&gt; Supabase Google OAuth — one click sign in, no passwords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting:&lt;/strong&gt; Vercel — auto deploys on every GitHub push.&lt;/p&gt;

&lt;p&gt;The architecture is simple but production-ready. The API key is secure, &lt;br&gt;
data is in the cloud, and auth is handled properly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Biggest Technical Challenge
&lt;/h2&gt;

&lt;p&gt;Getting Gemini to return consistent, parseable JSON was harder than expected.&lt;/p&gt;

&lt;p&gt;The model would sometimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return markdown fences around the JSON&lt;/li&gt;
&lt;li&gt;Truncate the response mid-object&lt;/li&gt;
&lt;li&gt;Add commentary before or after the JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix was a combination of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Very strict prompt instructions ("Return ONLY valid JSON, no markdown, no backticks")&lt;/li&gt;
&lt;li&gt;Aggressive JSON extraction on the server (find first &lt;code&gt;{&lt;/code&gt; and last &lt;code&gt;}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Increasing &lt;code&gt;maxOutputTokens&lt;/code&gt; to prevent truncation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After those fixes the parse success rate went from ~70% to ~99%.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ship early.&lt;/strong&gt; I spent too long polishing features nobody asked for. &lt;br&gt;
The core value is the roadmap generation — everything else is secondary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;localStorage is not a database.&lt;/strong&gt; I started with localStorage for everything. &lt;br&gt;
It works until users want cross-device sync. Migrating to Supabase mid-project &lt;br&gt;
was painful but worth it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt engineering is real engineering.&lt;/strong&gt; Getting consistent structured output &lt;br&gt;
from an LLM requires the same rigor as any other API contract. Test extensively, &lt;br&gt;
handle edge cases, have fallbacks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stripe integration for a Pro plan (unlimited generations)&lt;/li&gt;
&lt;li&gt;More pre-built templates for popular skills&lt;/li&gt;
&lt;li&gt;Better mobile experience&lt;/li&gt;
&lt;li&gt;User requested: export roadmap as PDF&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Path AI is completely free&lt;/strong&gt; — no signup needed to generate your first roadmap.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://roadmap-ai-sooty.vercel.app" rel="noopener noreferrer"&gt;https://roadmap-ai-sooty.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely love feedback from the dev community. What skills should I add? &lt;br&gt;
What's broken? What would make this actually useful for you?&lt;/p&gt;

&lt;p&gt;Drop a comment or reach out — building in public and happy to discuss &lt;br&gt;
any of the technical decisions.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>react</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
