QuoteForge Local
A private, local-first AI proposal and quote builder for freelancers.
QuoteForge Local helps freelancers turn a client project brief into a professional proposal draft while keeping the client's information and AI processing on their own machine.
Describe the project, enter your hourly rate, estimated hours, and additional expenses. QuoteForge then calculates the project estimate using ordinary application code and uses the open-weight Llama 3.2 model through Ollama to draft the proposal.
Built for the Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle.
✨ What It Does
QuoteForge Local combines deterministic pricing with local AI assistance:
- 📝 AI Proposal Drafting — Generate a proposal from a project brief.
- 💰 Deterministic Quote Calculation — Calculates:
Hourly Rate × Estimated Hours + Additional Expenses
- 🔒 Local-First AI — The project brief is processed through a local Ollama service instead of a hosted AI API.
- 🤖 Open-Weight AI — Uses Llama 3.2 through Ollama.
- 🚫 No API Keys Required — No OpenAI, Anthropic, or other hosted AI account is required.
- 📋 Copy-Ready Output — Review and copy the generated proposal directly from the browser.
- 🧠 Controlled AI Scope — The model is instructed not to invent credentials, deliverables, deadlines, guarantees, or other unsupported claims.
- 💾 No Database — Generated content stays in the browser until the user chooses to copy it.
- 📊 No Analytics — No tracking or third-party analytics are included.
- 📤 No Automatic Sending — QuoteForge does not send proposals directly to clients.
🔐 Why Local-First?
Client briefs can contain sensitive business information.
Instead of sending that information to a third-party AI API, QuoteForge keeps the AI workflow local:
Browser → Local Python API → Local Ollama → Llama 3.2
The application is designed so that the project brief is sent only to the locally running Ollama service.
The first Docker Compose startup requires internet access to download the Docker runtime components and the selected Ollama model. After the model has been downloaded, the model is reused from the local Docker volume.
🧮 AI Does Not Control the Price
One important design decision is separating language generation from financial calculation.
The AI is responsible for wording the proposal.
The application code is responsible for calculating the quote.
For example:
₹1,000/hour × 20 hours + ₹2,000 expenses = ₹22,000
The model cannot modify this arithmetic because the calculation happens independently in ordinary application code.
This makes the system more predictable and prevents an AI-generated response from accidentally changing the quoted amount.
🤖 Responsible AI Design
QuoteForge deliberately gives the language model a narrow responsibility.
The model generates proposal wording, but it does not:
- Decide whether a project is profitable
- Determine the freelancer's pricing
- Create binding contract terms
- Invent previous client experience
- Invent qualifications or credentials
- Promise unsupported results
- Automatically send proposals to clients
Missing information should be identified for the freelancer to confirm rather than being fabricated.
AI-generated content should still be reviewed by the freelancer before being shared with a client.
🛠️ Tech Stack
- Python 3.12 — Standard library
- HTML / CSS / JavaScript — Frontend
- Ollama — Local AI runtime
- Llama 3.2 — Open-weight language model
- Docker Compose — Local deployment
- MIT License
The Python backend intentionally uses the standard library, including modules such as:
http.serverurllib
This keeps the project lightweight and reduces unnecessary dependencies.
🚀 Run Locally
Requirements
You need:
- Docker Desktop
- Docker Compose
- Sufficient disk space for the Ollama image and model
Start QuoteForge
docker compose up --build
The first startup downloads the required Ollama model.
Once the services are ready, open:
http://127.0.0.1:8000
Stop the application with:
Ctrl+C
Later launches can reuse the locally stored model through the Docker volume.
⚙️ Changing the AI Model
The default setup uses:
llama3.2
The OLLAMA_MODEL configuration can be changed to another model available through Ollama, provided the machine has enough resources to run it.
🏗️ Architecture
┌──────────────────┐
│ Browser │
│ HTML/CSS/JS │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Python API │
│ Local Adapter │
└───────┬──────────┘
│
┌─────────┴─────────┐
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Quote Logic │ │ Ollama │
│ Rate × Hours │ │ Llama 3.2 │
│ + Expenses │ │ Local Model │
└──────────────┘ └──────────────┘
The quote calculation and AI generation remain separate by design.
🎯 The Problem
Freelancers often need to create proposals quickly after receiving a client inquiry.
That process can involve:
- Understanding the client's brief
- Structuring the proposed work
- Writing professional proposal language
- Calculating the estimated price
- Reviewing the proposal for unsupported claims
- Sending it to the client
Many AI proposal tools require sending client information to a hosted AI service.
QuoteForge explores a different approach:
Can AI help freelancers write proposals without requiring their client data to leave their machine?
💡 The Solution
QuoteForge Local combines a simple deterministic quote calculator with a locally running open-weight language model.
The result is a small, transparent workflow:
Client Brief → Local AI Draft → Deterministic Quote → Human Review → Copy
The freelancer remains in control of the final proposal.
🌱 Why This Fits "Side Hustle"
QuoteForge is designed around a practical freelancer workflow rather than AI for AI's sake.
A freelancer can use it to quickly turn an initial project description into a structured proposal while maintaining control over:
- Pricing
- Scope
- Client information
- Final wording
- When and where the proposal is sent
The goal is not to replace the freelancer.
The goal is to remove repetitive proposal-writing work while keeping important decisions under human control.
⚠️ Limitations
QuoteForge is intentionally small and focused.
It currently does not:
- Store client accounts
- Provide a CRM
- Send emails
- Sign contracts
- Process payments
- Determine whether a project is financially profitable
- Guarantee the accuracy of AI-generated text
- Provide legal or financial advice
The generated proposal should always be reviewed before being shared with a client.
🔮 Future Ideas
Possible future improvements include:
- Multiple proposal templates
- Export to PDF
- Proposal version history stored locally
- More detailed project breakdowns
- Local proposal history
- Additional Ollama model presets
- Custom freelancer profiles stored locally
- Optional local document import
- Improved accessibility
- Automated proposal quality checks
These features would be considered carefully to preserve the project's local-first philosophy.
🌍 Privacy Philosophy
QuoteForge follows a simple principle:
Your client data should not need to become someone else's AI training input just to help you write a proposal.
There are no third-party fonts, analytics services, hosted AI APIs, or accounts required by the application itself.
The initial Docker setup does require network access to obtain the container image and Ollama model. Once running locally, proposal generation uses the local Ollama service.
📜 License
QuoteForge Local is released under the MIT License.
See LICENSE for details.
🏆 Hacktoberfest
Built as a submission for:
Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle
QuoteForge demonstrates how open-weight AI can be integrated into a realistic freelance workflow while keeping pricing deterministic and AI processing local.
Repository: shikharahirwar489-ui/quoteforge-local
Project: QuoteForge Local
Focus: Local AI • Freelancing • Privacy • Open-Weight Models • Responsible AI
Top comments (0)