<?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: Shivam Mishra</title>
    <description>The latest articles on DEV Community by Shivam Mishra (@shivam_mishra_f0473331d32).</description>
    <link>https://dev.to/shivam_mishra_f0473331d32</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4193263%2F953fe519-0259-4ca8-90ee-4db6db4f24fb.png</url>
      <title>DEV Community: Shivam Mishra</title>
      <link>https://dev.to/shivam_mishra_f0473331d32</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivam_mishra_f0473331d32"/>
    <language>en</language>
    <item>
      <title>BidPilot: Your AI Proposal Writer That Runs on Your Laptop, Not Someone Else's Server</title>
      <dc:creator>Shivam Mishra</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:28:53 +0000</pubDate>
      <link>https://dev.to/shivam_mishra_f0473331d32/bidpilot-your-ai-proposal-writer-that-runs-on-your-laptop-not-someone-elses-server-jip</link>
      <guid>https://dev.to/shivam_mishra_f0473331d32/bidpilot-your-ai-proposal-writer-that-runs-on-your-laptop-not-someone-elses-server-jip</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Last Tuesday, I timed myself writing a proposal for a Django REST API gig on Upwork.&lt;br&gt;
&lt;strong&gt;37 minutes.&lt;/strong&gt;&lt;br&gt;
Thirty-seven minutes to read the job description, research the client, draft something personalized, proofread it, second-guess my tone, and finally hit send. And that was a &lt;em&gt;good&lt;/em&gt; day — some proposals take an hour when the scope is complex.&lt;br&gt;
I apply to roughly 15 jobs a week. That's &lt;strong&gt;9+ hours per week&lt;/strong&gt; just writing proposals. Not coding. Not designing. Not doing any of the work I'd actually get paid for. Just… bidding.&lt;br&gt;
So I built &lt;strong&gt;BidPilot&lt;/strong&gt;.&lt;br&gt;
BidPilot is an AI-powered proposal writer purpose-built for freelancers. You paste a job posting from Upwork, Fiverr, or any freelance platform, and it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Analyzes the job&lt;/strong&gt; — extracts requirements, identifies the client's pain points, detects budget signals, and reads tone cues (formal? casual? urgent?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generates a personalized proposal&lt;/strong&gt; — not a generic template, but a response that directly addresses what &lt;em&gt;this specific client&lt;/em&gt; needs to hear&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scores the proposal&lt;/strong&gt; — rates it on relevance, tone, completeness, and persuasion, then suggests concrete improvements
The entire pipeline runs &lt;strong&gt;100% locally on your laptop&lt;/strong&gt; using Google's Gemma model. No cloud APIs. No internet required (after the one-time model download). No subscription fees.
### The Side Hustle Math
Here's why this could charge $9/month and still be a no-brainer:&lt;/li&gt;
&lt;li&gt;A freelancer earning $50/hr spends ~30 min per proposal = &lt;strong&gt;$25 of time per proposal&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;At 15 proposals/week, that's &lt;strong&gt;$375/week&lt;/strong&gt; in time spent just bidding&lt;/li&gt;
&lt;li&gt;BidPilot cuts proposal time to ~30 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROI: $375/week saved for $9/month&lt;/strong&gt; — that's a 166x return
But I'm not charging anything. BidPilot is open source and runs on your own hardware. The "business model" is that freelancers keep more of their time — and their data stays on their machine.
## Demo
🔗 &lt;strong&gt;&lt;a href="https://github.com/shivam-mishra-music/BidPilot" rel="noopener noreferrer"&gt;GitHub Repository — BidPilot&lt;/a&gt;&lt;/strong&gt;
BidPilot runs locally, so the best demo is running it yourself. It takes under 5 minutes:&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
# 1. Install Ollama (one-time)
curl -fsSL https://ollama.com/install.sh | sh
# 2. Pull Gemma (one-time, ~2.5 GB)
ollama pull gemma3:4b
# 3. Clone and run
git clone https://github.com/shivam-mishra-music/BidPilot.git
cd BidPilot
pip install -r requirements.txt
python app.py

Open http://localhost:7860 and paste any job posting. That's it.

Don't have Ollama installed? Run python app.py --demo to explore the full UI with pre-generated sample outputs — no model download needed.

Code

