This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.
What I Built
download.txt is not much of a filing system.
Neither is scan-01.txt, or the folder full of documents that can wait until next weekend. Opening each one, deciding where it belongs, making the folders and checking for copies is a small job with enough little decisions to become a permanent chore.
I built Sossego, a browser-local document organizer that takes a first pass at those decisions. Add a batch, let an open multilingual model suggest folders from the contents, then download an organized copy. Sossego is Portuguese for peace and quiet. The goal is to leave a smaller task behind.
It provides five destinations—Money, Work, Home, Learning and Travel—and a Review pile. You can change any folder. Exact-byte copies are initially omitted, with their originals identified. The downloaded ZIP contains the kept documents and a plan recording their original names, hashes and destinations. Files in Review are included too.
Your originals stay exactly where they were. Sossego does not need permission to reorganize your filesystem, and document content is not uploaded for inference.
Demo
Open Sossego · English and Portuguese · no account or API key.
Try “Try the messy folder”, then “Find their places.” The sample creates twelve clearly fictional files: ten substantive documents, one ambiguous note and one exact copy. The first run downloads roughly 125 MB of model data; subsequent use can reuse the browser cache.
The files are not preassigned model answers. They go through the actual inference worker. In the recorded browser run:
| Outcome | Files | What made the decision |
|---|---|---|
| Suggested a named folder | 7 | Open-model embeddings plus similarity/margin gates |
| Kept in Review | 4 | Three low/close model matches; one short-text guard |
| Omitted exact copy | 1 | SHA-256 byte identity, independent of the model |
For example, download.txt contains a hotel confirmation and is suggested for Travel. The model classifies its text; the filename is excluded from its input.
The invoice scan-01.txt is more revealing. Its top matches were Work at approximately 0.216 and Money at 0.193. The application keeps it in Review rather than automatically accepting the top match. A SQL lesson and Portuguese study note also stayed in Review. The demo therefore shows seven useful suggestions and the remaining decisions, rather than hiding the difficult examples.
Change the invoice to Money yourself, run sorting again, and your choice remains. Download the ZIP: it includes the Review pile, a readable note and sossego-plan.json. You can inspect what happened without relying on this article.
Code
GitHub repository · Verification record · Actual browser plan · CPU evaluation.
This is a new MIT-licensed project, begun on October 19 inside the Week 3 window. Substantive application code was written for this entry. Open dependencies and model licenses are credited in the repository. Codex assisted implementation, documentation and testing; the article's authorship disclosure reflects the automated workflow.
How I Built It
The core is paraphrase-multilingual-MiniLM-L12-v2, an Apache-2.0 sentence embedding model. Transformers.js 3.8.1 runs the pinned Xenova ONNX conversion with q8 weights in a browser worker, using ONNX Runtime WASM on one CPU thread.
The worker embeds document text and two authored bilingual descriptions per folder. It compares normalized, mean-pooled vectors using cosine similarity. A top similarity below 0.28 or a top-two margin below 0.045 routes the document to Review. Those are product heuristics; they are not calibrated probabilities. The model does not receive the sample answer key or filenames.
Ordinary code handles the surrounding tasks: PDF.js extracts text, SHA-256 identifies exact copies, and fflate packages the original bytes. Names are sanitized and collisions receive suffixes. There is no keyword fallback pretending to be model inference. If the model fails to download, the page reports that failure and manual filing remains available.
The scope is deliberately bounded: UTF-8 TXT, Markdown, CSV, JSON and text-based PDFs; at most 24 files, 6 MB each, 40 MB per batch. PDFs use the first five pages, text is capped at 12,000 characters, and longer texts use short excerpts from the start, middle and end. Scanned or unreadable PDFs need a manual folder. Documents are handled as inert text.
I checked more than whether a download button worked. A verification script opened the actual browser-generated ZIP and compared all eleven kept files with their original sample contents and SHA-256 hashes. All matched, including the four Review files. A text PDF was read and suggested for Travel; an invalid PDF remained visible for manual filing. Seven deterministic checks cover uncertainty, duplicates, path safety, filename collisions, excerpt limits, escaped previews and archive integrity.
Why Does Open Innovation Matter?
An organizer needs to read the things you have not organized yet. Sending that entire pile to a hosted model would make a routine chore depend on a content-upload decision and a running service.
Here the model and runtime are open and inspectable. Inference happens in the browser worker, with no inference server, token bill or account. The model revision is pinned, the folder descriptions are ordinary source data, and the thresholds are visible. Someone can replace the model or change the filing policy without rebuilding an integration around a closed endpoint.
There are still network and resource costs. The host serves the app; Hugging Face and its CDN serve model files and see normal download-request metadata. The initial download is substantial. Documents remain in page memory, while the chosen language and app/model caches can persist. Offline use needs those caches to survive; browser storage eviction or memory limits can interrupt it. The downloaded archive itself contains the selected documents and should be shared deliberately.
The Lazy Payoff
In the synthetic twelve-file run, seven documents already had a suggested destination and one exact copy was identified. Four files remained to look at. One download produced the organized copy and its plan, while the original folder stayed intact.
The recorded browser classification loop took about 0.66 seconds after loading the model and preparing the folder descriptions. That excludes initial downloads and document reading, and it is one observed runtime—not a claim about how many minutes a person saves. The examples were authored during development, so their results are a demonstration, not a representative accuracy study.
For this week's theme, the useful part is the change in the chore: start with twelve loose files, finish with a copy in folders and a visible review pile. A little less sorting, with the unfinished decisions still easy to find.
Prize Categories
Overall and Best Use of GitHub Copilot, through the challenge's explicitly listed GitHub Actions pathway. Actions runs the locked dependency installation, deterministic checks and static build before deploying the demo to Pages. I am not claiming Copilot code generation.

Top comments (0)