<?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: Mushood Hanif</title>
    <description>The latest articles on DEV Community by Mushood Hanif (@mushood_hanif).</description>
    <link>https://dev.to/mushood_hanif</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%2F1669638%2F3e4ff53c-e699-414d-b234-54c412c7fb09.jpg</url>
      <title>DEV Community: Mushood Hanif</title>
      <link>https://dev.to/mushood_hanif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mushood_hanif"/>
    <language>en</language>
    <item>
      <title>How can you find your target market if you don't know what your product is.</title>
      <dc:creator>Mushood Hanif</dc:creator>
      <pubDate>Sun, 01 Feb 2026 11:18:20 +0000</pubDate>
      <link>https://dev.to/mushood_hanif/how-can-you-find-your-target-market-if-you-dont-know-what-your-product-is-4lda</link>
      <guid>https://dev.to/mushood_hanif/how-can-you-find-your-target-market-if-you-dont-know-what-your-product-is-4lda</guid>
      <description>&lt;p&gt;Most people try to find customers &lt;em&gt;before&lt;/em&gt; they understand what they’re actually selling.&lt;/p&gt;

&lt;p&gt;That’s backwards.&lt;/p&gt;

&lt;p&gt;Context changes everything.&lt;/p&gt;

&lt;p&gt;This simple philosophy completely changes how we think about &lt;strong&gt;automated sales agents&lt;/strong&gt;. Instead of blasting generic outreach, we let &lt;em&gt;context&lt;/em&gt; define &lt;strong&gt;who to target&lt;/strong&gt;, &lt;strong&gt;what to say&lt;/strong&gt;, and &lt;strong&gt;why it matters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through a &lt;strong&gt;4-part n8n workflow&lt;/strong&gt; that builds an &lt;strong&gt;autonomous, context-aware sales system&lt;/strong&gt;—from raw product knowledge to hyper-personalized outreach.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Idea
&lt;/h2&gt;

&lt;p&gt;We start by creating a &lt;strong&gt;knowledge base&lt;/strong&gt; that acts as persistent context across the entire workflow.&lt;/p&gt;

&lt;p&gt;This context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guides AI agents&lt;/li&gt;
&lt;li&gt;Improves lead quality&lt;/li&gt;
&lt;li&gt;Enables real market research based on what the product &lt;em&gt;actually&lt;/em&gt; offers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as giving your sales agent a memory—because amnesia is bad for revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lead generation for product-based sales&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Required
&lt;/h2&gt;

&lt;p&gt;All tools used either have &lt;strong&gt;free tiers&lt;/strong&gt; or are &lt;strong&gt;generously priced&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Neon DB&lt;/strong&gt; – Store research and lead data
&lt;em&gt;(Google Sheets works too, but rate limits will eventually ruin your day)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Serper&lt;/strong&gt; – Web search for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Drive&lt;/strong&gt; – Knowledge base document storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinecone&lt;/strong&gt; – Vector database for contextual retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hunter.io&lt;/strong&gt; – Email discovery for outreach&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Client&lt;/strong&gt; – Gmail or any SMTP-capable service&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; – Our LLM powering the agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Good to Know
&lt;/h2&gt;

&lt;p&gt;This entire workflow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low-cost&lt;/li&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Fully automated&lt;/li&gt;
&lt;li&gt;Slightly terrifying (for traditional sales teams)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works (High Level)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Convert your &lt;strong&gt;knowledge base&lt;/strong&gt; into embeddings&lt;/li&gt;
&lt;li&gt;Use that context to &lt;strong&gt;generate targeted search queries&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Research companies and &lt;strong&gt;identify decision-makers&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Send &lt;strong&gt;hyper-personalized outreach emails&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Four workflows. One autonomous sales machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 – Context Creation
&lt;/h2&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%2Fafttvz95zle6093b0c75.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%2Fafttvz95zle6093b0c75.png" alt="RAG Pipeline + State Management" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This workflow synchronizes documents from Google Drive into Pinecone while preventing redundant processing using Google Sheets as a record manager.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. File Discovery &amp;amp; Filtering
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Manual or scheduled&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Drive Integration:&lt;/strong&gt; Scans a specific folder&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Validation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IF Node checks whether the item is a folder or a file&lt;/li&gt;
&lt;li&gt;Folders are ignored&lt;/li&gt;
&lt;li&gt;Files move forward for processing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Change Detection (State Management)
&lt;/h3&gt;

