<?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: Kumar Nihal</title>
    <description>The latest articles on DEV Community by Kumar Nihal (@knihal12).</description>
    <link>https://dev.to/knihal12</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%2F3766610%2F52ca5ad6-4940-41cd-87a8-c489ea9c5c60.jpeg</url>
      <title>DEV Community: Kumar Nihal</title>
      <link>https://dev.to/knihal12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/knihal12"/>
    <language>en</language>
    <item>
      <title>I Spent 4 Hours Debugging Google OAuth… Then I Deleted the Feature (A Lesson While Building My First SaaS)</title>
      <dc:creator>Kumar Nihal</dc:creator>
      <pubDate>Thu, 19 Mar 2026 14:35:27 +0000</pubDate>
      <link>https://dev.to/knihal12/i-spent-4-hours-debugging-google-oauth-then-i-deleted-the-feature-a-lesson-while-building-my-4n6d</link>
      <guid>https://dev.to/knihal12/i-spent-4-hours-debugging-google-oauth-then-i-deleted-the-feature-a-lesson-while-building-my-4n6d</guid>
      <description>&lt;p&gt;A few days ago I shared the architecture flow diagram of my SaaS project, LeadIt.&lt;/p&gt;

&lt;p&gt;After that, I also shared a post explaining the core backend components I built — things like the company search API, the analysis engine, lead scoring logic, and the AI outreach generator.&lt;/p&gt;

&lt;p&gt;Since then I’ve been slowly turning those pieces into an actual working product.&lt;/p&gt;

&lt;p&gt;Most of the backend core is now working, and I’ve also been building the landing page that explains the product and its workflow.&lt;/p&gt;

&lt;p&gt;But while trying to implement the next feature — email automation using Gmail OAuth — I ran into a problem that ended up teaching me one of the most important lessons about building MVPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Plan: Let Users Send Emails From the Platform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the backend intelligence layer was working, the next step felt obvious.&lt;br&gt;
Users should be able to send outreach emails directly from LeadIt.&lt;/p&gt;

&lt;p&gt;The flow I imagined was simple.&lt;br&gt;
A user connects their Gmail account → LeadIt generates an AI outreach message → the user can send the email directly from the platform.&lt;br&gt;
To make that work, I needed Google OAuth with Gmail API access.&lt;/p&gt;

&lt;p&gt;The expected flow looked something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User logs in using Google OAuth&lt;/li&gt;
&lt;li&gt;LeadIt asks for permission to access Gmail&lt;/li&gt;
&lt;li&gt;Google returns an access token and refresh token&lt;/li&gt;
&lt;li&gt;Those tokens get stored in my Supabase database&lt;/li&gt;
&lt;li&gt;LeadIt uses the Gmail API to send outreach emails automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, this looked straightforward.&lt;br&gt;
But implementing it was a completely different experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting Up Google Cloud&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started by setting up everything inside Google Cloud Console (GCP).&lt;/p&gt;

&lt;p&gt;The usual steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a Google Cloud project&lt;/li&gt;
&lt;li&gt;Enabled the Gmail API&lt;/li&gt;
&lt;li&gt;Configured the OAuth consent screen&lt;/li&gt;
&lt;li&gt;Generated Client ID and Client Secret&lt;/li&gt;
&lt;li&gt;Added redirect URIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Something like this:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="http://localhost:3000/api/auth/callback/google" rel="noopener noreferrer"&gt;http://localhost:3000/api/auth/callback/google&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then I added Gmail permissions using scopes like:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.googleapis.com/auth/gmail.send" rel="noopener noreferrer"&gt;https://www.googleapis.com/auth/gmail.send&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At this point everything looked correct.&lt;br&gt;
The configuration seemed fine.&lt;br&gt;
So I moved forward with integrating authentication in the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication Worked… But the Token Didn’t&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the weird part.&lt;br&gt;
The Google login itself worked perfectly.&lt;br&gt;
Users could sign in successfully.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth redirect worked&lt;/li&gt;
&lt;li&gt;Client ID was valid&lt;/li&gt;
&lt;li&gt;Consent screen worked&lt;/li&gt;
&lt;li&gt;Authentication succeeded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the Gmail provider token never got stored in my database.&lt;br&gt;
And that token is the most important part.&lt;/p&gt;

