<?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: zSnow!</title>
    <description>The latest articles on DEV Community by zSnow! (@zsnowww).</description>
    <link>https://dev.to/zsnowww</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%2F4196373%2F3b2bb9d0-ee1e-43f0-80fc-113cd98bafc3.jpg</url>
      <title>DEV Community: zSnow!</title>
      <link>https://dev.to/zsnowww</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zsnowww"/>
    <language>en</language>
    <item>
      <title>I Built a Telegram Folder Assistant for Hacktoberfest. The Hard Part Was Knowing When Not to Sort.</title>
      <dc:creator>zSnow!</dc:creator>
      <pubDate>Sat, 24 Oct 2026 22:58:01 +0000</pubDate>
      <link>https://dev.to/zsnowww/i-built-a-telegram-folder-assistant-for-hacktoberfest-the-hard-part-was-knowing-when-not-to-sort-1n1</link>
      <guid>https://dev.to/zsnowww/i-built-a-telegram-folder-assistant-for-hacktoberfest-the-hard-part-was-knowing-when-not-to-sort-1n1</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;strong&gt;&lt;a href="https://dev.to/mlh-hackathon"&gt;MLH × DEV Writing Challenge&lt;/a&gt;&lt;/strong&gt;. I built SlothSort during the online &lt;strong&gt;&lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest 2026 Week 3: Slow and Steady challenge&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My Telegram sidebar had become a small task I kept postponing: deciding which chats and channels belonged together, then creating and maintaining the folders manually.&lt;/p&gt;

&lt;p&gt;I started SlothSort on Wednesday, October 21. It connects to Telegram through MTProto, gathers context about the chats my account can access, and asks a local Gemma 3 model to propose folders. The important word is &lt;em&gt;propose&lt;/em&gt;. Before anything changes in Telegram, I can review every assignment, move a chat elsewhere, rename a folder, or leave a chat unassigned. Only my approval creates Telegram’s native chat folders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/zSnowww/slothsort" rel="noopener noreferrer"&gt;The source code and setup instructions are on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;Gemma 3 4B, running through Ollama, is the default classification engine. Telethon handles Telegram access through MTProto, while FastAPI serves the review interface.&lt;/p&gt;

&lt;p&gt;That division matters: Gemma suggests a structure, but it cannot call Telegram’s API or create a folder by itself. The application validates the chat IDs in its response and waits for a human decision. Optional CLI-based model connectors exist, but I keep local Gemma as the default because Telegram conversations may contain other people’s messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;I joined Hacktoberfest’s online &lt;em&gt;Slow and Steady&lt;/em&gt; challenge after the week had already begun. Its prompt—build with open-source AI to remove a task you dread—gave me a useful constraint. “Sort everything automatically” sounded convenient, but it would have been the wrong promise. A channel title can be ambiguous, a few recent messages can misrepresent a chat, and a model’s confidence score is only an estimate.&lt;/p&gt;

&lt;p&gt;So I built the project around a review screen instead of an automatic sorter. Users can start with metadata and descriptions, then choose whether to include recent messages for better context. Uncertain suggestions wait for a decision; weak suggestions can remain unassigned. I also added an undo action for the latest folder creation, guarded so it will not delete a folder that has since been changed elsewhere.&lt;/p&gt;

&lt;p&gt;The most useful lesson was that saving effort does not require removing the person from the decision. SlothSort takes on the repetitive first pass. I still decide what belongs in my Telegram account.&lt;/p&gt;

&lt;p&gt;I described the implementation and its limitations in my &lt;a href="https://dev.to/zsnowww/slothsort-gemma-proposes-telegram-folders-i-approve-the-changes-229k"&gt;original Week 3 submission&lt;/a&gt;. I have not measured a reliable number of minutes saved yet, and I would rather say that plainly than invent a productivity claim.&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
      <category>gemma</category>
    </item>
    <item>
      <title>SlothSort: Gemma proposes Telegram folders, I approve the changes</title>
      <dc:creator>zSnow!</dc:creator>
      <pubDate>Sat, 24 Oct 2026 22:20:19 +0000</pubDate>
      <link>https://dev.to/zsnowww/slothsort-gemma-proposes-telegram-folders-i-approve-the-changes-229k</link>
      <guid>https://dev.to/zsnowww/slothsort-gemma-proposes-telegram-folders-i-approve-the-changes-229k</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;I kept putting off the same small Telegram chore: opening each chat or channel, deciding where it belonged, then manually maintaining chat folders. SlothSort does the first pass for me. It reads the Telegram dialogs my account can access, asks a local Gemma 3 model to propose folders, and shows a review screen before changing anything.&lt;/p&gt;