&lt;p&gt;To save time, tokens, and money:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hashing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a SHA256 hash of the file contents&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Record Lookup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check Google Sheets for existing file IDs and hashes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Switch Logic:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New file → Process &amp;amp; store&lt;/li&gt;
&lt;li&gt;Hash changed → Re-process &amp;amp; update&lt;/li&gt;
&lt;li&gt;Hash unchanged → Skip&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Efficiency is the real growth hack.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Data Ingestion &amp;amp; Vectorization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Data Loading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download file and extract text&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Text Splitting:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recursive Character Splitter&lt;/li&gt;
&lt;li&gt;1000 characters per chunk&lt;/li&gt;
&lt;li&gt;10-character overlap&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Embedding:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gemini Embedding Model converts chunks into vectors&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Vector Storage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pinecone:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upserts embeddings + metadata (file name, ID)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Namespacing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clears namespace to ensure updated docs replace old ones&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This workflow runs &lt;strong&gt;once&lt;/strong&gt;, or whenever new documents are added.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 – Lead Generation
&lt;/h2&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%2Fu4eltlukvmdv7ezclrq3.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%2Fu4eltlukvmdv7ezclrq3.png" alt="AI-Powered Market Discovery" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This workflow turns product knowledge into &lt;strong&gt;qualified company leads&lt;/strong&gt;—not random internet noise.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Strategy Generation (The “Brain”)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Scheduled (daily or weekly)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lead Criteria Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini analyzes the Pinecone knowledge base&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured JSON defining:&lt;/li&gt;
&lt;li&gt;Ideal industries (e.g., FinTech, HealthTech)&lt;/li&gt;
&lt;li&gt;Company size&lt;/li&gt;
&lt;li&gt;High-intent Google search queries&lt;/li&gt;
&lt;li&gt;Queries are optimized to find &lt;strong&gt;company websites&lt;/strong&gt;, not blogs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Automated Web Research
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loop:&lt;/strong&gt; Iterates through generated queries&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Google Serper:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executes live searches&lt;/li&gt;
&lt;li&gt;Uses negative operators
(&lt;code&gt;-site:medium.com&lt;/code&gt;, &lt;code&gt;-site:linkedin.com&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;No listicles. No influencers. Just businesses.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Data Parsing &amp;amp; Scoring
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Node (JavaScript):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes “Top 10” list pages&lt;/li&gt;
&lt;li&gt;Identifies real company homepages&lt;/li&gt;
&lt;li&gt;Scores results based on:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/products&lt;/code&gt; or &lt;code&gt;/solutions&lt;/code&gt; pages&lt;/li&gt;
&lt;li&gt;Extracts:&lt;/li&gt;
&lt;li&gt;Clean company name&lt;/li&gt;
&lt;li&gt;Domain&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Database Integration &amp;amp; De-duplication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Postgres Check:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pulls existing companies&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Filtering:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discards duplicates&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Insert:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saves only new, high-quality leads into the &lt;code&gt;search&lt;/code&gt; table&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3 – Contact Generation
&lt;/h2&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%2Ftxboyxzq60yf0shk1ni0.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%2Ftxboyxzq60yf0shk1ni0.png" alt="Deep Research &amp;amp; Lead Enrichment" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we turn companies into &lt;strong&gt;actual humans you can email&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Lead Retrieval &amp;amp; Throttling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Daily&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Query:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch up to 5 unprocessed companies&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Wait Nodes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Throttle API calls to avoid rate limits&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Patience is cheaper than API overages.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Deep Company Research (AI Analyst)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Company Research Agent (Gemini):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses:&lt;/li&gt;
&lt;li&gt;Google Serper (news, competitors, challenges)&lt;/li&gt;
&lt;li&gt;Pinecone (product-feature matching)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured JSON with:&lt;/li&gt;
&lt;li&gt;Industry pain points&lt;/li&gt;
&lt;li&gt;Custom use cases&lt;/li&gt;
&lt;li&gt;Why &lt;em&gt;this&lt;/em&gt; company needs &lt;em&gt;your&lt;/em&gt; product&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Contact Enrichment (Finding the “Who”)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hunter.io:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finds emails and LinkedIn profiles&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Decision Maker Filtering:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracts:&lt;/li&gt;
&lt;li&gt;Names&lt;/li&gt;
&lt;li&gt;Titles&lt;/li&gt;
&lt;li&gt;Verified emails&lt;/li&gt;
&lt;li&gt;Removes null or generic results&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Final Data Storage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Validation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure at least one valid email exists&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Insert:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save enriched leads into the &lt;code&gt;leads&lt;/code&gt; table&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Status Update:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mark company as processed to avoid repeats&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4 – Outreach
&lt;/h2&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%2Ffyvvd4ylrtrs9q0v831p.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%2Ffyvvd4ylrtrs9q0v831p.png" alt="Hyper-Personalized Email Engine" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where everything comes together.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Lead Selection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; Daily at 2 AM&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Query:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch up to 5 leads with no &lt;code&gt;sent_date&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Batching:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process leads one by one for quality&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. AI Copywriting (The Personalization Agent)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Context Injection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prospect name &amp;amp; title&lt;/li&gt;
&lt;li&gt;Deep company research&lt;/li&gt;
&lt;li&gt;Product knowledge (via Pinecone)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Prompt Instructions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;150–200 words&lt;/li&gt;
&lt;li&gt;Professional, friendly tone&lt;/li&gt;
&lt;li&gt;Written as the CEO&lt;/li&gt;
&lt;li&gt;References:&lt;/li&gt;
&lt;li&gt;Specific company news&lt;/li&gt;
&lt;li&gt;Industry challenges&lt;/li&gt;
&lt;li&gt;Relevant product features&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;No “Hope this email finds you well.”&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Automated Sending (Gmail)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Parser:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensures clean JSON:&lt;/li&gt;
&lt;li&gt;Subject&lt;/li&gt;
&lt;li&gt;HTML body&lt;/li&gt;
&lt;li&gt;CTA&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Gmail Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sends email directly from your account&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Closing the Loop
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Database Update:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save &lt;code&gt;sent_date&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Store full &lt;code&gt;email_content&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No duplicate outreach&lt;/li&gt;
&lt;li&gt;Full audit trail for sales&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  The End-to-End Result
&lt;/h2&gt;

&lt;p&gt;You’ve built a &lt;strong&gt;fully autonomous sales department&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workflow 1:&lt;/strong&gt; Syncs product knowledge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow 2:&lt;/strong&gt; Finds companies that need it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow 3:&lt;/strong&gt; Identifies decision-makers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow 4:&lt;/strong&gt; Sends personalized outreach emails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All driven by context.&lt;br&gt;
All running on autopilot.&lt;/p&gt;

&lt;p&gt;Sales, but make it intelligent.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>programming</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Setup n8n for Free.</title>
      <dc:creator>Mushood Hanif</dc:creator>
      <pubDate>Tue, 22 Jul 2025 19:49:52 +0000</pubDate>
      <link>https://dev.to/mushood_hanif/how-to-setup-n8n-for-free-4ome</link>
      <guid>https://dev.to/mushood_hanif/how-to-setup-n8n-for-free-4ome</guid>
      <description>&lt;p&gt;This article is to serve as a guide to help the reader setup n8n for free with all the features unlocked. This article will provide a &lt;code&gt;step-by-step&lt;/code&gt; guide on how to setup your n8n from the start to the end.&lt;/p&gt;

&lt;h1&gt;
  
  
  Table of Contents
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Prerequisites

&lt;ul&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Deployment&lt;/li&gt;

&lt;li&gt;Usage&lt;/li&gt;

&lt;li&gt;Caveats&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;n8n is a &lt;code&gt;no-code&lt;/code&gt; automation creation platform that helps people develop workflow automations for anything they can imagine and any scenario. n8n can be used in 2 ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purchase it directly on the website:&lt;/strong&gt; n8n can be purchased directly from &lt;a href="http://n8n.io" rel="noopener noreferrer"&gt;&lt;code&gt;n8n.io&lt;/code&gt;&lt;/a&gt; and you can unlock all of their features and use it completely in all it’s glory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-host your own n8n image:&lt;/strong&gt; n8n can be &lt;code&gt;self-hosted&lt;/code&gt; on your personal servers and it will provide all of the features unlocked and for free. There are no drawbacks to this method and this can be upgraded if required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article will be a step-by-step guide to self-hosting your own n8n service using already existing, state-of-the-art, free software online.&lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;To start, we need to have 2 things in our inventory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Self-hosted n8n services require a database to be connected to it for storing all your workflows, credentials and information. We will employ &lt;a href="http://neon.tech" rel="noopener noreferrer"&gt;&lt;code&gt;neon.tech&lt;/code&gt;&lt;/a&gt; as our database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend Deployment Service:&lt;/strong&gt; The way we will self-host our own n8n service is to utilize the open-source and free n8n docker image provided by &lt;a href="http://n8n.io" rel="noopener noreferrer"&gt;&lt;code&gt;n8n.io&lt;/code&gt;&lt;/a&gt; themselves. This docker image will be hosted on &lt;a href="http://render.com" rel="noopener noreferrer"&gt;&lt;code&gt;render.com&lt;/code&gt;&lt;/a&gt; which is a free backend deployment service that allows for free deployment of docker images as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;p&gt;To setup or free database, we:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need to visit &lt;a href="http://neon.tech" rel="noopener noreferrer"&gt;&lt;code&gt;neon.tech&lt;/code&gt;&lt;/a&gt; and create an account. Neon allows the creation of 10 databases in their free tier. Quite generous.&lt;/li&gt;
&lt;li&gt;After the creation of the account, we need to create a database. Go to your dashboard and click the &lt;code&gt;New Project&lt;/code&gt; button.&lt;/li&gt;
&lt;li&gt;Provide your desired database name, select the &lt;code&gt;PostgreSQL&lt;/code&gt; version as 17 or whatever the latest version shows up at your side. Select the service provider as &lt;code&gt;AWS&lt;/code&gt; or &lt;code&gt;Azure&lt;/code&gt;. Select the server location, make sure you select a place that is closer to you.&lt;/li&gt;
&lt;li&gt;Submit and you’ll be greeted with the dashboard of the new database you just created. Now all you need to do is to click the &lt;code&gt;Connect&lt;/code&gt; button and copy the &lt;code&gt;database_url&lt;/code&gt;. It should be something like this: &lt;code&gt;postgresql://neondb_owner:npg_ijsRhYk14rpX@ep-silent-math-aeaiq51s-pooler.c-2.us-east-2.aws.neon.tech/neondb?sslmode=require&amp;amp;channel_binding=require&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Neon database URL is made up of the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DB_USER: &lt;code&gt;neondb_owner&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;DB_USER_PASSWORD: &lt;code&gt;npg_ijsRhYk14rpX&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;DB_HOST: &lt;code&gt;ep-silent-math-aeaiq51s-pooler.c-2.us-east-2.aws.neon.tech&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;DB_NAME: &lt;code&gt;neondb&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;DB_PORT: 5432 and the Port that Neon DB uses by default is &lt;code&gt;5432&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information will come in handy in the following steps.&lt;/p&gt;

&lt;p&gt;Instruction Video: &lt;a href="https://drive.google.com/file/d/1AsAIm1jTSnSLzwpIxkgrLzMRaKQzS0Ye/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1AsAIm1jTSnSLzwpIxkgrLzMRaKQzS0Ye/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Deployment
&lt;/h1&gt;

&lt;p&gt;For deployment, we need to setup &lt;a href="http://render.com" rel="noopener noreferrer"&gt;&lt;code&gt;render.com&lt;/code&gt;&lt;/a&gt; for free service deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="http://render.com" rel="noopener noreferrer"&gt;&lt;code&gt;render.com&lt;/code&gt;&lt;/a&gt; and create an account.&lt;/li&gt;
&lt;li&gt;After the creation of the account, collect the following information in a &lt;code&gt;.txt&lt;/code&gt; file:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_DATABASE&lt;/code&gt;=neondb

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_HOST&lt;/code&gt;=ep-polished-thunder-aejy3eqg-pooler.c-2.us-east-2.aws.neon.tech

&lt;ul&gt;
&lt;li&gt;You get this from your &lt;code&gt;database_url&lt;/code&gt; copied from &lt;code&gt;neon&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_PASSWORD&lt;/code&gt;=npg_KJtpmv6X9Skw

&lt;ul&gt;
&lt;li&gt;You get this from your &lt;code&gt;database_url&lt;/code&gt; copied from &lt;code&gt;neon&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_PORT&lt;/code&gt;=5432

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_SSL&lt;/code&gt;=true

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_SSL_CA_FILE&lt;/code&gt;=/etc/ssl/certs/ca-certificates.crt

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED&lt;/code&gt;=true

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_POSTGRESDB_USER&lt;/code&gt;=neondb_owner

&lt;ul&gt;
&lt;li&gt;You get this from your &lt;code&gt;database_url&lt;/code&gt; copied from &lt;code&gt;neon&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;DB_TYPE&lt;/code&gt;=postgresdb

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;N8N_ENCRYPTION_KEY&lt;/code&gt;=62kUtfcV3+R7xk9P5GpQPFT3q9nmTQKxO4p7VXL4de/HeW/Hm62il4H13tnMw6Zd

&lt;ul&gt;
&lt;li&gt;This is a random string used for encryption. It can be anything.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS&lt;/code&gt;=true

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;N8N_RUNNERS_ENABLED&lt;/code&gt;=true

&lt;ul&gt;
&lt;li&gt;This value remains the same. Use it as is.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;WEBHOOK_URL&lt;/code&gt;=&lt;a href="https://n8n-hdw9.onrender.com/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://n8n-hdw9.onrender.com/" rel="noopener noreferrer"&gt;https://n8n-hdw9.onrender.com/&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;You get this after the first successful deployment on &lt;code&gt;render.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;Once all the values above have been collected, It’s time to deploy your n8n service.&lt;/li&gt;

&lt;li&gt;Go to your Dashboard on &lt;a href="http://render.com" rel="noopener noreferrer"&gt;&lt;code&gt;render.com&lt;/code&gt;&lt;/a&gt; and click on the &lt;code&gt;Add New&lt;/code&gt; button, then select &lt;code&gt;Web Service&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;You will be prompted with a few options, select the &lt;code&gt;Existing Image&lt;/code&gt; option.&lt;/li&gt;

&lt;li&gt;In the Input field below, enter &lt;a href="http://docker.io/n8nio/n8n" rel="noopener noreferrer"&gt;&lt;code&gt;docker.io/n8nio/n8n&lt;/code&gt;&lt;/a&gt; and click on &lt;code&gt;Connect&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Once the connection is successful, scroll to the &lt;code&gt;Instance Type&lt;/code&gt; section and select the &lt;code&gt;Free&lt;/code&gt; option.&lt;/li&gt;

&lt;li&gt;Then scroll down to the &lt;code&gt;Environment Variables&lt;/code&gt; section, then copy and paste all the values you collected previously in a &lt;code&gt;.txt&lt;/code&gt; file except for the &lt;code&gt;WEBHOOK_URL&lt;/code&gt; value. We will add this after the deployment is successful.&lt;/li&gt;

&lt;li&gt;Then click on &lt;code&gt;Deploy Service&lt;/code&gt; .&lt;/li&gt;

&lt;li&gt;Once, the service is deployed, open your newly deployed instance, and copy the &lt;code&gt;URL&lt;/code&gt; that &lt;a href="http://render.com" rel="noopener noreferrer"&gt;&lt;code&gt;render.com&lt;/code&gt;&lt;/a&gt; assigned to your instance.&lt;/li&gt;

&lt;li&gt;The find the &lt;code&gt;Environment&lt;/code&gt; option in the sidebar and click on it.&lt;/li&gt;

&lt;li&gt;Find the &lt;code&gt;Environment Variables&lt;/code&gt; section and click on the &lt;code&gt;Edit&lt;/code&gt; button. Add a new variable and add &lt;code&gt;WEBHOOK_URL=&amp;lt;the-copied-url-of-your-newly-deployed-service&amp;gt;&lt;/code&gt; to it and save. This will start the redeployment of your service.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Instruction Video: &lt;a href="https://drive.google.com/file/d/1uztybutDLOlHYVhU2JbIkGguJz-hAPup/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1uztybutDLOlHYVhU2JbIkGguJz-hAPup/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;

&lt;p&gt;Congratulations, you now have your very own, totally free n8n service deployed and ready to use. Now we need to set it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You remember the URL you copied at the end for the &lt;code&gt;WEBHOOK_URL&lt;/code&gt; value, copy that URL, paste it in your browser and enter. This will open your n8n instance.&lt;/li&gt;
&lt;li&gt;When you open your instance, it will ask for your account details, provide those details and submit.&lt;/li&gt;
&lt;li&gt;This will take you to your n8n dashboard. Once you reach the dashboard, you’ll be able to see an onboarding form. Don’t skip this form. Fill it and submit it.&lt;/li&gt;
&lt;li&gt;Once submitted, you’ll see that n8n will prompt you to enter your email to receive a license key that grants you all the paid and premium features for free. Enter your email and submit.&lt;/li&gt;
&lt;li&gt;You’ll receive an email shortly from n8n. Open that email and you’ll find the license key. Copy that license key and go back to your n8n instance.&lt;/li&gt;
&lt;li&gt;Find your account settings in the bottom of the sidebar in your n8n dashboard. This will open up a &lt;code&gt;Usage and plan&lt;/code&gt; page.&lt;/li&gt;
&lt;li&gt;Click on &lt;code&gt;Enter activation key&lt;/code&gt; , paste your activation key and press &lt;code&gt;Activate&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You now have a completely free, fully premium n8n service of your own. Happy workflowing!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instruction Video: &lt;a href="https://drive.google.com/file/d/1Bd4AS-n3lbr-erz1I2UtERQ7sz0no4Xz/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1Bd4AS-n3lbr-erz1I2UtERQ7sz0no4Xz/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Caveats
&lt;/h1&gt;

&lt;p&gt;Since the deployment of the service is done on a free server, inactive time will spool down the server on which your n8n service is deployed. When you re-open your n8n service after a time of inactivity, you will face some problems opening your n8n service again. Be patient and try a few times and it will open up.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>selfhosting</category>
    </item>
    <item>
      <title>Accelerating Full‑Stack Development with React Kit</title>
      <dc:creator>Mushood Hanif</dc:creator>
      <pubDate>Sat, 28 Jun 2025 21:25:43 +0000</pubDate>
      <link>https://dev.to/mushood_hanif/accelerating-full-stack-development-with-react-kit-56om</link>
      <guid>https://dev.to/mushood_hanif/accelerating-full-stack-development-with-react-kit-56om</guid>
      <description>&lt;p&gt;Building a scalable, maintainable application often means juggling multiple repositories, ensuring consistency across front- and back‑end code, and wiring up complex toolchains. React Kit streamlines this process by bundling a modern React frontend and an asynchronous Python FastAPI backend into a single, type‑safe monorepo. Whether you’re prototyping an MVP or laying the groundwork for a production‑grade platform, React Kit gets you up and running in minutes — with best practices baked in.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/DivineDemon/react-kit" rel="noopener noreferrer"&gt;&lt;strong&gt;Explore the repo on GitHub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Monorepo?
&lt;/h2&gt;

&lt;p&gt;Splitting frontend and backend into separate repos can soon become an organizational headache:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Duplicated setup&lt;/strong&gt;: Separate linting, formatting, and CI configurations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync challenges&lt;/strong&gt;: API changes on the backend may break frontend code if types drift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding friction&lt;/strong&gt;: New team members must clone and configure multiple projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React Kit solves this by colocating code under a single roof, sharing configuration, and enforcing consistent tooling across the stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features at a Glance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Type‑Safe Full Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: FastAPI + Pydantic v2 ensures strict request/response validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React + TypeScript with end‑to‑end type safety.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Generation&lt;/strong&gt;: Optional tools like &lt;code&gt;@rtk-query/codegen-openapi&lt;/code&gt; can generate TS types directly from your FastAPI OpenAPI schema, eliminating type drift.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Modern Frontend Tooling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; for lightning‑fast builds and hot reload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TanStack Router&lt;/strong&gt; for file‑based, zero‑config routing with nested layouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redux Toolkit &amp;amp; RTK Query&lt;/strong&gt; for intuitive state management and data fetching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for utility‑first styling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Async‑First Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; powers auto‑generated OpenAPI docs (Swagger at /docs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLAlchemy&lt;/strong&gt; with async support (via asyncpg) for high‑throughput database interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seed Data&lt;/strong&gt;: On startup, the backend seeds predefined data from constants/seed_data.json if tables are empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Robust Tooling &amp;amp; Automation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Husky&lt;/strong&gt; Git Hooks enforce linting and formatting at every commit and can auto‑run migrations or dependency installs on merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ruff&lt;/strong&gt; for Python linting, Black for formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biome&lt;/strong&gt; on the frontend for linting and formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inside the Monorepo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;react-kit/
├── backend/                # FastAPI backend
│   ├── app/                # Core code: routers, models, schemas
│   ├── requirements.txt    # Python deps
│   └── .env                # Environment variables
├── frontend/               # React + TypeScript
│   ├── src/                # Routes, store, assets
│   ├── package.json        # JS deps &amp;amp; scripts
│   └── vite.config.ts      # Build config
└── .husky/                 # Git hooks (pre‑commit, post‑merge)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure keeps concerns neatly separated while sharing top‑level scripts and configuration files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quickstart Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Clone and Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/DivineDemon/react-kit.git
cd react-kit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Backend Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env    # configure DATABASE_URL, JWT_SECRET_KEY
uvicorn app.main:app --reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Frontend Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ../frontend
pnpm install
cp .env.example .env    # set VITE_BASE_API_URL
pnpm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within moments, you’ll have both servers running with hot reload enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development Workflow &amp;amp; Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coding&lt;/strong&gt;: Work inside /frontend or /backend; file‑based routing and modular FastAPI routers make feature addition intuitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lint &amp;amp; Format&lt;/strong&gt;: Pre‑commit hooks automatically run Ruff/Black and ESLint/Prettier on staged changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Updates&lt;/strong&gt;: After modifying Pydantic schemas, regenerate TS types via &lt;code&gt;@rtk-query/codegen-openapi&lt;/code&gt; to keep frontend in sync.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Migrations&lt;/strong&gt;: While not built‑in, you can augment React Kit with Alembic for versioned migrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This workflow minimizes manual steps, letting you focus on building features rather than maintaining boilerplate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Special Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic API Discovery&lt;/strong&gt;: All Python modules under app/routers/ are auto‑included in your FastAPI app—no manual imports needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot‑Reload Everywhere&lt;/strong&gt;: Both &lt;code&gt;uvicorn&lt;/code&gt; and Vite watch for file changes, providing instant feedback loops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seeded Demo Data&lt;/strong&gt;: Fresh database? Just start your backend and watch your tables populate automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible&lt;/strong&gt;: Swap Postgres for MySQL by updating your &lt;code&gt;DATABASE_URL&lt;/code&gt;, or replace RTK Query with React Query—React Kit doesn’t lock you in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Should Use React Kit?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Startup Teams&lt;/strong&gt; aiming to ship MVPs rapidly with minimal ops overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full‑Stack Developers&lt;/strong&gt; who value type safety and end‑to‑end consistency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Managers&lt;/strong&gt; looking for a reproducible boilerplate to onboard new engineers.&lt;/li&gt;
&lt;li&gt;Even &lt;strong&gt;seasoned teams&lt;/strong&gt; can benefit by using React Kit as a template for best‑in‑class tooling and workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps &amp;amp; Contribution
&lt;/h2&gt;

&lt;p&gt;While React Kit comes pre‑wired for most use cases, you can easily extend it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;GraphQL&lt;/strong&gt; by layering Ariadne or Strawberry on top of FastAPI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate CI/CD pipelines&lt;/strong&gt; (GitHub Actions templates are a natural fit).&lt;/li&gt;
&lt;li&gt;Build a mobile companion using &lt;strong&gt;React Native&lt;/strong&gt; in the same monorepo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributions are welcome&lt;/strong&gt; — simply fork the repo, implement your enhancements, and submit a pull request. Check out the FAQ and Contributing sections for more details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;React Kit offers a compelling foundation for modern web applications, uniting a type‑safe Python backend and a high‑performance TypeScript frontend under one roof. With automated tooling, robust defaults, and an emphasis on developer experience, it’s an ideal starting point for projects of any scale. Clone the repo today and start building your next full‑stack app with confidence.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/DivineDemon/react-kit" rel="noopener noreferrer"&gt;github.com/DivineDemon/react‑kit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>monorepo</category>
      <category>python</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
