What I Built
The One Missing Question is a scrapbook-like page for the person who ends up coordinating every group plan. Paste a short chat, then get the messages that matter, the details still in the air, and one question you can edit and send.
Take a board-game night in a busy group chat. Mira says Saturday is good. Jay can make it after 7. Noor can host, while Mira thought they were meeting at Jay's. Three people are interested, but there is still no agreed start time or venue. The friend organizing it needs one useful next message, not a confident summary of a plan nobody made.
I built this around the friend who keeps the group chat moving when everyone is interested but nobody has agreed on the details. The built-in sample lets anyone try the flow without sharing a private conversation.
Demo
The README has the local demo steps. Install Ollama and pull gemma2:2b-instruct-q3_K_S, run npm start, then click Try a sample chat and Find the missing question. The sample is included in the app.
In one local run, the quote cards included “Mira: Saturday is good. I thought we were going to Jay's?” and “Noor: Any time after 6 works for me.” The open-details card said the time and place were still unclear. Gemma drafted:
Based on the chat, what time and place are we thinking for the game night this weekend?
I would tighten that before sending it: can everyone meet after 7, and should we go to Noor's or Jay's?
Code
The One Missing Question on GitHub
The app is a small Node server and a dependency-free browser interface. Its Render Blueprint maps the page and API to a public web service and Ollama to a private service.
That Blueprint is ready to deploy, but the Ollama service and its persistent disk require paid Render resources. I claimed the Hacktoberfest Render promo through MLH; Render's credits portal says the event has no codes in its pool yet and has saved my request. No credit was issued, so I could not use that promo to put the demo on Render. The local demo above runs the same app and Gemma model.
How I Built It
The model receives the pasted chat and returns three fields in JSON: exact excerpts, open details, and one proposed question. The browser arranges these as paper notes. The user can edit the question before copying it.
My first design asked Gemma to label details as agreed. That failed in a useful way. In one test case, a model called a venue confirmed even though the supporting message was phrased as a question. The quote was present in the input; the interpretation was wrong. An exact-match citation can prove the words appeared, but it cannot prove the group reached a decision.
I changed the card from “Seems settled” to “What was said.” The server checks every excerpt against the pasted chat and drops any that cannot be found:
const quotes = raw.quotes
.slice(0, 4)
.map((item) => cleanText(item, 220))
.filter((quote) => quote && source.includes(quote));
The page no longer promotes a suggestion to a decision. Gemma still does the useful work of selecting relevant words and drafting the question; the person using the app remains the judge of what those words mean.
The tested model is gemma2:2b-instruct-q3_K_S through Ollama. On my Windows laptop with an RTX 3050 6 GB GPU, one cold load plus answer took about 72 seconds; later short chats took about 2–3 seconds each. Those timings are local measurements, not a Render benchmark. The final five-case run returned valid structured responses in all five cases. It correctly surfaced Jay's conflict with the 10 am café plan and asked whether 11:30 worked. The edit to the game-night question above is part of the product, not a hidden fix.
Why Does Open Innovation Matter?
A planning chat can contain private names, places, and schedules. Running Gemma through Ollama means the same app can process that text on a laptop without sending it to a third-party model API. The model tag and runtime are configurable, which let me try Gemma 4, Gemma 3 1B, and compact Gemma 2 without rewriting the app. The smallest model missed important details; the larger one did not finish its cold start within my timeout. Gemma 2 gave the most useful local results in the lower-cost size range.
Prize Categories
- Best Use of Gemma
Where It Still Stumbles
The model can still miss a conflict or ask a broad question when both time and place are unresolved. The app keeps its output editable and exposes the exact words it selected, so the organizer can tighten the question before sending it.
Top comments (0)