<?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: Rohith Singothu</title>
    <description>The latest articles on DEV Community by Rohith Singothu (@rohith_singothu_3fbb71141).</description>
    <link>https://dev.to/rohith_singothu_3fbb71141</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%2F4171082%2Faa24152c-52c5-4e92-9e79-1edcabde7387.png</url>
      <title>DEV Community: Rohith Singothu</title>
      <link>https://dev.to/rohith_singothu_3fbb71141</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rohith_singothu_3fbb71141"/>
    <language>en</language>
    <item>
      <title>Building SortSense: A Local AI File Organizer Built in a Single Hack Day</title>
      <dc:creator>Rohith Singothu</dc:creator>
      <pubDate>Thu, 08 Oct 2026 11:13:18 +0000</pubDate>
      <link>https://dev.to/rohith_singothu_3fbb71141/building-sortsense-a-local-ai-file-organizer-built-in-a-single-hack-day-353b</link>
      <guid>https://dev.to/rohith_singothu_3fbb71141/building-sortsense-a-local-ai-file-organizer-built-in-a-single-hack-day-353b</guid>
      <description>&lt;p&gt;Building SortSense: A Local AI File Organizer Built in a Single Hack Day&lt;/p&gt;

&lt;h1&gt;
  
  
  hacktoberfest #opensource #gemma #ai
&lt;/h1&gt;

&lt;p&gt;Hacktoberfest: Contribution Chronicles&lt;/p&gt;

&lt;p&gt;We, Team Brute Force, built SortSense during the Hacktoberfest Hack Day Coimbatore x (INIT Club &amp;amp; IDEA Club). We wanted to tackle a problem almost everyone with a laptop faces: the Downloads folder slowly turns into a mess of files with meaningless names, making it difficult to find what you actually need.&lt;/p&gt;

&lt;p&gt;Files received through WhatsApp, browsers, and other platforms often arrive as:&lt;/p&gt;

&lt;p&gt;IMG-20261008-WA0004.pdf&lt;br&gt;
DOC-WA0012.pdf&lt;br&gt;
a8f31c92.pdf&lt;/p&gt;

&lt;p&gt;Traditional file organizers usually rely on rigid extension-based rules like .pdf → Documents or .jpg → Pictures. But a PDF could be an electricity bill, university notes, an assignment, or something completely different.&lt;/p&gt;

&lt;p&gt;Cloud AI can understand documents semantically, but uploading sensitive files such as bills, identity documents, or personal records to external servers isn't always acceptable.&lt;/p&gt;

&lt;p&gt;So we built SortSense — a privacy-first file organizer that understands files locally.&lt;/p&gt;

&lt;p&gt;How it works&lt;/p&gt;

&lt;p&gt;Our stack is Python 3.13, CustomTkinter, Pydantic, watchdog, pypdf, Ollama, and Gemma 4.&lt;/p&gt;

&lt;p&gt;Detection: SortSense monitors download directories using watchdog and detects new files as they arrive. It can detect Chrome, Firefox, and OS-default download paths on Windows and Linux.&lt;br&gt;
Extraction: For supported documents, the ingestion pipeline extracts the content using pypdf or plain-text extraction.&lt;br&gt;
Understanding: The extracted content is sent to a locally running Gemma 4 model through Ollama. Gemma determines what the document actually means instead of relying only on its file extension.&lt;br&gt;
Validation: Gemma returns structured JSON containing information such as the category, suggested filename, document type, summary, confidence, and suggested action. A deterministic Pydantic-based validation layer checks the response before any filesystem operation happens.&lt;br&gt;
Organization: SortSense safely renames and moves the file into the appropriate category. It also searches for existing matching folders instead of unnecessarily creating duplicates.&lt;br&gt;
Review: If Gemma's confidence is below our configurable threshold, the file is sent to a Review Queue instead of being silently misplaced.&lt;br&gt;
Dashboard: The CustomTkinter desktop application shows live counters, Activity Log entries, Review Queue items, and settings.&lt;/p&gt;

&lt;p&gt;The important part: the files never leave the user's machine.&lt;/p&gt;

&lt;p&gt;The Gemma 4 Partner Challenge&lt;/p&gt;

&lt;p&gt;We built SortSense around local Gemma 4 inference using gemma4:e4b through Ollama.&lt;/p&gt;

&lt;p&gt;Gemma receives the extracted document content and returns a structured analysis containing the document category, filename suggestion, document type, summary, confidence, and suggested action.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Electricity bill PDF&lt;br&gt;
        ↓&lt;br&gt;
     Gemma 4&lt;br&gt;
        ↓&lt;br&gt;
Utilities/Electricity_Bill_September_2026.pdf&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;Signals &amp;amp; Systems notes&lt;br&gt;
        ↓&lt;br&gt;
     Gemma 4&lt;br&gt;
        ↓&lt;br&gt;
Study_Notes/Signals_Systems_Semester_Notes.pdf&lt;/p&gt;

&lt;p&gt;A key architectural decision was to keep Gemma responsible for understanding and recommendation, while deterministic Python code remains responsible for validation and filesystem operations.&lt;/p&gt;

