{"slug": "the-model-writes-the-review-reply-the-owner-keeps-the-promises", "title": "The Model Writes the Review Reply. The Owner Keeps the Promises.", "summary": "A developer built Review Reply Writer, a local-first tool that uses Ollama and Gemma 3 4B to draft responses to customer reviews for independent cafe and hospitality operators, with an approval boundary that blocks any unauthorized compensation promises before text can be posted. The MIT-licensed Python application keeps business policy separate from customer text and model output, flagging detected unauthorized offers such as refunds or credits and requiring the owner to re-review any edited reply. The developer notes that demand, willingness to pay and time saved remain unproven.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle](https://dev.to/challenges/hacktoberfest-week2-2026-10-12).*\n\n“The coffee was excellent, but I was charged twice. The waiter ignored my question about the bill.”\n\nThat fictional review has three things worth answering. Thanking the customer for the coffee is easy. Acknowledging the double charge and unanswered question takes more care. Promising a refund introduces a different decision: does the person writing the reply have permission to offer one?\n\nI built Review Reply Writer for independent cafe and small hospitality operators. Gemma drafts the language locally. The owner supplies the business policy, reads the result, and approves the exact text before copying it for manual posting.\n\nThe Side Hustle hypothesis is paid installation, policy setup and support for an operator who wants local control without configuring a model. The application code stays free. Demand, willingness to pay and time saved remain unproven.\n\n[Watch the 68-second historical Gemma demonstration](https://share.descript.com/view/n1ZTnZpfNyB).\n\nRecorded October 13, 2026 Hawaii time, this earlier build uses a fictional cold coffee and 25-minute-wait complaint. It shows a real local Gemma draft, an added unauthorized refund blocking approval, the correction, approval and copy. The persistent banner identifies the earlier code. Captions were added later. Playback was checked without a Descript login on October 14.\n\nThis is an automated demonstration, not operator feedback or a recording of the current source. The visible Quality Lab screen is not a completed evaluation.\n\nTo inspect the same approval boundary in the current application, use its fictional **Duplicate billing** example with no compensation authorized:\n\nThe current duplicate-billing path has executed HTTP fixture evidence using labelled templates. It has not been recorded in a current Gemma/browser run. An edited reply is not untouched Gemma output.\n\nRepository: [https://github.com/nolankido/reviewReplyWriter](https://github.com/nolankido/reviewReplyWriter)\n\nThe repository is publicly accessible without a GitHub login. The application is MIT licensed; Gemma's model terms are separate.\n\nRun `py -3 rrw_setup.py --launch` on Windows or `python3 rrw_setup.py --launch` on macOS/Linux. The application uses Python's standard library and local browser assets. Model-written drafts require Ollama and downloaded `gemma3:4b` weights. Clearly labelled template preview works without either.\n\nOriginal coding began October 13, 2026 at approximately 8 AM Hawaii time, during this challenge's development window.\n\nThe editor places the saved review beside the reply. **Details to keep** links recognized concerns to exact excerpts of the original text. Prompts, fallbacks and checks share a bounded interpretation, so “charged twice” does not quietly become a generic billing apology.\n\nAn unanswered question also matters. A reply can mention the coffee and still leave the customer's main frustration untouched. Unsaved edits mark the checks stale until the owner saves and rechecks.\n\nThe interface says **Mention detected** because a phrase match cannot establish understanding. The owner still reads the whole review and reply.\n\nThe first version required a make-it-right offer in negative replies. That was a bad default: it encouraged commitments without permission.\n\nNow authorization is separate from customer text, earlier replies and voice examples. Exact owner statements can permit an offer or action. Detected unauthorized promises block approval, whether introduced by the model, a fallback or an edit. An authorized credit cannot silently become a larger credit plus a refund.\n\nApproval is tied to the saved text and check version. Changing the reply requires a new review. Serious allegations are conservatively referred for personal handling before routine generation.\n\nA lost response should not mean a lost draft. Saved generation receipts let the owner check an interrupted request without automatically running it again. Pending edits, private recovery copies and checked backups support recovery. Recovery leaves authorization unchecked and does not resurrect old approval.\n\nThe recurring workflow includes saved profiles and a one-business CSV inbox. Each reply still needs individual review. Nothing posts automatically.\n\nOn October 14, the local release check ran 569 passing Python tests. Linux launcher HTTP workflows and Node state checks also have executed evidence. These checks do not establish current Windows, browser/mobile or model behavior.\n\nTwo historical three-case Gemma smoke runs remain in the repository. The later run produced three model drafts on first attempts, but both runs predate current drafting-source changes and have no recorded human assessments. They do not validate this version's reply quality.\n\nA historical false rejection of “should have addressed” and an accepted reply that softened an exact wait duration helped expose limits in the checks. Quality Lab preserves attempts, rejection reasons, retries, fallbacks and available model receipts so those failures remain inspectable.\n\nAI assistance helped implement, test and prepare the project and this write-up.\n\nDownloaded Gemma weights support inference on the owner's machine without a hosted-model charge for each draft. Hardware, electricity and setup still cost money. Local execution gives the owner control over the customer context sent to the model and the runtime processing it.\n\nOpen application code makes the policy boundary inspectable: what entered the prompt, why a candidate was rejected, and which fallback was used. The browser uses local assets without external fonts, scripts or analytics.\n\nThe initial model download needs internet access. Privacy still depends on the computer and Ollama configuration; a loopback URL alone does not prove a private model runtime.\n\nThe English pattern checks can miss unfamiliar topics, sarcasm and subtle claims. They cannot establish whether an owner-supplied fact is true.\n\nCurrent-source Gemma results need genuine human assessment. Setup usability, operator preferences, comparative task times and willingness to pay need real observation. No operator trial, customer adoption or revenue is claimed.\n\n**Best Use of Gemma.** Gemma 3 generates the AI drafts through Ollama. Template previews and fallbacks are separately labelled and are not counted as Gemma output.", "url": "https://wpnews.pro/news/the-model-writes-the-review-reply-the-owner-keeps-the-promises", "canonical_source": "https://dev.to/kidon/the-model-writes-the-review-reply-the-owner-keeps-the-promises-57a2", "published_at": "2026-10-14 23:41:47+00:00", "updated_at": "2026-10-15 00:30:01.515000+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "ai-products", "generative-ai"], "entities": ["Review Reply Writer", "Gemma", "Ollama", "Gemma 3 4B", "Hacktoberfest Open-Source AI Challenge", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/the-model-writes-the-review-reply-the-owner-keeps-the-promises", "markdown": "https://wpnews.pro/news/the-model-writes-the-review-reply-the-owner-keeps-the-promises.md", "text": "https://wpnews.pro/news/the-model-writes-the-review-reply-the-owner-keeps-the-promises.txt", "jsonld": "https://wpnews.pro/news/the-model-writes-the-review-reply-the-owner-keeps-the-promises.jsonld"}}