Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
QuietBatch groups a pasted task list for review. Paste the loose ends, one per line, and an open semantic embedding model suggests which tasks might belong together. It also surfaces possible repeats that use different words.
The result is a review, not an autonomous cleanup. You can accept a batch, keep its tasks separate, mark a pair as related, or keep both distinct. Every original stays in the exported review. QuietBatch never books, emails, deletes or executes anything.
Demo
Watch the QuietBatch demo on YouTube
The demo uses ten synthetic tasks and local MiniLM inference. It follows one continuous operation: paste tasks, run the real local model, inspect the suggested batches, accept one batch, and undo the decision. The interface also supports reviewing repeats and exporting every original; those actions are outside this short clip.
To reproduce it locally:
git clone https://github.com/sundaysebasidian-byte/quietbatch.git
cd quietbatch
npm ci --ignore-scripts
npm run setup:model
npm start
Open http://127.0.0.1:48317 and choose Try a sample.
The bundled sample produces three multi-task batches and one possible repeat. The two invoice lines have a cosine similarity of about 0.947. Two grocery-related lines remain separate at the chosen grouping threshold. That imperfect result is useful context: the model offers a starting point, and the person keeps the final judgment.
Code
Source code on GitHub
QuietBatch is a new standalone implementation created on October 20, 2026 UTC. Application code is MIT licensed, and the model and runtime licences are documented with the source. It does not reuse any of my earlier challenge projects.
How I Built It
The central component is all-MiniLM-L6-v2, using the Xenova ONNX conversion pinned to revision 751bff37182d3f1213fa05d7196b954e230abad9. Transformers.js runs the quantized model through ONNX Runtime on the local CPU.
Each line becomes a normalized, mean-pooled 384-dimensional vector. Complete-link clustering proposes groups when every cross-pair in a merged cluster meets a cosine threshold of 0.45. A separate threshold of 0.82 surfaces possible repeats. Those cutoffs are engineering defaults, not measured probabilities or an accuracy score.
An embedding model compares the meaning of short tasks. A representative original task becomes the batch title, keeping the interface grounded in what the person actually wrote.
The interface moves from input to a focused review workspace, with separate Batches and Possible repeats views. Returning to the input preserves decisions until the text changes.
The browser talks only to a loopback server. Model downloads are an explicit setup step, not a surprise during task processing. The app verifies local files, shows loading and per-task progress, and runs inference in a worker that can be terminated when cancelled. When files are missing, it stops with repair instructions instead of pretending a keyword fallback is AI.
The tests run the real model on repeated input, paraphrases, different meanings and long text. They also exercise missing-file recovery, cancellation, review, undo, export and mobile layouts. A synthetic dental paraphrase pair scored 0.589 while a dental-versus-plant pair scored 0.052 in the recorded run. These examples demonstrate the forward pass; they do not establish general accuracy.
The model sees at most 256 encoded token IDs per task. Long originals remain intact, but their later tokens may not influence a suggestion.
AI assistance was used for the code, tests, article, interface, and demo review.
Why Does Open Innovation Matter?
A to-do list can reveal ordinary but personal details: medical appointments, money owed, travel plans. Local inference means those lines can be compared without sending them to a hosted inference provider. After installing dependencies and downloading the public model, this build can run without an internet connection.
Open components also make the behavior inspectable. The model revision, tokenizer, vector dimensions, grouping logic and thresholds are all visible. Someone can reproduce a suggestion, inspect where it failed, or change the model and evaluate the consequences. There is no inference subscription or API key to maintain, though the user's own computer still uses resources.
For this week's theme, the ambition is deliberately small: make it easier to notice a few tasks worth doing together. I have not measured time savings with users, and I do not claim that a cosine score understands a person's priorities.
Top comments (0)