&lt;p&gt;Without it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no Gmail API calls&lt;/li&gt;
&lt;li&gt;no sending emails&lt;/li&gt;
&lt;li&gt;no automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So even though authentication worked, the feature itself was useless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 4-Hour Debugging Spiral&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where things started getting frustrating. I spent around 3–4 hours debugging the issue. And I checked almost everything I could think of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database Layer&lt;/strong&gt;&lt;br&gt;
 First I checked Supabase.&lt;br&gt;
Things I verified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database connection&lt;/li&gt;
&lt;li&gt;user table structure&lt;/li&gt;
&lt;li&gt;provider token fields&lt;/li&gt;
&lt;li&gt;row level security policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything looked correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server-Side Logic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I checked the backend logic.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth callback handler&lt;/li&gt;
&lt;li&gt;parsing provider tokens&lt;/li&gt;
&lt;li&gt;inserting tokens into the database&lt;/li&gt;
&lt;li&gt;session handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client-Side Flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I checked the frontend flow.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication session&lt;/li&gt;
&lt;li&gt;provider response&lt;/li&gt;
&lt;li&gt;token availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again… nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Cloud Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At this point I went back to Google Cloud.&lt;/p&gt;

&lt;p&gt;Checked again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth scopes&lt;/li&gt;
&lt;li&gt;redirect URLs&lt;/li&gt;
&lt;li&gt;Gmail API permissions&lt;/li&gt;
&lt;li&gt;client ID configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything looked fine.&lt;br&gt;
Yet somehow the provider token was never reaching my database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Realization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After spending hours debugging this, I finally asked myself a simple question.&lt;br&gt;
Do I actually need this feature right now?&lt;br&gt;
And the honest answer was: &lt;strong&gt;No&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The real core of LeadIt is not Gmail automation.&lt;/p&gt;

&lt;p&gt;The real core is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discovering companies&lt;/li&gt;
&lt;li&gt;analyzing their websites&lt;/li&gt;
&lt;li&gt;detecting opportunity signals&lt;/li&gt;
&lt;li&gt;generating AI outreach messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sending emails automatically is definitely useful.&lt;br&gt;
But it is not required to validate the product idea.&lt;br&gt;
And that’s when I made a decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Founder Decision: Cut the Feature&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of wasting more time on OAuth complexity, I decided to remove the feature from the MVP.&lt;br&gt;
Gmail automation will move to Version 2.&lt;br&gt;
For the MVP, the product will focus only on the core features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;company search&lt;/li&gt;
&lt;li&gt;website analysis&lt;/li&gt;
&lt;li&gt;lead discovery&lt;/li&gt;
&lt;li&gt;lead scoring&lt;/li&gt;
&lt;li&gt;AI outreach message generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of automatic email sending, users can simply: &lt;em&gt;copy the generated message and send it manually.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s simple.&lt;br&gt;
But for an MVP, simple is actually good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplifying Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While thinking about this, I also made another decision.&lt;/p&gt;

&lt;p&gt;Instead of implementing complex OAuth systems right now, I’ll use simple Next.js authentication for the MVP.&lt;/p&gt;