&lt;p&gt;It does not blindly sort by title. I can choose metadata alone, add group and channel descriptions, or sample 5, 10, or 20 recent text messages per chat. Each proposed assignment includes a reason and an estimated confidence. Clear suggestions are preselected; uncertain ones wait for my decision; weak ones remain unassigned. I can move chats, rename folders, or leave them out. Only my explicit approval creates Telegram's native chat folders through MTProto. I can undo the latest creation while those folders remain unchanged.&lt;/p&gt;

&lt;p&gt;The lazy payoff is fewer repetitive folder decisions, not zero responsibility. I have not measured a reliable number of minutes saved yet.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bmcnofuogjh9yjx5411.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3bmcnofuogjh9yjx5411.png" alt="SlothSort demo preview" width="800" height="1632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/zSnowww/slothsort/051f9b9901c896f05d8d672224cd61dbdae9cec5/docs/demo.mp4" rel="noopener noreferrer"&gt;Watch the 16-second video demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video uses invented chats and a proposal previously computed with Gemma 3 4B on my machine. I omitted the CPU inference wait to keep it short. Reviewing assignments, simulated folder creation, and undo were recorded live. The demo adapter never connects to Telegram or touches a real account.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/zSnowww/slothsort" rel="noopener noreferrer"&gt;SlothSort on GitHub&lt;/a&gt; — MIT-licensed, with setup instructions, a synthetic-data demo, and 21 automated tests that do not require Telegram credentials.&lt;/p&gt;

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

&lt;p&gt;The default path is Telegram via Telethon/MTProto → a FastAPI service → Gemma 3 4B through local Ollama → a browser review screen → explicit approval → Telegram dialog filters. The model proposes; it never sends Telegram API requests itself.&lt;/p&gt;

&lt;p&gt;I made the context budget visible. The initial mode uses metadata and descriptions, not private messages. If I enable message sampling, the app sends only the selected recent text to the chosen model, truncates each message, and never downloads media. With local Ollama, inference stays on my machine. Optional Codex, OpenCode, and Antigravity CLI connectors are experimental and require separate consent because their providers may process data remotely.&lt;/p&gt;

&lt;p&gt;Gemma returns structured JSON. The server validates the proposed chat identifiers against the current snapshot, prevents duplicate assignments, and does not automatically accept low-confidence predictions. It also checks existing Telegram folders before proposing new ones. Undo is deliberately guarded: it removes only folders created by the last operation that still match their saved state, so a folder edited elsewhere is left alone.&lt;/p&gt;

&lt;p&gt;The rough edges matter. A short sample can misrepresent a chat, confidence is a model estimate rather than a calibrated probability, Telegram imposes its own limits, and undo history currently lives only in server memory.&lt;/p&gt;

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

&lt;p&gt;The default classifier is an open-weight model I can run locally, inspect, and replace. That is especially useful when the input may include other people's messages: I do not need to send their text to a closed hosted AI API just to tidy my sidebar. Local inference can be slower on CPU, but the tradeoff is visible and under my control. Telegram itself still requires a network connection, and choosing an optional CLI engine changes the privacy picture; the interface says so before analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 3 4B powers the default classification flow. The synthetic demo uses its real proposal, and the source shows the schema, prompt, and validation around its output.&lt;/p&gt;

&lt;p&gt;For adjacent approaches, &lt;a href="https://dev.to/ishaanchowdhury_ic10/slothbrief-i-let-a-local-gemma-read-my-group-chats-so-i-could-sleep-in-2o76"&gt;Ishaan Chowdhury's SlothBrief&lt;/a&gt; uses local Gemma to brief group chats, while &lt;a href="https://dev.to/preetam960/archiving-a-telegram-channel-with-telethon-and-re-running-it-without-downloading-twice-4ckh"&gt;Preetam's TGLoader&lt;/a&gt; explores Telethon for Telegram channels. SlothSort focuses on reviewable changes to Telegram's own chat folders.&lt;/p&gt;

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