DEV Community

Cover image for QuoteCraft: an offline AI that turns messy client WhatsApps into instant quotations and scopes
Vikram Rautela
Vikram Rautela

Posted on

QuoteCraft: an offline AI that turns messy client WhatsApps into instant quotations and scopes

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

If you do any freelance work, consulting, or run a small service business, you know this exact message. It arrives on WhatsApp or Instagram DM at 10 PM:

"hi vikram! need a landing page for our boutique bakery in dehradun with menu, photo gallery, online order enquiry form connected to whatsapp, and google maps location. we have logo and photos ready. how much will this cost and can we get it before diwali? also need 3 revisions and basic seo."

Clients don't send neat requirement specifications. They send messy, conversational thoughts.

And that puts freelancers in a bad dilemma:

  1. If you delay responding, you lose the client to someone faster.
  2. If you send a quick casual price ("maybe ₹20,000"), you get trapped in endless scope creep — the client later asks for payment gateway integrations, copywriting, and 12 revision rounds that you never agreed to do for free.
  3. If you sit down to write a proper quote, it takes 45 minutes of manual typing to draft deliverables, milestones, payment terms, and boundaries.

Quoting tools like PandaDoc or HoneyBook charge $19 to $49 every single month. For a solo freelancer starting out, that is a huge recurring bill. Worse, pasting confidential client ideas, client phone numbers, and private business budgets into third-party cloud AI APIs can violate client NDAs and privacy.

So I built QuoteCraft: a small, fast local web app that turns messy client WhatsApp messages into an itemized quotation, a scope-of-work, and a ready-to-send WhatsApp reply in about 15 seconds.

It runs 100% on a laptop using a local open-weight model (Llama 3.2 via Ollama). Zero cloud APIs, zero per-token cost, and confidential client details never leave your machine.


Demo

Here is how QuoteCraft handles that real WhatsApp message for a boutique bakery in Dehradun:

QuoteCraft overview: messy WhatsApp message on the left, structured quotation on the right

1. The Itemized Scope of Work

QuoteCraft parses the message and builds a clean deliverables table with realistic timelines and pricing:

Deliverable Estimated Days Estimated Cost (INR)
UI/UX Design & Responsive Layout — Mobile-first modern design matching bakery aesthetic 3 Days ₹ 7,500
Digital Menu & Photo Gallery — Filterable categories with high-res photo showcase 2 Days ₹ 5,000
WhatsApp Order Integration & Maps — Direct one-tap ordering & Google Maps embed 2 Days ₹ 4,500
On-Page SEO & Speed Optimization — Local search optimization & 90+ Lighthouse speed 1 Day ₹ 3,000
Total Estimated Investment 8 Days ₹ 20,000

Every row is interactive and editable. If you want to change a price, adjust days, or add a custom task, you can edit it right in the table, and the total recalculates automatically.

2. The Anti-Scope Creep Shield (What is OUT of Scope)

This is what freelancers usually forget to write, and what costs them money later. QuoteCraft automatically specifies what is not included:

  • ⚠️ Paid domain registration and annual web hosting charges (paid directly by client)
  • ⚠️ Food photography and copywriting for menu item descriptions (provided by client)
  • ⚠️ Payment gateway merchant account registration (direct WhatsApp orders are included)
  • ⚠️ Revisions exceeding 3 review rounds (billed separately at standard hourly rate)

3. One-Click WhatsApp Reply

Freelancers don't want to copy a rigid 5-page PDF into a chat. QuoteCraft generates a polite, friendly WhatsApp message pre-formatted with bold tags (*text*) and emojis:

Hi Anita! 🧁 Thanks so much for reaching out.

I'd love to build the landing page for your bakery in Dehradun! Here is a quick quotation and timeline:

*Scope:*
• Custom mobile-friendly design with your logo & photos
• Interactive menu & photo gallery
• Direct WhatsApp ordering button (customers tap to order)
• Google Maps location & local SEO
• 3 review rounds included

*Timeline:* 8-10 business days (well before Diwali! 🪔)
*Total Investment:* ₹20,000 (40% advance to start)

Does this work for you? If yes, I can share the invoice and get started this Wednesday! 🙌
Enter fullscreen mode Exit fullscreen mode

You hit "Copy WhatsApp Reply", paste it into your chat, and you are done in 30 seconds.

4. Print / Save as PDF

For formal corporate clients who need a paper trail, hitting Print renders an elegant, print-ready quotation sheet with quote reference ID, date, your business header, payment terms, and signature line.


Code

💼 QuoteCraft

Turn messy client WhatsApp messages into professional quotations, scope-of-work, and ready-to-send replies in seconds.