&lt;p&gt;OAuth systems bring a lot of complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;client IDs&lt;/li&gt;
&lt;li&gt;redirect flows&lt;/li&gt;
&lt;li&gt;token storage&lt;/li&gt;
&lt;li&gt;refresh tokens&lt;/li&gt;
&lt;li&gt;permission scopes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of that takes time to build and even more time to debug.&lt;br&gt;
Right now my focus is simple.&lt;br&gt;
Ship the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Landing Page Progress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alongside the backend work, I’ve also been building the LeadIt landing page.&lt;br&gt;
It’s almost complete now.&lt;br&gt;
Soon I’ll share a preview of the landing page and I’d genuinely love feedback from other builders here.&lt;br&gt;
Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does the product idea make sense?&lt;/li&gt;
&lt;li&gt;is the value proposition clear?&lt;/li&gt;
&lt;li&gt;would you try a tool like this?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Getting early feedback is honestly one of the most useful things when building something from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Today Actually Taught Me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first, today felt like a wasted day.&lt;br&gt;
I didn’t ship the feature I planned.&lt;br&gt;
But in reality, I learned something much more important.&lt;br&gt;
Startups don’t need perfect products.&lt;br&gt;
They need working MVPs.&lt;br&gt;
That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shipping fast&lt;/li&gt;
&lt;li&gt;avoiding unnecessary complexity&lt;/li&gt;
&lt;li&gt;cutting features when needed&lt;/li&gt;
&lt;li&gt;Sometimes the smartest engineering decision isn’t fixing the problem.&lt;/li&gt;
&lt;li&gt;Sometimes it’s removing the problem entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Thought&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building your first SaaS is messy.&lt;br&gt;
You’ll spend hours debugging things that might not even matter in the final product.&lt;br&gt;
But every one of those moments teaches you something about building, prioritizing, and shipping faster.&lt;br&gt;
LeadIt is still very early.&lt;br&gt;
But every small step is slowly turning the idea into a real product.&lt;br&gt;
And honestly, that’s the fun part of the journey.&lt;/p&gt;

&lt;p&gt;If you're building something right now, I’m curious:&lt;br&gt;
Have you ever spent hours debugging a feature… only to realize you didn’t actually need it?&lt;/p&gt;

</description>
      <category>learning</category>
      <category>saas</category>
      <category>sideprojects</category>
      <category>startup</category>
    </item>
    <item>
      <title>From Architecture to Reality: Building My First SaaS (LeadIt) with AI Outreach and Company Analysis</title>
      <dc:creator>Kumar Nihal</dc:creator>
      <pubDate>Sat, 14 Mar 2026 12:21:03 +0000</pubDate>
      <link>https://dev.to/knihal12/from-architecture-to-reality-building-my-first-saas-leadit-with-ai-outreach-and-company-analysis-4f37</link>
      <guid>https://dev.to/knihal12/from-architecture-to-reality-building-my-first-saas-leadit-with-ai-outreach-and-company-analysis-4f37</guid>
      <description>&lt;p&gt;Two days ago I shared the architecture flow diagram of my SaaS project LeadIt.&lt;/p&gt;

&lt;p&gt;Today I want to share what actually happened after that.&lt;/p&gt;

&lt;p&gt;Over the last two days, I started turning that architecture into real working modules. Instead of just diagrams and ideas, LeadIt now has actual APIs, a company analysis engine, and an AI-powered outreach generator.&lt;/p&gt;

&lt;p&gt;This post is basically a build log of what I implemented and what I learned while building my first SaaS product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is LeadIt?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LeadIt is a project I’m building to help with B2B lead discovery and AI-powered outreach.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find companies&lt;/li&gt;
&lt;li&gt;Analyze their websites&lt;/li&gt;
&lt;li&gt;Detect opportunity signals&lt;/li&gt;
&lt;li&gt;Generate personalized outreach emails&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of manually researching companies and writing cold emails, the system tries to automate most of that process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Setting Up the Company Search API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first thing I worked on was the database layer.&lt;/p&gt;

&lt;p&gt;I connected my backend with Supabase and verified that I could fetch company records successfully.&lt;/p&gt;

&lt;p&gt;Once the connection was stable, I built a Company Search API.&lt;/p&gt;

&lt;p&gt;This API supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;searching companies by company_name&lt;/li&gt;
&lt;li&gt;filtering by country&lt;/li&gt;
&lt;li&gt;filtering by category&lt;/li&gt;
&lt;li&gt;pagination using page, limit, and offset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pagination was important because once the database grows, returning thousands of records in a single request would slow everything down.&lt;/p&gt;

&lt;p&gt;I also made the response lightweight by returning only the required fields instead of full database objects.&lt;/p&gt;

