<?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: JUKUN MAN WITH SME POWER</title>
    <description>The latest articles on DEV Community by JUKUN MAN WITH SME POWER (@thisisfeekey).</description>
    <link>https://dev.to/thisisfeekey</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%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg</url>
      <title>DEV Community: JUKUN MAN WITH SME POWER</title>
      <link>https://dev.to/thisisfeekey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thisisfeekey"/>
    <language>en</language>
    <item>
      <title>Sloth Tidy: a folder sorter that runs on my own gemma3, offline.</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 26 Oct 2026 01:52:12 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/sloth-tidy-a-folder-sorter-that-runs-on-my-own-gemma3-offline-29if</link>
      <guid>https://dev.to/thisisfeekey/sloth-tidy-a-folder-sorter-that-runs-on-my-own-gemma3-offline-29if</guid>
      <description>&lt;p&gt;Sloth Tidy sorts and renames a messy folder for you. Point it at Downloads or Desktop and it proposes moves like &lt;code&gt;Untitled1.txt -&amp;gt; documents/standup-notes.txt&lt;/code&gt;, based on what the file actually says, not just its extension.&lt;br&gt;
It is lazy-friendly by design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dry run by default.&lt;/strong&gt; Nothing moves until you click Apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never overwrites&lt;/strong&gt; a file (name clashes get &lt;code&gt;-2&lt;/code&gt;, &lt;code&gt;-3&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click undo&lt;/strong&gt; puts everything back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a command-line tool and a small local web page (&lt;code&gt;python ui.py&lt;/code&gt;) with Preview, Apply and Undo buttons. I'd never organise my Downloads folder myself, so now I don't have to.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AliFikan94" rel="noopener noreferrer"&gt;
        AliFikan94
      &lt;/a&gt; / &lt;a href="https://github.com/AliFikan94/hacktober3" rel="noopener noreferrer"&gt;
        hacktober3
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Sloth Tidy&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Point it at a messy folder. It sorts and renames everything using a &lt;strong&gt;local open-weight model&lt;/strong&gt; (via &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;). Nothing leaves your machine. Python stdlib only.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull gemma3:4b          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; any open-weight model works (gemma3:1b is faster)&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads             &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; dry run: shows what it would do&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads --apply     &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; do it&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads --undo      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; change your mind&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Prefer clicking? &lt;code&gt;python ui.py&lt;/code&gt; opens a small local web page (preview, apply, undo). It listens on 127.0.0.1 only.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IMG_0042.JPG&lt;/code&gt; becomes &lt;code&gt;images/img-0042.jpg&lt;/code&gt;. &lt;code&gt;Untitled(3).txt&lt;/code&gt; containing meeting notes becomes &lt;code&gt;documents/team-standup-notes.txt&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;For each file, sends the filename plus the first 600 characters (text files only) to the local model and asks for JSON: &lt;code&gt;{category, name}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Output is validated; a bad answer or an unreachable server falls back to extension rules, so it never hangs or breaks.&lt;/li&gt;
&lt;li&gt;Safe by default: dry…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AliFikan94/hacktober3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Two files sorted by their content, using &lt;code&gt;gemma3:1b&lt;/code&gt; on my own CPU:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;python&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sloth.py&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="nx"&gt;\mini&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gemma3:1b&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;slow&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gemma3:1b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;/2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;note2.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;/2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Untitled1.txt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;note2.txt&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;documents\groceries-list.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Untitled1.txt&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;documents\standup-notes.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;dry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;files.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--apply&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AliFikan94" rel="noopener noreferrer"&gt;
        AliFikan94
      &lt;/a&gt; / &lt;a href="https://github.com/AliFikan94/hacktober3" rel="noopener noreferrer"&gt;
        hacktober3
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Sloth Tidy&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Point it at a messy folder. It sorts and renames everything using a &lt;strong&gt;local open-weight model&lt;/strong&gt; (via &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;). Nothing leaves your machine. Python stdlib only.&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull gemma3:4b          &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; any open-weight model works (gemma3:1b is faster)&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads             &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; dry run: shows what it would do&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads --apply     &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; do it&lt;/span&gt;
python3 sloth.py &lt;span class="pl-k"&gt;~&lt;/span&gt;/Downloads --undo      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; change your mind&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Prefer clicking? &lt;code&gt;python ui.py&lt;/code&gt; opens a small local web page (preview, apply, undo). It listens on 127.0.0.1 only.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IMG_0042.JPG&lt;/code&gt; becomes &lt;code&gt;images/img-0042.jpg&lt;/code&gt;. &lt;code&gt;Untitled(3).txt&lt;/code&gt; containing meeting notes becomes &lt;code&gt;documents/team-standup-notes.txt&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;For each file, sends the filename plus the first 600 characters (text files only) to the local model and asks for JSON: &lt;code&gt;{category, name}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Output is validated; a bad answer or an unreachable server falls back to extension rules, so it never hangs or breaks.&lt;/li&gt;
&lt;li&gt;Safe by default: dry…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AliFikan94/hacktober3" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Google's open-weight &lt;code&gt;gemma3&lt;/code&gt; (1B and 4B), served locally by &lt;strong&gt;Ollama&lt;/strong&gt;. I already had it installed, so setup took no time and no new downloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool:&lt;/strong&gt; plain Python, standard library only, no dependencies. For each file it sends the filename and the first 600 characters of text files to the local model and asks for JSON (&lt;code&gt;{category, name}&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails:&lt;/strong&gt; the model's answer is validated. If Ollama is down, slow, or returns something unusable, the tool falls back to simple extension rules instead of hanging or crashing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; a dry run first, collision-proof names, and an undo log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; a tiny local web page built with the standard library, listening on &lt;code&gt;127.0.0.1&lt;/code&gt; only.
(&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/0q5vy393kwmp75oztr4z.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/0q5vy393kwmp75oztr4z.png&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A folder tidier has to read your private files: tax returns, chat exports, notes. With an open-weight model on localhost, those contents never leave my machine, it works with no internet connection, and it costs nothing per file.&lt;/p&gt;

&lt;p&gt;It is also swappable. &lt;code&gt;--model&lt;/code&gt; accepts any Ollama model, so I could try &lt;code&gt;gemma3:1b&lt;/code&gt; for speed and &lt;code&gt;gemma3:4b&lt;/code&gt; for quality by changing one flag. With a closed API I would be uploading my Downloads folder to someone else's server and paying per file.&lt;br&gt;
(&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/rml016bakg4swrv7fwqx.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/rml016bakg4swrv7fwqx.png&lt;/a&gt;)&lt;/p&gt;

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

&lt;p&gt;It names files by their content without me opening them, and my files stay on my PC. Honest notes from building it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My first run named both files &lt;code&gt;other.txt&lt;/code&gt;.&lt;/strong&gt; Two causes: Windows PowerShell saves text files as UTF-16, which my code read as garbage, and a 1B model sometimes copies words from the prompt. Decoding UTF-16 properly and giving the model a clearer example fixed it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It runs on CPU, so it is slow per file.&lt;/strong&gt; A small model suits a one-off tidy or an overnight run, not instant results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It never gets stuck.&lt;/strong&gt; Without a working model, it still sorts by extension.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Open-weight models / local inference.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Nobody Has Startup Cash. Everybody Has a Skill.</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:53:15 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/nobody-has-startup-cash-everybody-has-a-skill-a84</link>
      <guid>https://dev.to/thisisfeekey/nobody-has-startup-cash-everybody-has-a-skill-a84</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;*&lt;/p&gt;

&lt;h2&gt;
  
  
  Your side hustle doesn't have a budget problem. It has a missing skill problem.
&lt;/h2&gt;

&lt;p&gt;You've got the idea. You've got the weekends. What you don't have is a logo, a landing page, or someone to explain Python to you, and no cash to buy any of it.&lt;/p&gt;

&lt;p&gt;Meanwhile, the person who could do that logo in an hour needs exactly what &lt;em&gt;you&lt;/em&gt; know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SkillSwap&lt;/strong&gt; connects the two of you. Then it goes further.&lt;/p&gt;

&lt;p&gt;How I got there&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand.&lt;/strong&gt; A side hustle runs on nights and weekends. The people running one are time-poor and cash-poor, but skill-rich. The wall they hit is rarely the idea. It's the one skill they don't have, and the money to buy it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observe.&lt;/strong&gt; Look at how people patch that gap today: asking favours in group chats, paying a freelancer they can't really afford, or attempting a one-to-one trade that only works when two people happen to need each other's exact thing. Clean matches are the exception.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redefine.&lt;/strong&gt; The question changed from &lt;em&gt;"how do I find a cheaper freelancer?"&lt;/em&gt; to &lt;em&gt;"how might skills pay for skills, even when the trade isn't between two people?"&lt;/em&gt; One sentence, and the whole product shifted from a marketplace to a graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideate, with Claude.&lt;/strong&gt; I used Claude as a sparring partner: marketplace, time-credit currency, graph matching, which wins? We kept all three in order of preference (swaps, then loops, then credits as a safety net). Claude also found the flaw that shaped the AI half of the project: &lt;em&gt;"figma"&lt;/em&gt; and &lt;em&gt;"ui design"&lt;/em&gt; are different strings, so exact matching would miss the very people who most need each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prototype.&lt;/strong&gt; FastAPI and SQLite, a graph search for swaps and loops, real accounts, and an interface that feels like it belongs on a Mac, dark mode included. Built with Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test.&lt;/strong&gt; 17 automated tests, plus driving the real app in a browser from sign-up to booking to review. That caught things I'd have happily shipped: a phone layout that fell apart, ratings that didn't refresh, and a loop card that cheerfully announced "You teaches Ben." One honest caveat: the similarity threshold for fuzzy matches is a starting point, not something I've tuned on real users yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The open-source part isn't decoration. It's the engine.
&lt;/h2&gt;

&lt;p&gt;Type "ui design" and the best teacher on the network might list "figma". Matching those takes meaning, not string equality.&lt;/p&gt;

&lt;p&gt;So SkillSwap embeds every skill with &lt;strong&gt;Gemma's embedding model (&lt;code&gt;embeddinggemma&lt;/code&gt;), running through Ollama on your own machine&lt;/strong&gt;, and matches by similarity. The result shows up right in the interface:&lt;/p&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%2Fj0jl9iggzqkw8dlr058d.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%2Fj0jl9iggzqkw8dlr058d.png" alt="Fuzzy match: figma ≈ ui design" width="410" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why local and open matters here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A skill profile is a list of what you &lt;em&gt;can't&lt;/em&gt; do yet. That's personal. It never leaves your laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; No API bill, for a project about not having cash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control.&lt;/strong&gt; Swap the model with one environment variable. Tune the threshold. Change the behaviour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience.&lt;/strong&gt; No model running? The app falls back to exact matching and keeps working.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Code: &lt;strong&gt;&lt;a href="https://github.com/AliFikan94/skillswap/tree/claude/eloquent-gates-c2q636" rel="noopener noreferrer"&gt;AliFikan94/skillswap&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/AliFikan94/skillswap.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;skillswap
git checkout claude/eloquent-gates-c2q636
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; app.seed
ollama pull embeddinggemma            &lt;span class="c"&gt;# optional: semantic matching&lt;/span&gt;
&lt;span class="nv"&gt;SKILLSWAP_OLLAMA_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:11434 uvicorn app.main:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sign in as &lt;code&gt;ada@demo.test&lt;/code&gt; / &lt;code&gt;demo12345&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Real scheduling, in-app chat, and a notification the moment a new loop closes around you.&lt;/p&gt;

&lt;p&gt;Because the best side hustle advice might just be this: you don't need a budget. You need the right two other people.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LFG!!!!!</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:16:39 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/lfg-28pc</link>
      <guid>https://dev.to/thisisfeekey/lfg-28pc</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e" class="crayons-story__hidden-navigation-link"&gt;Built Blade, an app to get you off your screen, one walk proved it wrong about the rain.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/thisisfeekey" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" alt="thisisfeekey profile" class="crayons-avatar__image" width="356" height="356"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thisisfeekey" class="crayons-story__secondary fw-medium m:hidden"&gt;
              JUKUN MAN WITH SME POWER
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                JUKUN MAN WITH SME POWER
                
                
              
              &lt;div id="story-author-preview-content-4833780" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thisisfeekey" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" class="crayons-avatar__image" alt="" width="356" height="356"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;JUKUN MAN WITH SME POWER&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e" id="article-link-4833780"&gt;
          Built Blade, an app to get you off your screen, one walk proved it wrong about the rain.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mlhacks"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mlhacks&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Built Blade, an app to get you off your screen, one walk proved it wrong about the rain.</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:16:04 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e</link>
      <guid>https://dev.to/thisisfeekey/built-blade-an-app-to-get-you-off-your-screen-one-walk-proved-it-wrong-about-the-rain-n5e</guid>
      <description>&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AliFikan94/touchGrass" rel="noopener noreferrer"&gt;https://github.com/AliFikan94/touchGrass&lt;/a&gt;&lt;br&gt;
`&lt;br&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%2F67qqc4hhuvcijvlpdt0p.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%2F67qqc4hhuvcijvlpdt0p.png" alt="This is Blade's landing page" width="800" height="422"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your phone will still be there when you get back!&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;It's called &lt;strong&gt;Blade&lt;/strong&gt;. You tell it how long you've got and where you are, and it gives you one small daily task: a walk, plus a couple of things to notice. Then it tells you to put the phone away. That last line is the whole product. The screen exists to hand you a card and get out of your way.&lt;/p&gt;

&lt;p&gt;There's a streak, but a gentle one. Skip a day and it says "No streak pressure. Just step outside when you can." I did think about a leaderboard for about ten minutes and then dropped it. Ranking people on how much they went outside felt like the fastest way to make going outside miserable, and it would need a server holding everyone's data, which is the opposite of why I picked open models.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;You won't find walk photos in this post, and that's deliberate. The card said to put the phone away, so I did. The only camera I used was my eyes.&lt;/p&gt;

&lt;p&gt;Here's what you get instead. This is a real card from my own machine:&lt;br&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%2Fqf4s3ikhgzxtuinrj8qm.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%2Fqf4s3ikhgzxtuinrj8qm.png" alt="A card where you give a comprehensive note of all that happened" width="800" height="422"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Move.
  Walk for 15 minutes without stopping.

Notice.
  - Find evidence of an animal: a feather, a nest, tracks, chewed leaves.
  - See or hear three different birds.

Phone away. The grass is waiting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flow in the browser: pick how long you've got and what you feel like noticing, set your place (your browser can find it, or you type the coordinates), and press one button. A card appears with tick boxes. You close the laptop and go. When you're back, you press "Blade complete", and a small box asks what you noticed.&lt;/p&gt;

&lt;p&gt;Blade runs on your own machine, so there's no hosted link. That's on purpose. To try it: install &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, then &lt;code&gt;ollama pull gemma3:1b&lt;/code&gt; and &lt;code&gt;python main.py&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://github.com/AliFikan94/touchGrass" rel="noopener noreferrer"&gt;https://github.com/AliFikan94/touchGrass&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;The open piece is &lt;a href="https://ai.google.dev/gemma" rel="noopener noreferrer"&gt;Gemma&lt;/a&gt;, running locally through Ollama. It writes the card. The rest is plain Python and one HTML page, with no framework, no keys and no accounts.&lt;/p&gt;

&lt;p&gt;One rule shaped everything: &lt;strong&gt;the model never gets to decide a fact.&lt;/strong&gt; Season, daylight left and climate are worked out in ordinary code from your latitude and the date. Gemma gets a task and a short menu of real observations, and its only job is to phrase them nicely. A small model will confidently tell you about a bird that doesn't exist, so I just don't give it the chance.&lt;/p&gt;

&lt;p&gt;Here's how the day went.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I typed &lt;code&gt;python main.py&lt;/code&gt; and there was no main.py.&lt;/strong&gt; Fair. It was a package. I added one so nobody else does the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The app said &lt;code&gt;[fallback]&lt;/code&gt; and wouldn't tell me why.&lt;/strong&gt; Blade is built to serve a preset card when the model isn't available, so it never breaks. The catch is that it did this silently, so on my first real run I got a perfectly nice card and no idea whether Gemma had written it. I made it admit the reason, and the reason was this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;model requires more system memory (4.0 GiB) than is available (2.5 GiB)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My machine couldn't load the 4B model. I switched to the 1B model with one setting, and it worked. I'll come back to why that matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then it just spun.&lt;/strong&gt; "Listening to the grass..." for minutes, with nothing else happening. A small machine can take a long time to load a model on the first request, and I'd given it three minutes and no feedback. The fix was boring and effective: warm the model up when the server starts, cap how much it's allowed to write, give up after 60 seconds with the reason shown, and put a seconds counter on the screen so you know it's alive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then I broke git.&lt;/strong&gt; I'd committed Python's cache files to the repo by accident, and the next &lt;code&gt;git pull&lt;/code&gt; refused to run. Very much the deadline-day energy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then I fixed the seasons.&lt;/strong&gt; Lagos doesn't do autumn. Neither does anywhere near the equator, and a naive "it's October, so leaves are turning" gets that completely wrong. So Blade works out a climate band from your latitude and knows the tropics are a different deal.&lt;/p&gt;

&lt;p&gt;I also added an opt-in switch that looks up the real local weather and what other people have recorded nearby on iNaturalist, so a task can say "look for a Northern Cardinal, someone saw one near here this week". It's off by default, it rounds your location to about a kilometre before sending anything, and with no network it quietly gives you the offline card. Those species names come from real records, never from the model.&lt;/p&gt;

&lt;p&gt;Forty-one tests later, I finally went outside.&lt;/p&gt;

&lt;p&gt;I went out from 4:01 to 4:28 pm in Lagos, Nigeria. Twenty-seven minutes. I followed the rules on the card: I did the tasks, and the phone stayed away. The card said:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Walk to the nearest park.&lt;/li&gt;
&lt;li&gt;Watch rain on leaves. Listen to it.&lt;/li&gt;
&lt;li&gt;See or hear different birds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was no rain.&lt;/p&gt;

&lt;p&gt;Not a drop. The app had cheerfully told me to go and listen to rain that wasn't happening. Without the weather lookup on, Blade has no idea what the sky is doing, and I'd never told it that rain tasks should wait for actual rain. I'd tested the logic. I had not tested the world. A real walk found in 27 minutes what a pile of tests didn't. Rain tasks now only appear when the weather says rain, there's a test for a dry day in Lagos, and while I was in there I stopped it from suggesting frost patterns in warm places too.&lt;/p&gt;

&lt;p&gt;What I actually noticed had nothing to do with the card: a dove, a pelican and a mango tree.&lt;/p&gt;

&lt;p&gt;I came home, pressed "Blade complete", and the app said... "Blade complete." That's it. I'd just seen a pelican and my app had the emotional range of a vending machine.&lt;/p&gt;

&lt;p&gt;So I added one more thing. After you finish, there's now a small box: &lt;em&gt;What did you notice?&lt;/em&gt; You type a few words and Gemma answers in a line or two. It only ever sees what you wrote, it can't add animals you didn't mention, and if its answer rambles or turns into a question it gets thrown out for a plain fixed line.&lt;/p&gt;

&lt;p&gt;I typed in "a dove, a pelican, a mango tree". It said:&lt;/p&gt;

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

&lt;p&gt;This isn't a slogan for me, because the day gave me real examples.&lt;/p&gt;

&lt;p&gt;When my laptop couldn't load the 4B model, I changed one setting and used a smaller one. With a closed API there's no smaller one to fall back to. You pay, or you don't.&lt;/p&gt;

&lt;p&gt;Most of the app works with no signal, because the sun maths and the climate logic are just code on your machine and the model runs locally. A park with no coverage is exactly where this should work.&lt;/p&gt;

&lt;p&gt;And my location stays on my laptop. The one optional feature that does phone out says so in plain words, and rounds the location first. There's no key, no account and nothing to pay for.&lt;/p&gt;

&lt;p&gt;Where a closed model would have won: Gemma 1B writes plainer than a big frontier model. That's why I fenced it in so hard, with a menu of real tasks, validated output and a fallback. For a card you read in ten seconds before you leave the house, I'd make that trade again.&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, run locally through Ollama, writes every card and every reply.&lt;/p&gt;

&lt;p&gt;Step outside. Touch a blade. Notice the world.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>mlhacks</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:15:14 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/-505j</link>
      <guid>https://dev.to/thisisfeekey/-505j</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5" class="crayons-story__hidden-navigation-link"&gt;TeachBack: You don't know it, until you can teach it back!&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/thisisfeekey" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" alt="thisisfeekey profile" class="crayons-avatar__image" width="356" height="356"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thisisfeekey" class="crayons-story__secondary fw-medium m:hidden"&gt;
              JUKUN MAN WITH SME POWER
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                JUKUN MAN WITH SME POWER
                
                
              
              &lt;div id="story-author-preview-content-4799339" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thisisfeekey" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" class="crayons-avatar__image" alt="" width="356" height="356"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;JUKUN MAN WITH SME POWER&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5" id="article-link-4799339"&gt;
          TeachBack: You don't know it, until you can teach it back!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>education</category>
      <category>learning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>TeachBack: You don't know it, until you can teach it back!</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:14:51 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5</link>
      <guid>https://dev.to/thisisfeekey/teachback-you-dont-know-it-until-you-can-teach-it-back-1ei5</guid>
      <description>&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%2Fd4rbamm0vcjck3as3agm.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%2Fd4rbamm0vcjck3as3agm.png" alt=" " width="799" height="371"&gt;&lt;/a&gt;  Built for a friend learning Python after exhausting shifts at an electricity distribution company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Friend &amp;amp; The Friction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My buddy works a grueling 9 to 5 at a local electricity distribution company. He's been trying to break into Python, but he's trapped in the classic "tutorial hell": endless YouTube playlists, passive video watching, and synthetic projects like "build a calculator" that have zero relevance to his actual life.&lt;/p&gt;

&lt;p&gt;We kept promising each other we'd jump on Discord for study sessions, but life kept getting in the way. By the time he finishes dealing with feeder voltages, blackout reports, and transformer glitches, he's drained and barely has the energy to look at a keyboard, let alone schedule a live call. Our working hours almost never aligned. I realized he needed something he could run entirely on his own schedule: a self paced learning tool that could act as a live study partner without needing me (or anyone else) on the other end of a call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Spark &amp;amp; The Idea&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Around the same time, I applied to teach for Stanford's Code in Place. As part of the application, they had me teach a simulated classroom of three virtual students who watched my screen, listened, and asked sharp questions.&lt;/p&gt;

&lt;p&gt;It clicked: the fastest way to figure out if you actually understand something isn't reading about it, it's explaining it to someone else.&lt;/p&gt;

&lt;p&gt;Most platforms follow a rigid pipeline: &lt;br&gt;
   Theory &lt;br&gt;
      ⬇️&lt;br&gt;
   Practice&lt;br&gt;
      ⬇️ &lt;br&gt;
   Workshop. &lt;br&gt;
But passive comprehension is a trap; you think you get it until you try to say it out loud. I wanted to add the crucial missing fourth step: "Teach."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TeachBack is a lightweight learning platform you use in the browser, run from a small local server on your own computer. It's tailored to my friend's reality:&lt;/p&gt;

&lt;p&gt;8 tailored lessons using data from his world: meter readings, line loads, and outage priorities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-browser Python&lt;/strong&gt;, so there's no Python installation to wrestle with after an 8-hour shift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Teach" phase:&lt;/strong&gt; instead of a quiz, he explains the code to three distinct AI students:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maya:&lt;/strong&gt; the curious one who always asks &lt;em&gt;why&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kofi:&lt;/strong&gt; the edge-case guy who asks what breaks when inputs go sideways.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zee:&lt;/strong&gt; the beginner who needs everything in plain, simple words.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An objective examiner:&lt;/strong&gt; a second AI agent that reads what he says (as text) and checks whether he explained each core idea in his own words. If it can't point to words he actually said, the explanation is rejected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Capstone:&lt;/strong&gt; his final project is to design his own certificate in Python. Once he builds it and teaches the code back, the app shows the certificate he made.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AliFikan94" rel="noopener noreferrer"&gt;
        AliFikan94
      &lt;/a&gt; / &lt;a href="https://github.com/AliFikan94/hacktober26" rel="noopener noreferrer"&gt;
        hacktober26
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🎓 TeachBack&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Honest status (hackathon submission).&lt;/strong&gt; TeachBack's lessons, in-browser Python runner, capstone, certificate, model picker, privacy panel and the Teach logic (students, examiner, voice loop) are implemented and covered by automated tests and browser tests against &lt;em&gt;simulated&lt;/em&gt; model servers. On the author's low-memory PC (about 2.5 GB free RAM) the Teach conversation was &lt;strong&gt;not&lt;/strong&gt; verified end to end with a real local Gemma before the deadline, and its cause was not pinned down. The in-app &lt;strong&gt;Test the students&lt;/strong&gt; and &lt;strong&gt;Test the microphone&lt;/strong&gt; buttons (model menu, top right) and &lt;code&gt;npm run doctor&lt;/code&gt; exist to diagnose exactly that. It has not been tested by the friend it was built for.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Theory → Practice → Workshop → &lt;em&gt;Teach&lt;/em&gt;.&lt;/strong&gt;
A learn-and-teach platform built for a friend who works 9–5 at an electricity distribution company, wants to learn Python, and is too tired to type after work.&lt;/p&gt;
&lt;p&gt;Each lesson has four phases: 📖 &lt;strong&gt;Theory&lt;/strong&gt;…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AliFikan94/hacktober26" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository: &lt;a href="https://github.com/AliFikan94/hacktober26" rel="noopener noreferrer"&gt;github.com/AliFikan94/hacktober26&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Open-source AI and tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight models through Ollama&lt;/strong&gt; running locally. My target was Gemma 3 (I pulled &lt;code&gt;gemma3:4b&lt;/code&gt; and &lt;code&gt;gemma3:1b&lt;/code&gt;), reached through Ollama's OpenAI-compatible endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mastra&lt;/strong&gt; for the agents: four of them (Maya, Kofi, Zee and the examiner), each with its own instructions. A simple rule picks which student speaks, based on what the learner just said.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pyodide&lt;/strong&gt; (Python compiled to WebAssembly) so Python runs inside the page.&lt;/li&gt;
&lt;li&gt;A small &lt;strong&gt;TypeScript/Node&lt;/strong&gt; server streams each student's reply to the browser as soon as it's ready. The browser's built-in speech tools handle voice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How the examiner stays honest:&lt;/strong&gt; it must quote the learner's own words as evidence, and the server rejects any quote that isn't really in what they said. If a small model can't answer in the required format, a labelled keyword check takes over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built with AI assistance:&lt;/strong&gt; I built this with an AI coding assistant (Claude Code), working under my direction.&lt;/p&gt;

&lt;p&gt;The Honest Part: What Didn't Work&lt;/p&gt;

&lt;p&gt;I'm submitting this with complete honesty about its rough edges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardware constraints:&lt;/strong&gt; A 4B Gemma model needs around 4 GB of free RAM, but my test PC only had about 2.5 GB. I built an automatic memory check that steps down to a smaller model, or to a cloud model (and says so), when hardware is tight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small model formatting:&lt;/strong&gt; Tiny local models love to answer in paragraphs instead of structured JSON. Hence the fallback keyword check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice fragility:&lt;/strong&gt; Browser speech recognition behaves differently across platforms. I added microphone diagnostics with plain-English error messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end testing:&lt;/strong&gt; The Teach system passes automated tests against simulated models, but I couldn't get the full local conversation working on my low-spec machine before the deadline. My friend also hasn't done a full run-through yet, so I don't have a quote from him... yet!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I Learned&lt;/p&gt;

&lt;p&gt;Building an AI tool for a real person with a real job and real hardware limits is humbling. The hard part wasn't writing prompts, it was making open-source AI light enough to run on an everyday laptop. &lt;strong&gt;Next:&lt;/strong&gt; a lightweight hosted option for low-spec hardware, and getting my friend into a live session to test his outage-priority scripts.&lt;/p&gt;

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

&lt;p&gt;For a tired adult learner who is learning in the evenings, open models matter in three ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; his half-baked logic and "dumb questions" can stay on his own machine. (Browser voice recognition in Chrome and Edge sends audio to external servers, so the app tells you plainly that typing is the fully private option.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; a local model costs nothing to run every evening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; I can tune the students' personalities and the examiner's rules by editing prompts, which gives me far more control than a closed, rigid chatbot. I could also swap the model with one setting, which is exactly what let me adapt when my PC couldn't run the first one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Mastra:&lt;/strong&gt; four Mastra agents drive the students and the examiner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Gemma was my target model, but I couldn't show it running end to end, so I'm not entering that category.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>GM GM devs</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Thu, 30 Jul 2026 10:43:05 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/gm-gm-devs-1f36</link>
      <guid>https://dev.to/thisisfeekey/gm-gm-devs-1f36</guid>
      <description></description>
    </item>
    <item>
      <title>GM GM guys, what are you buidling???</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Tue, 14 Jul 2026 18:56:48 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/gm-gm-guys-what-are-you-buidling-5abo</link>
      <guid>https://dev.to/thisisfeekey/gm-gm-guys-what-are-you-buidling-5abo</guid>
      <description></description>
      <category>discuss</category>
      <category>sideprojects</category>
      <category>watercooler</category>
      <category>web3</category>
    </item>
    <item>
      <title>https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 13 Jul 2026 05:49:28 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/-3k6h</link>
      <guid>https://dev.to/thisisfeekey/-3k6h</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-story__hidden-navigation-link"&gt;🥊 Tyson: Knockout Audio for Solo Creators (Without the $300 Hardware) | Weekend Challenge&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/thisisfeekey" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" alt="thisisfeekey profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thisisfeekey" class="crayons-story__secondary fw-medium m:hidden"&gt;
              JUKUN MAN WITH SME POWER
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                JUKUN MAN WITH SME POWER
                
              
              &lt;div id="story-author-preview-content-4129721" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thisisfeekey" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;JUKUN MAN WITH SME POWER&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 13&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" id="article-link-4129721"&gt;
          🥊 Tyson: Knockout Audio for Solo Creators (Without the $300 Hardware) | Weekend Challenge
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>My Debut #weekendchallenge</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 13 Jul 2026 05:48:06 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/my-debut-weekendchallenge-1l39</link>
      <guid>https://dev.to/thisisfeekey/my-debut-weekendchallenge-1l39</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-story__hidden-navigation-link"&gt;🥊 Tyson: Knockout Audio for Solo Creators (Without the $300 Hardware) | Weekend Challenge&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/thisisfeekey" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" alt="thisisfeekey profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thisisfeekey" class="crayons-story__secondary fw-medium m:hidden"&gt;
              JUKUN MAN WITH SME POWER
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                JUKUN MAN WITH SME POWER
                
              
              &lt;div id="story-author-preview-content-4129721" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thisisfeekey" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F840579%2Fa42f9e50-d8bb-4d5f-8194-76fc1aa0705d.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;JUKUN MAN WITH SME POWER&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 13&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" id="article-link-4129721"&gt;
          🥊 Tyson: Knockout Audio for Solo Creators (Without the $300 Hardware) | Weekend Challenge
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>tools</category>
    </item>
    <item>
      <title>🥊 Tyson: Knockout Audio for Solo Creators (Without the $300 Hardware) | Weekend Challenge</title>
      <dc:creator>JUKUN MAN WITH SME POWER</dc:creator>
      <pubDate>Mon, 13 Jul 2026 05:38:01 +0000</pubDate>
      <link>https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8</link>
      <guid>https://dev.to/thisisfeekey/tyson-knockout-audio-for-solo-creators-without-the-300-hardware-weekend-challenge-5dj8</guid>
      <description>&lt;p&gt;🥊 Tyson - The Wireless Phone Mic App That Packs a Punch&lt;/p&gt;

&lt;p&gt;This is a submission for the Weekend Challenge!&lt;/p&gt;

&lt;p&gt;🎙️ What I Built&lt;br&gt;
Let’s be honest: solo content creators are tired of holding their secondary phones awkwardly like makeshift reporter mics or spending $300+ on bulky wireless lavalier setups that require dongles, cases, and endless charging cables.&lt;/p&gt;

&lt;p&gt;Enter Tyson (a.k.a. Tai Sun). It's a cross-platform Flutter app designed to turn the smartphone you already own into a dedicated, heavy-hitting wireless microphone system.&lt;/p&gt;

&lt;p&gt;By separating the workflow into a dual-device ecosystem, Tyson lets you use one phone as the sharp Camera/Director angle and a second phone as the high-fidelity Mic, delivering studio-quality sound directly from your pocket.&lt;/p&gt;

&lt;p&gt;⚡ Key Features (The Heavy Hitters)&lt;br&gt;
Dual-Device Ecosystem: Dedicated Mic Mode (with absolute UI lock to prevent accidental palm-touches) and Camera Mode layout.&lt;/p&gt;

&lt;p&gt;Smart Environmental Presets: Instant switching between Indoor and Outdoor profiles. Outdoor mode activates automatic noise gating and suppression to fight ambient chaos (like traffic or wind noise).&lt;/p&gt;

&lt;p&gt;Custom Voice Profiles: Tailor your sound signature on the fly with Clean, Voice, Podcast, and Warm DSP configurations.&lt;/p&gt;

&lt;p&gt;Seamless QR &amp;amp; Room Code Pairing: Zero-friction device discovery, laying the groundwork for automatic local Hotspot/WebSocket connectivity.&lt;/p&gt;

&lt;p&gt;Simulated "Stop &amp;amp; Mux" Flow: Hits the absolute biggest pain point in filmmaking. Once you hit stop, the mic phone automatically simulates background file transfer to the camera phone for instant track alignment.&lt;/p&gt;

&lt;p&gt;💡 Inspiration&lt;br&gt;
I was watching creators shoot content and noticed a painful pattern: people either sounded like they were recording inside a tin can, or they looked ridiculous shouting into a phone held two inches from their mouth. Flagsip phones have insane microphone hardware built right into them, yet no one was utilizing it as a standalone, smart wireless receiver.&lt;/p&gt;

&lt;p&gt;I decided to build an underdog app that bites the noise right out of your audio—hence the name Tyson.&lt;/p&gt;

&lt;p&gt;The Climax: Hitting Stop 🛑 and watching the app automatically package and transfer the audio file to the Director phone.&lt;/p&gt;

&lt;p&gt;Live Demo: Want to take it for a spin? The Android APK is built and ready in the repository releases.&lt;/p&gt;

&lt;p&gt;🛠️ How I Built It&lt;br&gt;
Tyson was built entirely from scratch over the weekend using a nimble, high-performance stack:&lt;/p&gt;

&lt;p&gt;Framework: Flutter (Dart) – Compiled down to native ARM code to keep audio buffer latency tight and UI fluid across iOS and Android.&lt;/p&gt;

&lt;p&gt;Audio Capture: The record package, heavily modified with custom system presets for noise suppression and hardware gain control.&lt;/p&gt;

&lt;p&gt;Playback Engine: audioplayers for crisp local audio verification.&lt;/p&gt;

&lt;p&gt;Pairing UI: qr_flutter for instant cross-device handshake generation.&lt;/p&gt;

&lt;p&gt;🏗️ Core Architecture&lt;br&gt;
MIC Transmitter Mode: Background-priority capture state optimized to save battery and reduce thermal throttling while processing real-time audio.&lt;/p&gt;

&lt;p&gt;CAMERA Receiver Mode: A dedicated placeholder interface designed to display received audio metadata and eventual video preview syncing.&lt;/p&gt;

&lt;p&gt;🥊 Challenges &amp;amp; Knockouts&lt;br&gt;
The Camera Plugin Brawl: The native Flutter camera plugin decided to throw a temper tantrum on my environment configuration during the crunch window. Instead of getting stuck in dependency hell, I pivoted like a pro—focusing 100% of my energy on perfecting the core audio processing, DSP presets, and wireless transfer UX.&lt;/p&gt;

&lt;p&gt;Taming the Noise: Getting standard mobile audio APIs to reliably separate background hiss from real human voice without heavy delay took some intense fine-tuning.&lt;/p&gt;

&lt;p&gt;🧠 What I Learned&lt;br&gt;
How to handle low-level device audio streams and apply real-time operating system filters without killing the device's battery.&lt;/p&gt;

&lt;p&gt;Designing state architecture that cleanly handles simulated network data flows so the code is structurally ready for live WebSockets/UDP streaming next.&lt;/p&gt;

&lt;p&gt;Huge thanks to the organizers for putting together this weekend challenge! Time to go refresh the GitHub repo and get back to building. 🥊&lt;/p&gt;

&lt;p&gt;GitHub Repository: github.com/AliFikan94/Tyson&lt;/p&gt;

&lt;h1&gt;
  
  
  weekendchallenge #devchallenge #flutter #mobile #audio
&lt;/h1&gt;

</description>
    </item>
  </channel>
</rss>
