<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aditya mishra</title>
    <description>The latest articles on DEV Community by Aditya mishra (@iadii).</description>
    <link>https://dev.to/iadii</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F530532%2Fca8898a8-e141-4fc4-bc8a-80098ab38ac5.png</url>
      <title>DEV Community: Aditya mishra</title>
      <link>https://dev.to/iadii</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iadii"/>
    <language>en</language>
    <item>
      <title>Stillroom: a document inbox that does the sorting and waits for you</title>
      <dc:creator>Aditya mishra</dc:creator>
      <pubDate>Thu, 22 Oct 2026 17:08:59 +0000</pubDate>
      <link>https://dev.to/iadii/stillroom-a-document-inbox-that-does-the-sorting-and-waits-for-you-128k</link>
      <guid>https://dev.to/iadii/stillroom-a-document-inbox-that-does-the-sorting-and-waits-for-you-128k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My downloads folder does not need another clever filename. It needs someone to read the file, decide what it is, and put it somewhere I can find it later. I kept putting off those little decisions, so I built &lt;strong&gt;Stillroom&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stillroom is a local document inbox. I can drop in a PDF, TXT, Markdown, or CSV file. An open-weight model proposes a category, useful title, document date, summary, tags, and archive path. It must also copy a quote from the file to explain the choice. I see the original text next to the proposal, can correct it, and must approve the move. If I change my mind, Undo brings the original back.&lt;/p&gt;

&lt;p&gt;The deliberate pause is the point: the repetitive reading and naming is automated, while the consequential file move stays under my control. It also supports batch analysis and filing once proposals have been approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://raw.githubusercontent.com/iadii/stillroom/main/docs/demo/stillroom-demo.webm" rel="noopener noreferrer"&gt;Watch or download the 25-second real browser walkthrough&lt;/a&gt;.&lt;/strong&gt; It shows upload, a live Groq classification, the source quote, a title correction, approval, archive, activity history, and Undo. The document is a fictional community garden note, and the recording ran against an isolated temporary database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/iadii/stillroom/main/docs/demo/proposal.png" rel="noopener noreferrer"&gt;Full proposal screenshot&lt;/a&gt; · &lt;a href="https://raw.githubusercontent.com/iadii/stillroom/main/docs/demo/activity.png" rel="noopener noreferrer"&gt;Activity trail screenshot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the recorded run, the model put the note under &lt;strong&gt;Projects&lt;/strong&gt;, proposed &lt;strong&gt;Community Garden Fall Planting Prep&lt;/strong&gt;, and cited the exact line &lt;strong&gt;“This is an internal project note, not a receipt.”&lt;/strong&gt; It extracted the date from &lt;strong&gt;“October 22, 2026.”&lt;/strong&gt; I changed the title to &lt;strong&gt;Autumn garden workday&lt;/strong&gt;, approved it, filed it, and undid the move. The app recorded all six events. The proposal was genuine model output; no canned response was substituted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/iadii/stillroom" rel="noopener noreferrer"&gt;Stillroom source and setup instructions&lt;/a&gt;&lt;/strong&gt; · MIT licensed. The project was started during this challenge window, with the first local commit on October 22, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Vue 3 provides the inbox, proposal review, archive search, bulk actions, and activity trail. FastAPI extracts text locally and sends up to 30,000 characters to Groq's hosted &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt; model using strict JSON schema output. Python checks that the model's evidence quote appears in the extracted text. A proposed date is dropped unless its source phrase is present and parses to the same calendar date.&lt;/p&gt;

&lt;p&gt;SQLite holds metadata and the event log; originals are staged locally. The model never chooses a filesystem path directly. The server builds one from a fixed category and sanitized title. Identical uploads are rejected by SHA-256, collisions receive numbered names, and the archive move requires explicit human approval. Editing clears an earlier approval; Undo restores the file to the inbox and clears approval again.&lt;/p&gt;

&lt;p&gt;That separation helped me test the awkward cases: a model with no valid quote, an ambiguous date, a duplicate upload, two files with the same proposed name, an attempted move before approval, and a reversed move. The backend has automated workflow tests, and GitHub Actions is configured to run those plus frontend formatting and production build checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The model is &lt;a href="https://openai.com/index/introducing-gpt-oss/" rel="noopener noreferrer"&gt;GPT-OSS 120B, an open-weight model&lt;/a&gt;. The weights can be inspected and run through other infrastructure; I chose Groq for hosted inference during this build. That gives the document workflow an exit path from this particular provider. The semantic step—deciding whether a note is a receipt, project, or reading material—is where the model matters. Rules alone would push the sorting work back onto the user.&lt;/p&gt;

&lt;p&gt;This version &lt;strong&gt;is not offline&lt;/strong&gt;. Pressing Analyze sends extracted text to Groq. The originals, SQLite database, and archive remain local. A local inference adapter could later remove that network transfer, but I do not claim it exists today. Open weights matter here because model hosting is a choice, while evidence checks and human approval stay part of the application regardless of host.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Stillroom turns several blank decisions into one reviewable proposal: what the file is, what to call it, which date matters, what tags fit, and where it should live. I have not measured a manual-versus-Stillroom time saving, so I won't invent one. The recorded workflow demonstrates the narrower claim: one real document goes from an unnamed pile to a verifiable, reversible archive decision without manual filename or folder construction.&lt;/p&gt;

&lt;p&gt;There are limits. Scanned PDFs need OCR first, text analysis is capped, and this local single-user build should not be exposed as a public service without authentication. I would rather show those edges than imply the model is always right.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