&lt;p&gt;After testing the endpoint, it successfully fetched companies like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zapier&lt;/li&gt;
&lt;li&gt;Freshworks&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing clean API responses was a small but satisfying milestone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Building the Company Analyze Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once companies could be fetched from the database, the next step was analyzing them.&lt;/p&gt;

&lt;p&gt;For this, I built what I call the Company Analyze Engine.&lt;br&gt;
The idea is to automatically scan a company website and detect useful signals.&lt;br&gt;
To achieve this, I used Playwright for automated browsing.&lt;/p&gt;

&lt;p&gt;The engine visits key pages of a company website:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;homepage&lt;/li&gt;
&lt;li&gt;careers page&lt;/li&gt;
&lt;li&gt;API documentation&lt;/li&gt;
&lt;li&gt;integrations page&lt;/li&gt;
&lt;li&gt;product pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To keep the scraper lightweight and fast, I blocked heavy resources like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;images&lt;/li&gt;
&lt;li&gt;fonts&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This significantly improves scraping speed.&lt;/p&gt;

&lt;p&gt;During analysis, the engine looks for business signals, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hiring activity&lt;/li&gt;
&lt;li&gt;availability of APIs&lt;/li&gt;
&lt;li&gt;integrations with other tools&lt;/li&gt;
&lt;li&gt;automation-related keywords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These signals help determine whether the company might be a good B2B opportunity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Building the Lead Scoring Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After detecting signals, I implemented a rule-based lead scoring system.&lt;br&gt;
The goal here is to turn raw signals into a clear opportunity score.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Companies hiring engineers may be scaling fast&lt;/li&gt;
&lt;li&gt;Companies offering APIs may be developer-focused&lt;/li&gt;
&lt;li&gt;Companies mentioning automation might be good targets for outreach tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system calculates a lead opportunity score and also explains the reason behind the score.&lt;/p&gt;

&lt;p&gt;The company endpoint now returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detected signals&lt;/li&gt;
&lt;li&gt;opportunity score&lt;/li&gt;
&lt;li&gt;reasoning behind the score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This module basically acts as the intelligence layer of LeadIt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Building the AI Outreach Generator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the system identifies potential opportunities, the next step is outreach.&lt;/p&gt;

&lt;p&gt;So I built the AI Outreach Generator.&lt;/p&gt;

&lt;p&gt;This module generates personalized cold emails using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;company signals&lt;/li&gt;
&lt;li&gt;company context&lt;/li&gt;
&lt;li&gt;user skills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the AI model, I integrated Groq LLM using the llama-3.1-8b-instant model.&lt;/p&gt;

&lt;p&gt;To make the emails more effective, I designed three outreach styles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Observation Style: Point out something interesting about the company.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Opportunity Style: Suggest a possible improvement or opportunity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Curiosity Style: Spark curiosity to encourage a reply.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The AI response is then parsed into structured output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;email subject&lt;/li&gt;
&lt;li&gt;email body&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The endpoint now takes company signals and generates context-aware outreach emails automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Production Considerations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though this is an early version, I tried to keep production stability in mind.&lt;/p&gt;

&lt;p&gt;Some safeguards I added include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;input sanitization&lt;/li&gt;
&lt;li&gt;prompt injection protection&lt;/li&gt;
&lt;li&gt;token limits&lt;/li&gt;
&lt;li&gt;timeout protection&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;concurrency limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These help prevent abuse and keep the system stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Debugging Moment: Tailwind CSS Version Conflict&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not everything went smoothly.&lt;/p&gt;

&lt;p&gt;While setting up Next.js 14, I kept getting repeated build errors related to Tailwind CSS.&lt;br&gt;
After debugging configs and dependencies, I realized the issue:&lt;/p&gt;

&lt;p&gt;I had installed Tailwind CSS v4, which is designed for Next.js 15.&lt;br&gt;
But my project runs on Next.js 14, which caused PostCSS and CSS compilation errors.&lt;/p&gt;

&lt;p&gt;The fix was simply downgrading to: Tailwind CSS v3&lt;/p&gt;

