DEV Community

Smaranika
Smaranika

Posted on

Scopewise: a local Gemma app that turns "could you also…?" into a quote

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

Freelance projects rarely go wrong in one big moment. They go wrong in small ones. A client sends "could you also add…?", and saying yes quietly is easier than the awkward money conversation. A few of those, and a fixed-price project has stopped being worth doing.

So I built Scopewise: paste what you agreed and the client's new message, and a local Gemma model tells you whether the request is inside the scope, extra work, or too vague to say. If it's extra, it lists the work, prices it, and gives you a polite reply ready to edit and send.

Scopewise result

What I Built

Scopewise is a single web page with four jobs:

  • 🔍 Check. You paste the agreed scope and a client message. The verdict is one of Inside scope, Extra work, or Needs a question, with a one-sentence reason that points back to your scope.
  • 💰 Quote. For extra work, each new piece of work gets an hour estimate, and the app turns hours into a cost using your hourly rate.
  • ✉️ Reply. A draft in a friendly or firm tone. It never promises free work, and the estimate line is added by the app.
  • 📈 Tally. A running total of extra work you've flagged, kept in your own browser.

It's for freelancers and tiny agencies working on fixed-price projects: designers, developers, writers, anyone whose scope lives in a short brief and whose client messages arrive in a chat window.

Demo

Live: https://smaranikamondal.github.io/Scopewise/

The hosted page can't run Gemma, so you can press See a sample to see a labelled example result. With Ollama running locally, the same page checks your own text with your own model. The README has the steps.

Sample result

Code

🧾 Scopewise

Tell clients "yes, and here's the quote", not "sure, no problem".

A scope-creep checker for freelancers, powered by an open model on your own laptop. Client messages never leave your machine.

HTML deps model Hacktoberfest

Scopewise result


Why this exists

Scope creep is a small, constant leak in freelance work. A client sends "could you also…?", and saying yes quietly is easier than having the awkward conversation. A few of those and a fixed-price project stops being profitable.

Scopewise takes the awkward part off your plate. Paste what was agreed and the client's new message. It tells you whether the request is inside the scope, extra work, or too vague to say, and writes a polite reply you can edit and send.

Built for the Hacktoberfest Open-Source AI Challenge, Week 2: Side Hustle (Oct 12-18, 2026). Started and finished within the challenge window.

What it does

🔍 Check Paste the agreed scope and a
…

How I Built It

One HTML file, no framework, no build step, no dependencies. The model is Gemma, served locally by Ollama.

1. Two untrusted blocks of text go in. The scope and the client message are both wrapped in tags, and the prompt says to treat them as data and ignore any instructions inside them. That reduces prompt injection but doesn't eliminate it, so the README says so.

2. The model returns a fixed JSON shape. Requests use format: "json" and a low temperature. The shape is a verdict, a one-sentence reason, a list of extra items with hours, an optional clarifying question, and a reply.

3. Code decides what's valid. The reply is parsed defensively, then checked:

  • An unknown verdict is rejected.
  • An "extra" verdict with no items is rejected.
  • Extras attached to an "in scope" or "unclear" verdict are dropped.
  • Hours are clamped to 0.25-80 and rounded to quarter hours.

4. The money is never the model's job. Gemma estimates hours. The app multiplies by your rate, formats the currency, and writes the estimate line into the reply. A language model shouldn't be doing arithmetic on someone's invoice.

5. Everything the model writes is shown as plain text, never as HTML, so a strange output can't inject anything into the page.

6. I tested it in a headless browser against a mocked Ollama: the extra-work flow and its quote maths, in-scope and unclear results, copy to clipboard, saved settings after a reload, malformed model output, an HTML injection attempt and the phone layout. All 30 checks passed. That tests the app's logic, not Gemma's judgment, which depends on the model you run.

Honest limits.

  • The hours are a model's guess. Change the quote before you send it.
  • It only knows what you paste. A vague scope gives a vague verdict.
  • It's a drafting aid, not legal advice or a contract.
  • In my own testing, gemma3:1b on a CPU-only laptop marked two clearly out-of-scope requests as “Inside scope”. A larger Gemma may judge scope more reliably, but I haven’t tested that, so read every verdict before you reply to a client.
  • The tally and saved scope live in browser storage, so they stay on one browser.

Why Does Open Innovation Matter?

A client's messages and a project's scope are confidential: names, budgets, unreleased products. For this tool, open models solve practical problems:

  1. Client data stays on the freelancer's laptop. There's no third-party server in the loop, which matters when a client's brief is under NDA.
  2. It costs nothing per check. A freelancer might run it on every message. With a hosted API, that's a meter running on every client email.
  3. It works offline, and the model can't change behaviour underneath you.
  4. Swapping models is trivial. The dropdown is filled from whatever Ollama has installed, so you can trade speed for judgment with one click.

Would Someone Pay for This?

The theme asks for something people would pay for, so here's the honest version. The value isn't the reply text. It's catching the request. One caught request of a few hours is worth more than any plausible price for the tool, and the awkward-conversation cost is removed. What's missing for a paid product is the part I deliberately kept out: a saved library of past projects and scopes, and a way to turn a quote into a proper change order. This is a working prototype of the core loop, not a finished product.

Prize Categories

  • Best Use of Gemma. Gemma judges every request, estimates the hours, and drafts the reply locally through Ollama. The app detects and selects it automatically, and the code validates everything it returns.

Built with AI coding assistance. Gemma is provided under and subject to the Gemma Terms of Use found at ai.google.dev/gemma/terms.

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.