&lt;p&gt;This gives us the flexibility of AI without giving an LLM unrestricted control over the user's files.&lt;/p&gt;

&lt;p&gt;What makes SortSense different&lt;/p&gt;

&lt;p&gt;The main difference is simple:&lt;/p&gt;

&lt;p&gt;Traditional organizers ask what a file is. SortSense tries to understand what the file means.&lt;/p&gt;

&lt;p&gt;Our key differentiators are:&lt;/p&gt;

&lt;p&gt;Local edge inference: Gemma 4 runs directly on the user's machine.&lt;br&gt;
Privacy-first: No document bytes are uploaded to a cloud AI service.&lt;br&gt;
Semantic organization: Files are classified based on their content rather than just their extension.&lt;br&gt;
Confidence guardrails: Low-confidence results go to a human review queue.&lt;br&gt;
Structured output: Gemma is prompted for strict JSON and the result is validated before filesystem operations.&lt;br&gt;
Smart folder reuse: Existing matching folders are reused to avoid unnecessary fragmentation.&lt;br&gt;
Intelligent renaming: Meaningless filenames can be converted into useful descriptive filenames.&lt;br&gt;
Multi-browser monitoring: Chrome, Firefox, and OS-default download paths can be monitored.&lt;br&gt;
Stuff that broke (and what we learned)&lt;/p&gt;

&lt;p&gt;Building the complete system during a single hack day forced us to make a lot of architectural decisions quickly.&lt;/p&gt;

&lt;p&gt;AI vs filesystem control: We decided early that the model should never directly manipulate files. Gemma recommends; deterministic Python validates and executes.&lt;br&gt;
Model confidence: AI classification isn't always certain, so we introduced a configurable 0.85 confidence threshold. Anything below it goes to the Review Queue.&lt;br&gt;
Unsafe model output: We added validation for path traversal, invalid extensions, null bytes, empty responses, and other unsafe values before allowing a file operation.&lt;br&gt;
File collisions: We made the routing system collision-safe. Existing files are never overwritten; suffixes such as _1, _2, etc. are added automatically.&lt;br&gt;
Background processing: The filesystem watcher and file-processing pipeline run in background threads, while GUI updates are safely marshalled back to the Tkinter main thread.&lt;br&gt;
Keeping the architecture small: Instead of adding FastAPI, a separate database, or unnecessary cloud services, we kept the system as a lightweight local Python application with Ollama and CustomTkinter.&lt;br&gt;
What we built during the hackathon&lt;/p&gt;

&lt;p&gt;Starting from zero, we completed:&lt;/p&gt;

&lt;p&gt;-Full watchdog filesystem watcher&lt;br&gt;
-Multi-browser download path detection&lt;br&gt;
-PDF and plain-text ingestion&lt;br&gt;
-Local Gemma 4 integration through Ollama&lt;br&gt;
-Structured JSON prompting&lt;br&gt;
-Deterministic validation layer&lt;br&gt;
-Atomic file routing&lt;br&gt;
-Smart existing-folder search&lt;br&gt;
-Automatic file renaming&lt;br&gt;
-CustomTkinter desktop dashboard&lt;br&gt;
-Live counters&lt;br&gt;
-Activity Log&lt;br&gt;
-Review Queue&lt;br&gt;
-Settings page&lt;br&gt;
-Automated Windows and Linux setup scripts&lt;br&gt;
-89-test pytest suite&lt;/p&gt;

&lt;p&gt;Team Brute Force:&lt;/p&gt;

&lt;p&gt;Dev Madhav — File watcher daemon, browser path detection, OS directory routing, atomic file move/rename engine&lt;/p&gt;

&lt;p&gt;Aadi UR — Document extraction pipeline, metadata sanitisation, GUI pipeline integration and live counter wiring&lt;/p&gt;

&lt;p&gt;Jeevan T — Local Gemma 4 integration via Ollama, structured JSON prompt engineering and confidence validation&lt;/p&gt;

&lt;p&gt;Rohith Singothu — CustomTkinter desktop dashboard, setup scripts, documentation and MLH submission&lt;/p&gt;

&lt;p&gt;Links&lt;br&gt;
GitHub Repo: &lt;a href="https://github.com/Minnolter12/bruteforceManager" rel="noopener noreferrer"&gt;https://github.com/Minnolter12/bruteforceManager&lt;/a&gt;&lt;br&gt;
Demo Video: &lt;a href="https://drive.google.com/drive/folders/1ml5yyOWsXLudp3xN56YhwqRokNHoMXOi?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/drive/folders/1ml5yyOWsXLudp3xN56YhwqRokNHoMXOi?usp=drive_link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Application: SortSense is a local desktop application and runs directly on the user's machine.&lt;/p&gt;

&lt;p&gt;Huge thanks to the team for surviving the sprint!&lt;/p&gt;

&lt;p&gt;Dev Madhav&lt;br&gt;
Aadi UR&lt;br&gt;
Jeevan T&lt;br&gt;
Rohith Singothu&lt;/p&gt;

&lt;p&gt;(Built for Hacktoberfest Hack Day Coimbatore x (INIT Club &amp;amp; IDEA Club) 2026)&lt;/p&gt;

</description>
      <category>gemma</category>
      <category>ai</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