&lt;p&gt;Once I did that, the build errors disappeared.&lt;br&gt;
A small mistake, but a good reminder about framework compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where LeadIt Stands Now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the last two days of development, LeadIt can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search companies from a database&lt;/li&gt;
&lt;li&gt;analyze company websites automatically&lt;/li&gt;
&lt;li&gt;detect business signals&lt;/li&gt;
&lt;li&gt;calculate lead opportunity scores&lt;/li&gt;
&lt;li&gt;generate AI-powered outreach emails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is starting to look like the foundation of an automated B2B lead generation platform.&lt;/p&gt;

&lt;p&gt;Still early days, but it’s exciting to see the architecture slowly turn into a real product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building your first SaaS product is chaotic.&lt;/p&gt;

&lt;p&gt;You spend hours debugging small things.&lt;br&gt;
You question your architecture decisions.&lt;br&gt;
You rewrite code multiple times.&lt;/p&gt;

&lt;p&gt;But the moment your system actually starts working — APIs responding, AI generating emails, data flowing — it feels incredible.&lt;/p&gt;

&lt;p&gt;LeadIt is still early, but the core engine is finally starting to work.&lt;/p&gt;

&lt;p&gt;And that feels like real progress.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;If you're also building a SaaS or experimenting with AI tools,&lt;br&gt;
I'd love to hear what you're working on.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>saas</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building my first AI lead generation SaaS (LeadIt) — MVP architecture</title>
      <dc:creator>Kumar Nihal</dc:creator>
      <pubDate>Thu, 12 Mar 2026 09:41:07 +0000</pubDate>
      <link>https://dev.to/knihal12/building-my-first-ai-lead-generation-saas-leadit-mvp-architecture-f1d</link>
      <guid>https://dev.to/knihal12/building-my-first-ai-lead-generation-saas-leadit-mvp-architecture-f1d</guid>
      <description>&lt;p&gt;Hi everyone 👋&lt;/p&gt;

&lt;p&gt;I'm currently building my first SaaS product called &lt;strong&gt;LeadIt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea behind LeadIt is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality over quantity in lead generation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of scraping thousands of random leads, the system tries to identify &lt;strong&gt;companies that actually show signals of being a good fit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is still an &lt;strong&gt;MVP&lt;/strong&gt;, and I'm trying to keep the architecture simple while validating the idea.&lt;/p&gt;

&lt;p&gt;Here is the architecture I designed for the MVP:&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%2Fp39sm8k1u8cfclfhm70e.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%2Fp39sm8k1u8cfclfhm70e.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js server API&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Google OAuth 2.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lead Analysis Modules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Scraper using Playwright&lt;/li&gt;
&lt;li&gt;Web intelligence using Tavily API&lt;/li&gt;
&lt;li&gt;Signals detection (job listings, API docs, integration pages)&lt;/li&gt;
&lt;li&gt;AI-generated outreach emails&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Groq for LLM processing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supabase database&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Outreach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gmail API for sending emails&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Workflow
&lt;/h2&gt;

&lt;p&gt;The flow of the system is roughly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User searches for companies&lt;/li&gt;
&lt;li&gt;Scraper collects company data&lt;/li&gt;
&lt;li&gt;Signals detection analyzes companies&lt;/li&gt;
&lt;li&gt;AI generates personalized outreach emails&lt;/li&gt;
&lt;li&gt;Emails are sent and tracked using Gmail API&lt;/li&gt;
&lt;li&gt;Data is stored in Supabase&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why I'm building this
&lt;/h2&gt;

&lt;p&gt;I noticed that most lead generation tools focus on &lt;strong&gt;volume&lt;/strong&gt;, not &lt;strong&gt;relevance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal of LeadIt is to find &lt;strong&gt;high-quality opportunities&lt;/strong&gt; instead of sending thousands of cold emails.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback welcome 🙏
&lt;/h2&gt;

&lt;p&gt;Since this is still an MVP, I’d love feedback from other builders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this architecture make sense?&lt;/li&gt;
&lt;li&gt;Am I overengineering anything?&lt;/li&gt;
&lt;li&gt;What would you simplify?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm building this &lt;strong&gt;in public&lt;/strong&gt;, so I'll keep sharing progress as I go.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>saas</category>
      <category>ai</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