&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/shivam-mishra-music" rel="noopener noreferrer"&gt;
        shivam-mishra-music
      &lt;/a&gt; / &lt;a href="https://github.com/shivam-mishra-music/BidPilot" rel="noopener noreferrer"&gt;
        BidPilot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt; ____  _     _ ____  _ _       _
| __ )(_) __| |  _ \(_) | ___ | |_
|  _ \| |/ _` | |_) | | |/ _ \| __|
| |_) | | (_| |  __/| | | (_) | |_
|____/|_|\__,_|_|   |_|_|\___/ \__|
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;BidPilot — AI-Powered Proposal Writer for Freelancers&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Write winning freelance proposals in seconds. 100% local. 100% private. 100% free.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/bf139b4e7209c9a19d178ba34499ffd9a95e404d13327eaf7bde6376adf78008/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c75653f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/bf139b4e7209c9a19d178ba34499ffd9a95e404d13327eaf7bde6376adf78008/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c75653f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python 3.10+"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e" alt="License MIT"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/41f305859386a7dccbf07947d99196d54bde753bc83baeb8f01cd9fdc7d3c16d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f776572656425323062792d47656d6d612d6f72616e67653f6c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/41f305859386a7dccbf07947d99196d54bde753bc83baeb8f01cd9fdc7d3c16d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f776572656425323062792d47656d6d612d6f72616e67653f6c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465" alt="Powered by Gemma"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a2b318140d58f56862ecd5581d006b961f44164e891dbd5fd6834b93f824756f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d626c756576696f6c6574"&gt;&lt;img src="https://camo.githubusercontent.com/a2b318140d58f56862ecd5581d006b961f44164e891dbd5fd6834b93f824756f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d626c756576696f6c6574" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/80510b5b5ca9a374327a1f08b7aae723224a0acd1c7946ba86ad417810111960/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c74253230776974682d4f6c6c616d612d626c61636b"&gt;&lt;img src="https://camo.githubusercontent.com/80510b5b5ca9a374327a1f08b7aae723224a0acd1c7946ba86ad417810111960/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4275696c74253230776974682d4f6c6c616d612d626c61636b" alt="Built with Ollama"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧩 The Problem&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Every freelancer knows the grind: you find a promising job on Upwork or Fiverr, and then spend &lt;strong&gt;30+ minutes&lt;/strong&gt; crafting a proposal tailored to that specific posting. Multiply that by 10–20 applications a week and you're burning hours just &lt;em&gt;bidding&lt;/em&gt; — not even doing billable work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BidPilot cuts that to 30 seconds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paste a job posting, and BidPilot analyzes the client's requirements, identifies their pain points, and generates a personalized, professional proposal — all running locally on your laptop with zero API…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/shivam-mishra-music/BidPilot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;

&lt;p&gt;How I Built It&lt;br&gt;
The Core Insight&lt;/p&gt;

&lt;p&gt;Most "AI proposal writers" are thin wrappers around ChatGPT with a system prompt. They produce generic, obviously-AI-generated text that clients can spot from a mile away. I wanted something different: a pipeline that understands what makes a proposal win.&lt;/p&gt;

&lt;p&gt;After analyzing 200+ of my own successful proposals, I noticed a pattern. Winning proposals do three things:&lt;/p&gt;

&lt;p&gt;Mirror the client's language — if they say "scalable backend," you say "scalable backend," not "robust server infrastructure"&lt;/p&gt;

&lt;p&gt;Name the pain — show you understand why they're hiring, not just what they need built&lt;/p&gt;

&lt;p&gt;Reduce perceived risk — mention relevant experience, suggest a first milestone, offer a brief discovery call&lt;/p&gt;

&lt;p&gt;BidPilot's three-stage pipeline is designed around these principles.&lt;/p&gt;

&lt;p&gt;Architecture&lt;br&gt;
Job Posting (raw text)&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
┌─── Stage 1: Job Analysis ───┐&lt;br&gt;
│  Extracts:                   │&lt;br&gt;
│  • Hard requirements         │&lt;br&gt;
│  • Desired skills            │&lt;br&gt;
│  • Client pain points        │&lt;br&gt;
│  • Budget signals            │&lt;br&gt;
│  • Communication tone        │&lt;br&gt;
└──────────────┬───────────────┘&lt;br&gt;
               │ Structured JSON&lt;br&gt;
               ▼&lt;br&gt;
┌─── Stage 2: Proposal Gen ────┐&lt;br&gt;
│  Generates personalized      │&lt;br&gt;
│  proposal using analysis     │&lt;br&gt;
│  context + user profile      │&lt;br&gt;
└──────────────┬───────────────┘&lt;br&gt;
               │ Draft proposal&lt;br&gt;
               ▼&lt;br&gt;
┌─── Stage 3: Quality Score ───┐&lt;br&gt;
│  Rates on 4 dimensions:      │&lt;br&gt;
│  • Relevance (0-10)          │&lt;br&gt;
│  • Tone match (0-10)         │&lt;br&gt;
│  • Completeness (0-10)       │&lt;br&gt;
│  • Persuasion (0-10)         │&lt;br&gt;
│  + Specific suggestions      │&lt;br&gt;
└──────────────────────────────┘&lt;br&gt;
Tech Stack&lt;/p&gt;

&lt;p&gt;Gemma 3 4B via Ollama — The heart of the system. Gemma's instruction-following capability is remarkably good at 4B parameters — small enough to run on a laptop with 8 GB RAM, sharp enough to produce proposals that don't read like a robot wrote them. I tested Gemma 2B (too generic), Gemma 7B (great but slow on consumer hardware), and landed on 4B as the sweet spot.&lt;/p&gt;

&lt;p&gt;Ollama — Makes local model inference trivially easy. One ollama pull and you have a model running with an OpenAI-compatible API. No CUDA setup, no dependency hell, no PhD required.&lt;/p&gt;

&lt;p&gt;Gradio — I wanted a clean web UI that anyone could use — not just developers comfortable with terminals. Gradio gives me a polished interface with about 50 lines of UI code. The tabbed layout separates analysis, generation, and scoring into clear steps.&lt;/p&gt;

&lt;p&gt;Python — Orchestrates the pipeline, handles prompt engineering, and manages the conversation flow between stages. Each stage uses carefully crafted prompts that took dozens of iterations to get right.&lt;/p&gt;

&lt;p&gt;Why Gemma Specifically?&lt;/p&gt;

&lt;p&gt;I tested five open-source models for this project. Here's what I found:&lt;/p&gt;

&lt;p&gt;Model   Proposal Quality    Speed (M2 Mac)  RAM Usage&lt;br&gt;
Gemma 3 4B  ⭐⭐⭐⭐⭐ ~8 sec  ~4 GB&lt;br&gt;
Llama 3.2 3B    ⭐⭐⭐   ~6 sec  ~3.5 GB&lt;br&gt;
Mistral 7B  ⭐⭐⭐⭐    ~15 sec ~6 GB&lt;br&gt;
Phi-3 Mini  ⭐⭐⭐   ~7 sec  ~3.5 GB&lt;br&gt;
Qwen2 7B    ⭐⭐⭐⭐    ~14 sec ~6 GB&lt;/p&gt;

&lt;p&gt;Gemma 3 4B hit the best balance: proposal quality on par with 7B models, but fast enough to feel interactive and light enough to run alongside your IDE and browser. The instruction-tuned variant is particularly good at following the structured output format I need for the analysis stage.&lt;/p&gt;

&lt;p&gt;Why Does Open Innovation Matter?&lt;/p&gt;

&lt;p&gt;I want to make a specific argument here, not a general one. Open-source AI isn't just philosophically nice — for this exact use case, it's the only approach that makes sense. Here's why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privacy Isn't Optional — It's the Whole Point&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When a freelancer writes a proposal, they're working with sensitive information. The job posting might include:&lt;/p&gt;

&lt;p&gt;Client company names under NDA&lt;/p&gt;

&lt;p&gt;Proprietary technical architecture details&lt;/p&gt;

&lt;p&gt;Budget information meant only for applicants&lt;/p&gt;

&lt;p&gt;Project specs that are trade secrets&lt;/p&gt;

&lt;p&gt;Every SaaS proposal tool sends this data to external servers. Most freelancers don't think about it. But if you're writing proposals for enterprise clients — the kind that pay $100+/hr — your clients will think about it. One data breach at a SaaS provider and your client's confidential project details are in the wild.&lt;/p&gt;

&lt;p&gt;With BidPilot, the data never leaves localhost. There's no server to breach because there's no server.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;$0/Month Changes the Economics&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Freelancing is a business with thin margins in the early years. The average Upwork freelancer earns $3,000–5,000/month. When you're in that range, every SaaS subscription matters:&lt;/p&gt;

&lt;p&gt;Jasper AI: $49/month&lt;/p&gt;

&lt;p&gt;Copy.ai: $36/month&lt;/p&gt;

&lt;p&gt;Generic "AI proposal" tools: $15–30/month&lt;/p&gt;

&lt;p&gt;That's &lt;br&gt;
50&lt;br&gt;
–&lt;br&gt;
80&lt;br&gt;
/&lt;br&gt;
𝑚&lt;br&gt;
𝑜&lt;br&gt;
𝑛&lt;br&gt;
𝑡&lt;br&gt;
ℎ&lt;br&gt;
𝑓&lt;br&gt;
𝑜&lt;br&gt;
𝑟&lt;br&gt;
𝑤&lt;br&gt;
𝑟&lt;br&gt;
𝑖&lt;br&gt;
𝑡&lt;br&gt;
𝑖&lt;br&gt;
𝑛&lt;br&gt;
𝑔&lt;br&gt;
𝑡&lt;br&gt;
𝑜&lt;br&gt;
𝑜&lt;br&gt;
𝑙&lt;br&gt;
𝑠&lt;br&gt;
𝑎&lt;br&gt;
𝑙&lt;br&gt;
𝑜&lt;br&gt;
𝑛&lt;br&gt;
𝑒&lt;br&gt;
.&lt;br&gt;
𝑂&lt;br&gt;
𝑣&lt;br&gt;
𝑒&lt;br&gt;
𝑟&lt;br&gt;
𝑎&lt;br&gt;
𝑦&lt;br&gt;
𝑒&lt;br&gt;
𝑎&lt;br&gt;
𝑟&lt;br&gt;
,&lt;br&gt;
𝑖&lt;br&gt;
𝑡&lt;br&gt;
′&lt;br&gt;
𝑠&lt;br&gt;
50–80/monthforwritingtoolsalone.Overayear,it&lt;br&gt;
′&lt;br&gt;
s600–960 — roughly a full week's income for many freelancers.&lt;/p&gt;

&lt;p&gt;BidPilot costs the electricity to run your laptop. That's it. Open-source models mean the most powerful part of the stack — the AI itself — is free forever. Not "free tier with limits." Not "free trial for 14 days." Free.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your Proposals Should Make You Sound Like You&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the most underrated advantage: with an open-source model running locally, you can fine-tune Gemma on your own winning proposals. Collect the proposals that actually landed you gigs, create a small training set, and run a LoRA fine-tune. Now BidPilot doesn't just write generic proposals — it writes proposals in your voice, with your style, emphasizing the things your successful bids have in common.&lt;/p&gt;

&lt;p&gt;No SaaS tool lets you do that. They give you the same model everyone else gets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No Vendor Lock-In, No Rug Pulls&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open-source AI means you're never one pricing change away from losing your tool. When Jasper tripled their prices in 2023, users had no recourse. When OpenAI deprecated models, applications broke overnight.&lt;/p&gt;

&lt;p&gt;BidPilot's model layer is a single configuration line. Swap Gemma for Llama, Mistral, or Qwen in seconds. If a better model drops tomorrow, you upgrade in one command: ollama pull &amp;lt;new-model&amp;gt;. Your workflow, your data, and your fine-tuned weights all stay exactly where they are — on your machine.&lt;/p&gt;

&lt;p&gt;Open innovation isn't just about making code available. It's about giving people real ownership of tools that affect their livelihood. For freelancers, a proposal writer isn't a toy — it's a business tool that directly impacts income. That tool should be private, free, customizable, and permanent. Open-source AI is the only way to deliver all four.&lt;/p&gt;

&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;p&gt;Best Use of Gemma — Gemma 3 4B is the core model powering BidPilot's entire three-stage pipeline (job analysis, proposal generation, quality scoring). Chosen specifically for its instruction-following quality at a size that runs interactively on consumer hardware.&lt;/p&gt;

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

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
