This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
QuoteFlow turns messy jobsite notes (voice or text) into an itemized, region-aware estimate a contractor can send the same evening — materials, labor, equipment, permits, tax, branded PDF, and a copy/SMS/WhatsApp send loop.
Who would pay: solo plumbers, electricians, HVAC techs, and remodelers. They lose jobs when the quote lands late, and they lose evenings writing spreadsheets. Their alternatives are expensive quoting SaaS that wants the whole client list in someone else’s cloud, or a notes app plus hand math. QuoteFlow is the wrench-priced tool: fast bids, professional PDFs, and client addresses that do not need to be pasted into a generic cloud chatbot.
On the Windows desktop / Tauri path, open-weight Gemma runs via Ollama so job notes can stay on the PC. On the hosted demo (weak laptops / judges), Groq serves the same open-weight Gemma family with customer PII redacted before the cloud call.
Demo
| Live app | quoteflow-frontend-qlqc.onrender.com |
| API health | quoteflow-backend-q60x.onrender.com/api/health |
| Repo | github.com/Mavros-Lykos/QuoteFlow |
| Walkthrough | YouTube |
Try it in ~2 minutes: open the live demo → Try it in your browser → finish Welcome (pick India / INR / GST if you like) → New estimate → describe a plumbing job → Create → Send / PDF.
Screenshots
Landing
First-run setup (region-aware)
Voice-first new estimate
Generated estimate + send
Code
Repo: https://github.com/Mavros-Lykos/QuoteFlow
Stack in short:
- Frontend: React + Vite PWA (optional Tauri desktop shell)
- Backend: FastAPI + SQLite (Tiger Data / pgvector when the connection string connects)
- Models: Gemma via Ollama on desktop; Groq Gemma on Render
- Pricing path: TabPFN-style calibration on suggested totals; SerpApi labor grounding when keyed
- Voice: ElevenLabs STT/TTS when keyed; browser speech fallback
How I Built It
- Welcome captures business + region (currency, tax name, units) so the UI, LLM prompts, and PDF stay consistent — e.g. INR + GST 18%.
- Job notes (mic or text) go to the open-weight model, which drafts an itemized BOM and a customer-facing proposal.
- Deterministic layers own money: line math, tax, TabPFN-style win-rate calibration on the suggested total.
- Optional partners enrich without owning the core path: SerpApi for live labor benchmarks, ElevenLabs for voice, Tiger Data hybrid memory (SQLite always; pgvector when
TIGER_DATA_CONNECTION_STRINGconnects). - Render hosts the judge-facing demo so nobody has to install Ollama to try it.
Why Does Open Innovation Matter?
- Privacy is the product for trades. Client names, addresses, and what’s broken inside someone’s home should not be the default paste into a closed chatbot. Local Gemma on desktop keeps that data on the machine after setup; the hosted path redacts PII before Groq.
- Unit economics for a side-hustle tool. A one-person plumbing business will not justify $40/month SaaS for evening quotes. Open weights (local, or cheap hosted open models) keep marginal AI cost low enough that the product can be priced like a tool.
- No lock-in at the worst moment. The estimating path is not tied to one proprietary model. Swap Ollama models on desktop; keep shipping when a vendor changes pricing.
Prize Categories
Each category below is a job QuoteFlow actually does on the live demo or desktop path — not a logo dump.
- Best Use of Gemma — Gemma is the estimator, not a chatbot bolted on the side. Job notes become an itemized BOM and a customer-ready proposal; on desktop that is Ollama + open-weight Gemma on the contractor’s machine, and on the hosted demo the same open-weight family runs via Groq so judges can try it without a GPU. The privacy and “wrench-priced tool” story only works because the core model is open-weight.
- Best Use of Render — Render is the shop floor for this Side Hustle: a public PWA frontend and FastAPI backend so a plumber (or a judge) can finish Welcome → estimate → PDF in a browser. The product is meant to be used at the end of a workday — if it only runs on my laptop, it is a prototype; Render makes it a real try-before-you-buy demo.
- Best Use of TabPFN — Quoting is a tabular decision: win rate vs. margin. After Gemma drafts line items, a TabPFN-style calibration pass nudges the suggested total toward a price that can actually win the job — prediction inside the estimating agent, not a disconnected CSV notebook.
- Best Use of SerpApi — Labor rates drift by ZIP and trade. When keyed, SerpApi grounds those rates in live market search so the estimate is not pure model guesswork; when offline, a regional index keeps the path honest. Fresh web signal feeding the quote, not a generic search widget.
- Best Use of ElevenLabs — Hands are dirty, the phone is in a pocket. ElevenLabs STT/TTS turns “describe the job” into a voice-first loop (with browser speech as fallback), so the contractor can dictate once and send — exactly how a side hustle tool should feel after a long day on site.
-
Best Use of Tiger Data — Job memory is hybrid by design: SQLite always works; Tiger Cloud + pgvector kicks in when
TIGER_DATA_CONNECTION_STRINGconnects, so similar past jobs can inform the next estimate without forcing every quote into a brittle single store. Embeddings and hybrid recall for the agent that remembers the last remodel, not just the last prompt. -
Best Use of Mastra — The optional Mastra sidecar under
mastra/is the orchestration lane for multi-step estimate flows (tools + memory) when you want an agent harness around the same open models — same product, clearer separation between “UI app” and “agent workflow.”
Bonus — first user energy
I dogfooded the full path on the live Render demo (Welcome → plumbing job → estimate QF-20261019-style → Send sheet / PDF). The product pitch to a real plumber is the same as the demo: finish the physical workday, dictate the job once, send a branded estimate before dinner.







Top comments (0)