DEV Community

권준
권준

Posted on Fully Autonomous

BatchDay: fewer starts, with every task still visible

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.

What I Built

Six chores can mean six starts: find the scanner, put it away, find it again. BatchDay asks a smaller question than a full productivity assistant: which tasks could share a short session?

It uses an open sentence-embedding model to suggest batches, while keeping every original task visible. You supply the context, day and estimated minutes. A task can always be marked “Separate.” Nothing is scheduled, completed or deleted on your behalf.

The goal is fewer setup decisions for someone looking at a scattered list of small chores. The prototype does not prove a productivity gain. It makes the proposed tradeoff inspectable before you act.

Demo

Try BatchDay in your browser — no account or inference API key required.

BatchDay running: six original tasks become four proposed sessions, with every task retained

A short walkthrough:

  1. Click Suggest batches. The first run downloads the open model; later runs may reuse the browser cache.
  2. In the supplied example, the two bill-scanning tasks share a session, as do the two towel-washing tasks. Collecting a parcel and watering plants stay separate because their contexts differ. Six tasks produce four proposed sessions.
  3. Check Separate on the first task and run again. The result becomes five sessions: your choice overrides the model.
  4. Change the second task to “Do not scan power bill.” It stays separate with a visible review warning.

These are demonstration tasks, not a claim that a real person saved time. Input stays in the current page and is lost on refresh. English text only; up to 30 tasks.

Code

Source, tests and evaluation reports on GitHub

The browser app is static HTML and JavaScript. A Python reference implementation makes the grouping rules and model evaluation easy to inspect. The project was started on October 24, 2026 KST, during this challenge's build window. Project code is MIT licensed; dependencies retain their own licenses.

How I Built It

The open model does the semantic comparison. Transformers.js 2.17.2 runs the quantized Xenova/all-MiniLM-L6-v2 conversion in the browser. A Python reference uses the original sentence-transformers/all-MiniLM-L6-v2, mean pooling and normalized embeddings.

A summary generator was an obvious alternative. But a shorter-looking list can hide an omitted obligation. BatchDay keeps the list intact and groups references to the originals instead.

The merge rule is deliberately narrow:

  • Context and day must match the user's explicit labels.
  • Combined estimates must fit a 30-minute session.
  • Every pair across two groups must exceed the similarity threshold, currently 0.65.
  • A manual separation or a flagged restriction prevents a merge.

Checking every pair avoids a similarity chain: A resembles B and B resembles C, so all three get bundled even though A and C are unrelated. The result explains the context/day match and lowest merge similarity. Editing an input clears the old result, so an outdated suggestion cannot quietly remain on screen.

The failure that changed the design

In six synthetic development pairs, the original encoder treated “Buy milk” and “Do not buy milk” as very similar: cosine similarity was about 0.86. “Cancel the gym membership” and “Renew the gym membership” scored about 0.80. Both pairs were wrongly merged by the initial rules.

That is an important distinction: talking about the same thing does not mean doing the same thing.

A conservative English word check now keeps some restrictions and reversals separate and shows why. It is a limited guard, not a claim that MiniLM understands contradictions. It can miss phrasing and over-separate useful groups; the manual override remains necessary.

The same six development cases went from 4/6 to 6/6 after that change. Both reports are in the repository. This is an in-sample debugging result, not independent accuracy. Eight standard-library unit tests also passed for constraints, task preservation, invalid embeddings and overrides. The browser workflow was exercised separately; its quantized model produces different similarity values from the Python encoder.

Why Does Open Innovation Matter?

For a small chore list, sending every task to a hosted inference service is an avoidable dependency. Open weights let this version do the comparison on the user's device. The source exposes the threshold, grouping rules and failure cases, so someone can change the behavior or replace the encoder.

There is still a network boundary: initial library and model downloads contact jsDelivr and Hugging Face. The app does not send task text to an inference API. Browser cache retention varies, so this version does not promise full offline operation. It has no paid inference backend.

The largest remaining gap is practical batchability. Similar wording does not prove that two chores share equipment or can safely be combined. A useful next evaluation would ask people to label real lists, measure corrections, and compare against grouping by context alone. Until then, BatchDay offers a proposal with the originals beside it.

AI assistance disclosure: Codex assisted with concept development, implementation, debugging, tests, UI design and this write-up. The screenshot shows the running app. No partner prize category or unmeasured time savings are claimed.

Top comments (0)