A local, privacy-first AI tool built for freelancers, solo agencies, and small service businesses.

Python Flask Ollama Hacktoberfest 2026 100% Offline No API Keys


🤔 The Problem

Every freelancer, solo developer, designer, photographer, and local business owner knows this pain:

A client sends a rambling, messy message on WhatsApp or Instagram at 10 PM:

"hey bro need website for my bakery in dehradun with online menu, photo gallery, online order enquiry form connected to whatsapp, and google maps location. we have logo ready. how much will this cost and can we get it before diwali? also need 3 revisions and basic seo."

Responding takes 30 to 60 minutes of tedious work:

  1. Translating messy thoughts into clear deliverables
  2. Estimating realistic days and pricing
  3. Setting milestones and advance deposit terms
  4. Setting boundaries against scope creep (so you don't end up doing unpaid extra work!)

Because writing…

The entire app is one Python file (app.py), using only Flask and Python's standard library (urllib, json, re). It requires zero API keys and zero external services.


How I Built It

The stack:

Part What I used
Brain / Extraction & Pricing Llama 3.2 (3B) running locally via Ollama
Web Application Python 3.10 + Flask (single file, lightweight)
Structured Output Strict JSON schema enforced by Ollama's format parameter
UI & Offline Export Clean vanilla HTML5, CSS3 responsive grid, print stylesheet
Local Storage Local quotes.json file for private history log

I built and tested all of it on a normal laptop: Ubuntu, 15 GB RAM, and no GPU.

1. Enforcing Strict JSON Schemas

Smaller open models can sometimes add conversational chatter ("Sure, here is your quotation:") or hallucinate keys. To make the UI 100% reliable, I used Ollama's structured output format:

payload = {
    "model": "llama3.2",
    "messages": [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": user_message}
    ],
    "format": QUOTE_SCHEMA,  # Enforces exact JSON keys
    "options": {"temperature": 0.2}
}
Enter fullscreen mode Exit fullscreen mode

Setting temperature: 0.2 keeps the pricing estimates and deliverable breakdown consistent and grounded.

2. Protecting Against Scope Creep by Design

In the system prompt, I made "Out of Scope" a mandatory output field. If the client asked for a website, Llama 3.2 proactively flags domain hosting, photo shoots, and extra revisions as out of scope. That single design decision transforms the app from a generic text generator into a real business tool.

3. Problems I Hit (and What I Learned):

  • Ollama CPU cold starts: When Llama 3.2 first loads from disk into RAM on a CPU laptop, it took ~35 seconds. I set timeout=300 on the HTTP request so it never aborts prematurely during the first load. Once in memory, subsequent queries run much faster (~15-20s).
  • Markdown fence leaks: Even with format: json, some model variations wrap output in ```json ... ``` . I added a small regex cleaner to strip markdown code blocks before calling json.loads().
  • Zero-cost, responsive UI: Instead of loading heavy CSS frameworks from external CDNs (which fail when you have no internet), I wrote a clean vanilla CSS stylesheet with a responsive grid and a custom @media print style. The entire app loads instantly even with airplane mode turned on.

Why Does Open Innovation Matter?

For QuoteCraft, open-source AI is not just a nice feature — it is the only reason this tool makes commercial sense:

  1. Client Confidentiality & Privacy (No NDA Breaches):
    When freelancers quote for startups or local businesses, clients share unreleased product details, secret business ideas, customer figures, and personal phone numbers. Uploading that to third-party cloud AI APIs creates legal and privacy risks. With open weights running locally, not a single byte leaves the freelancer's machine.

  2. $0.00 Running Cost Makes the Side Hustle Viable:
    Closed quoting platforms charge \$20 to \$50 per month. If a freelancer is just starting out or only bids on 3 projects a month, paying \$300+/year in SaaS fees is painful. Open models like Llama 3.2 cost nothing to run. 1 quote or 1,000 quotes costs \$0.00.

  3. Total Independence from Cloud Pricing & Changes:
    Closed API providers frequently deprecate model versions, hike pricing, or impose rate limits. Open-weight models are permanent assets: they will run on this laptop today, tomorrow, or 5 years from now.

  4. 100% Offline Capability:
    Freelancers frequently work from trains, cafés, or places with spotty internet. Because Llama 3.2 runs locally through Ollama, QuoteCraft works with zero internet connection.


Try It Out

Clone the repo, run python3 app.py, and test it with your own messy client chats:

👉 GitHub Repository: VIKRAM-009/quotecraft


Thanks for reading! If you have ever lost a weekend to client scope creep, give local open-weight AI a shot. 🚀

Top comments (0)