<?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: Subashbelina</title>
    <description>The latest articles on DEV Community by Subashbelina (@subashbelina_c7085b13f7a7).</description>
    <link>https://dev.to/subashbelina_c7085b13f7a7</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%2F3986203%2F3038dfe3-39df-4e15-b6f2-498baaca9150.jpg</url>
      <title>DEV Community: Subashbelina</title>
      <link>https://dev.to/subashbelina_c7085b13f7a7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/subashbelina_c7085b13f7a7"/>
    <language>en</language>
    <item>
      <title>How I Built CVpilotX — An AI Resume Builder with Next.js and OpenAI</title>
      <dc:creator>Subashbelina</dc:creator>
      <pubDate>Tue, 16 Jun 2026 11:31:27 +0000</pubDate>
      <link>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-cvpilotx-an-ai-resume-builder-with-nextjs-and-openai-4cd7</link>
      <guid>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-cvpilotx-an-ai-resume-builder-with-nextjs-and-openai-4cd7</guid>
      <description>&lt;p&gt;Resumes are generic. Jobs are specific.&lt;br&gt;
Every job needs a tailored CV but nobody&lt;br&gt;
has time to rewrite it every time.&lt;/p&gt;

&lt;p&gt;So I built CVpilotX — paste a job description,&lt;br&gt;
AI rewrites your CV to match it, download as PDF instantly.&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://cvpilotx-frontend.onrender.com/" rel="noopener noreferrer"&gt;https://cvpilotx-frontend.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next.js (Frontend)&lt;/li&gt;
&lt;li&gt;Node.js + Express (Backend)&lt;/li&gt;
&lt;li&gt;OpenAI GPT-4&lt;/li&gt;
&lt;li&gt;Docker (Deployment)&lt;/li&gt;
&lt;li&gt;Render (Hosting)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Biggest Challenge — PDF Generation
&lt;/h2&gt;

&lt;p&gt;Generating a clean, formatted PDF from&lt;br&gt;
AI-generated content was harder than expected.&lt;/p&gt;

&lt;p&gt;The AI returns text but PDF needs proper&lt;br&gt;
formatting — fonts, spacing, margins, sections.&lt;/p&gt;

&lt;p&gt;First attempt was ugly. 😅&lt;/p&gt;

&lt;p&gt;Fix using puppeteer:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.setContent(htmlContent)
const pdf = await page.pdf({
  format: 'A4',
  margin: {
    top: '20px',
    bottom: '20px',
    left: '20px',
    right: '20px'
  }
})
await browser.close()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Convert AI response to HTML first,&lt;br&gt;
then Puppeteer renders it as perfect PDF.&lt;br&gt;
Clean output every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📋 Paste any job description&lt;/li&gt;
&lt;li&gt;🤖 AI rewrites your CV to match it&lt;/li&gt;
&lt;li&gt;📄 Download as PDF instantly&lt;/li&gt;
&lt;li&gt;⚡ Takes less than 30 seconds&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;PDF generation needs HTML as middle layer&lt;/li&gt;
&lt;li&gt;Puppeteer inside Docker needs extra config&lt;/li&gt;
&lt;li&gt;OpenAI prompt engineering matters more
than the code itself&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Found this helpful? Drop a ❤️&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>nextjs</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Built an AI Writer SaaS App with React and OpenAI</title>
      <dc:creator>Subashbelina</dc:creator>
      <pubDate>Mon, 15 Jun 2026 20:50:09 +0000</pubDate>
      <link>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-an-ai-writer-saas-app-with-react-and-openai-3634</link>
      <guid>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-an-ai-writer-saas-app-with-react-and-openai-3634</guid>
      <description>&lt;p&gt;I wanted to build something useful with AI.&lt;br&gt;
So I built an AI Writer — a SaaS app that generates&lt;br&gt;
blogs, emails, and content using OpenAI GPT.&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://ai-writer-saas-sepia.vercel.app/" rel="noopener noreferrer"&gt;https://ai-writer-saas-sepia.vercel.app/&lt;/a&gt;&lt;br&gt;
⚙️ Backend: &lt;a href="https://ai-writer-server.onrender.com/" rel="noopener noreferrer"&gt;https://ai-writer-server.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React.js (Frontend)&lt;/li&gt;
&lt;li&gt;Node.js + Express (Backend)&lt;/li&gt;
&lt;li&gt;OpenAI API&lt;/li&gt;
&lt;li&gt;Vercel (Frontend) + Render (Backend)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Biggest Challenge — Render Cold Start
&lt;/h2&gt;

&lt;p&gt;My backend was hosted on Render free tier.&lt;br&gt;
Every time nobody used the app for 15 minutes,&lt;br&gt;
Render would spin down the server.&lt;/p&gt;

&lt;p&gt;Next request would take 30-60 seconds to respond.&lt;br&gt;
Users thought the app was broken. 😅&lt;/p&gt;

&lt;p&gt;Fix:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;setInterval(() =&amp;gt; {
  fetch('https://ai-writer-server.onrender.com/ping')
    .then(() =&amp;gt; console.log('Server kept alive'))
}, 14 * 60 * 1000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Added a simple /ping endpoint in Express:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.get('/ping', (req, res) =&amp;gt; {
  res.json({ status: 'alive' })
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Cold start problem solved. App feels instant now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📝 Blog post generator&lt;/li&gt;
&lt;li&gt;📧 Email writer&lt;/li&gt;
&lt;li&gt;💡 Content ideas generator&lt;/li&gt;
&lt;li&gt;⚡ Instant AI responses&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Render free tier spins down after inactivity&lt;/li&gt;
&lt;li&gt;Keep-alive ping is the easiest fix&lt;/li&gt;
&lt;li&gt;OpenAI streaming makes UX feel much faster&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Found this helpful? Drop a ❤️&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Built CineMood — A Movie Discovery App</title>
      <dc:creator>Subashbelina</dc:creator>
      <pubDate>Mon, 15 Jun 2026 20:43:19 +0000</pubDate>
      <link>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-cinemood-a-movie-discovery-app-2075</link>
      <guid>https://dev.to/subashbelina_c7085b13f7a7/how-i-built-cinemood-a-movie-discovery-app-2075</guid>
      <description>&lt;p&gt;I was tired of scrolling Netflix finding nothing.&lt;br&gt;
So I built CineMood — discover movies based on&lt;br&gt;
your mood, not what's trending.&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://cinemood-plum.vercel.app/" rel="noopener noreferrer"&gt;https://cinemood-plum.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React + Node.js + Express&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;TMDB API&lt;/li&gt;
&lt;li&gt;Vercel + Render&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Biggest Challenge — CORS Error
&lt;/h2&gt;

&lt;p&gt;Got this error connecting Vercel frontend&lt;br&gt;
to Render backend:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;blocked by CORS policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Fix:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.use(cors({
  origin: 'https://cinemood-plum.vercel.app'
}))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;2 hours of debugging. One line fix. 😅&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Set up CORS on day one, not after deployment&lt;/li&gt;
&lt;li&gt;TMDB API needs caching for performance&lt;/li&gt;
&lt;li&gt;Vercel + Render = best free fullstack combo&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Found this helpful? Drop a ❤️&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
