<?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: Sanket Deore</title>
    <description>The latest articles on DEV Community by Sanket Deore (@sanket_deore).</description>
    <link>https://dev.to/sanket_deore</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%2F4096958%2F31c0eedd-ce17-4e0e-86d9-f06a334979ef.png</url>
      <title>DEV Community: Sanket Deore</title>
      <link>https://dev.to/sanket_deore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanket_deore"/>
    <language>en</language>
    <item>
      <title>PitchPilot</title>
      <dc:creator>Sanket Deore</dc:creator>
      <pubDate>Fri, 23 Oct 2026 15:04:34 +0000</pubDate>
      <link>https://dev.to/sanket_deore/pitchpilot-amc</link>
      <guid>https://dev.to/sanket_deore/pitchpilot-amc</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;PitchPilot&lt;/strong&gt;, a local AI assistant that helps freelancers and solo creators turn rough client notes into polished project proposals, scope documents, estimates, and follow-up messages.&lt;/p&gt;

&lt;p&gt;The problem is simple: doing the actual work is often easier than selling the work.&lt;/p&gt;

&lt;p&gt;A freelancer might receive something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Need a landing page for our new product.
Probably 5 sections.
Need it by next Friday.
We already have branding.
Budget around $800.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PitchPilot turns that into a structured draft containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;project summary&lt;/li&gt;
&lt;li&gt;deliverables&lt;/li&gt;
&lt;li&gt;scope boundaries&lt;/li&gt;
&lt;li&gt;estimated timeline&lt;/li&gt;
&lt;li&gt;pricing breakdown&lt;/li&gt;
&lt;li&gt;assumptions&lt;/li&gt;
&lt;li&gt;revision limits&lt;/li&gt;
&lt;li&gt;suggested next steps&lt;/li&gt;
&lt;li&gt;client follow-up message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of spending 30–60 minutes writing a proposal from scratch, the freelancer gets a usable first draft in seconds and only needs to review it.&lt;/p&gt;

&lt;p&gt;The people who could pay for it are freelancers, consultants, developers, designers, marketers, photographers, and other solo service businesses that repeatedly write proposals for potential clients.&lt;/p&gt;

&lt;p&gt;The business model could be a simple one-time paid desktop app instead of another monthly AI subscription.&lt;/p&gt;

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

&lt;p&gt;The demo starts with an intentionally messy client request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Shopify store redesign.
Around 12 products.
Client wants something cleaner and faster.
Need mobile optimization.
Maybe newsletter setup too.
Budget is around $1,500.
Would like it done in three weeks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PitchPilot converts it into a structured proposal containing a clear scope, milestones, deliverables, estimated price, exclusions, and a ready-to-send client message.&lt;/p&gt;

&lt;p&gt;Because inference runs locally, the client brief never needs to leave the freelancer's computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR DEMO / VIDEO LINK HERE]&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;PitchPilot is open source and designed to run locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR GITHUB REPOSITORY HERE]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A typical setup looks like:&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 &lt;span class="o"&gt;[&lt;/span&gt;YOUR_REPOSITORY]
&lt;span class="nb"&gt;cd &lt;/span&gt;pitchpilot

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

ollama pull qwen3:4b

python app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No AI API key is required.&lt;/p&gt;

&lt;p&gt;Once the model is downloaded, proposal generation can run locally.&lt;/p&gt;

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

&lt;p&gt;PitchPilot uses &lt;strong&gt;Ollama&lt;/strong&gt; for local inference and an &lt;strong&gt;open-weight Qwen3 model&lt;/strong&gt; as its reasoning and writing engine.&lt;/p&gt;

&lt;p&gt;The application takes an unstructured client brief and combines it with information such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service: Web development
Hourly rate: $60
Minimum project: $500
Revisions included: 2
Typical delivery: 2-4 weeks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of asking the model to generate one giant block of text, PitchPilot first generates structured proposal data.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"project_title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Shopify Store Redesign"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deliverables"&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="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Responsive Shopify storefront redesign"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Mobile optimization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Product page improvements"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Newsletter signup integration"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3 weeks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"estimated_price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"revisions"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application validates that structure and then turns it into the final client-facing proposal.&lt;/p&gt;

&lt;p&gt;I separated the project into a few simple layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Brief
     ↓
Open-Weight Model
     ↓
Structured Proposal
     ↓
Validation
     ↓
Proposal / Estimate / Client Message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model is also configurable.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py &lt;span class="nt"&gt;--model&lt;/span&gt; qwen3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be changed to another locally installed compatible model.&lt;/p&gt;

&lt;p&gt;That means users are not locked into the model I originally selected.&lt;/p&gt;

&lt;p&gt;The open model is not just an extra feature. It handles the main value of the application: understanding an incomplete client request and converting it into a professional business document.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters here because freelancers regularly work with information that should not automatically be sent to an external AI provider.&lt;/p&gt;

&lt;p&gt;A client brief might contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Unreleased product details
Internal company problems
Customer information
Pricing
Budgets
Credentials
Contract requirements
Business strategy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With PitchPilot, that information can stay on the freelancer's own machine.&lt;/p&gt;

&lt;p&gt;That is particularly important for freelancers working under NDAs or handling confidential client projects.&lt;/p&gt;

&lt;p&gt;Running an open-weight model also changes the economics.&lt;/p&gt;

&lt;p&gt;If someone generates dozens of proposals every month through a paid API, every generation has a cost.&lt;/p&gt;

&lt;p&gt;With local inference, the user can download the model once and keep using it without paying for every proposal.&lt;/p&gt;

&lt;p&gt;It also gives me control over the product.&lt;/p&gt;

&lt;p&gt;I can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;change the system prompt&lt;/li&gt;
&lt;li&gt;add industry-specific proposal styles&lt;/li&gt;
&lt;li&gt;switch models&lt;/li&gt;
&lt;li&gt;run smaller models on lightweight hardware&lt;/li&gt;
&lt;li&gt;use larger models when more compute is available&lt;/li&gt;
&lt;li&gt;fine-tune a model for a particular profession&lt;/li&gt;
&lt;li&gt;build offline workflows&lt;/li&gt;
&lt;li&gt;avoid depending on one AI vendor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API could generate proposals too.&lt;/p&gt;

&lt;p&gt;But an open-weight model makes it possible to build PitchPilot as a tool the freelancer can actually own rather than another service they permanently rent.&lt;/p&gt;

&lt;p&gt;For a project aimed at helping people make money from their skills, that difference matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used an AI-assisted development workflow while designing PitchPilot, particularly for exploring the architecture, defining the structured-output format, improving the local inference workflow, and thinking through the freelancer experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevRelay session:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR DEVRELAY SESSION HERE]&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>SlothSort</title>
      <dc:creator>Sanket Deore</dc:creator>
      <pubDate>Fri, 23 Oct 2026 14:12:58 +0000</pubDate>
      <link>https://dev.to/sanket_deore/slothsort-4ne2</link>
      <guid>https://dev.to/sanket_deore/slothsort-4ne2</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 built &lt;strong&gt;SlothSort&lt;/strong&gt;, a local AI file organizer for people who keep saying, “I’ll clean that folder later.”&lt;/p&gt;

&lt;p&gt;You point SlothSort at a messy folder like &lt;code&gt;Downloads&lt;/code&gt;, &lt;code&gt;Desktop&lt;/code&gt;, or a project dump, and it uses a locally running open-weight model to suggest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cleaner filenames&lt;/li&gt;
&lt;li&gt;sensible folders&lt;/li&gt;
&lt;li&gt;which files belong together&lt;/li&gt;
&lt;li&gt;a short explanation for every decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part: &lt;strong&gt;SlothSort does not immediately move anything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It creates a dry-run plan first, so I can review what the AI wants to do before applying it.&lt;/p&gt;

&lt;p&gt;The workflow is basically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;slothsort ~/Downloads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the plan.&lt;/p&gt;

&lt;p&gt;Then, if it looks good:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;slothsort ~/Downloads &lt;span class="nt"&gt;--apply&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It turns a task I repeatedly procrastinate on into something closer to approving a checklist.&lt;/p&gt;

&lt;p&gt;Very sloth-friendly.&lt;/p&gt;

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

&lt;p&gt;The demo shows SlothSort taking a deliberately messy folder containing screenshots, PDFs, invoices, notes, images, and random downloads and turning it into a clean organization plan.&lt;/p&gt;

&lt;p&gt;Because the model runs locally, the demo also works without sending the filenames or file contents to an external AI service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR DEMO / VIDEO LINK HERE]&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is open source and designed to be easy to run on a normal laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR GITHUB REPOSITORY HERE]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The basic setup is:&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 &lt;span class="o"&gt;[&lt;/span&gt;YOUR_REPOSITORY]
&lt;span class="nb"&gt;cd &lt;/span&gt;slothsort

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
ollama pull qwen3:4b

python &lt;span class="nt"&gt;-m&lt;/span&gt; slothsort ~/Downloads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SlothSort defaults to preview mode, so nothing is changed unless &lt;code&gt;--apply&lt;/code&gt; is explicitly provided.&lt;/p&gt;

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

&lt;p&gt;SlothSort is built around &lt;strong&gt;local inference with Ollama and an open-weight Qwen3 model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of asking the model for a paragraph describing what it thinks should happen, SlothSort requests structured output representing a file-operation plan.&lt;/p&gt;

&lt;p&gt;Conceptually, the model receives metadata such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IMG_4821.png
bank_statement_june.pdf
Screenshot 2026-10-18.png
notes-final-final2.txt
invoice_acme_1042.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and returns structured suggestions similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"operations"&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="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invoice_acme_1042.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Finance/Invoices/Acme_Invoice_1042.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The filename indicates that this is an invoice from Acme."&lt;/span&gt;&lt;span class="w"&gt;
    &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="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application validates that plan before touching the filesystem.&lt;/p&gt;

&lt;p&gt;I intentionally separated the &lt;strong&gt;AI decision layer&lt;/strong&gt; from the &lt;strong&gt;file-operation layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The model can suggest actions, but ordinary application code decides whether those actions are valid and safe.&lt;/p&gt;

&lt;p&gt;That also makes the model replaceable.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;slothsort ~/Downloads &lt;span class="nt"&gt;--model&lt;/span&gt; qwen3:4b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be changed to another locally available model without rewriting the application.&lt;/p&gt;

&lt;p&gt;The AI is not an optional chatbot bolted onto the project. The open-weight model is the component doing the tedious part: interpreting messy human filenames and turning them into useful organization decisions.&lt;/p&gt;

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

&lt;p&gt;For this project, running an open-weight model locally changes the product itself.&lt;/p&gt;

&lt;p&gt;A file organizer can see surprisingly personal information.&lt;/p&gt;

&lt;p&gt;Even filenames can reveal things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;medical_results.pdf
salary_revision.pdf
passport_scan.jpg
client_contract_draft.docx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I did not want organizing those files to require sending that information to a server I do not control.&lt;/p&gt;

&lt;p&gt;With local inference, the workflow can stay on the user's machine.&lt;/p&gt;

&lt;p&gt;There is another advantage: &lt;strong&gt;SlothSort is not tied to one AI provider.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a different open model works better, I can swap it.&lt;/p&gt;

&lt;p&gt;If I want a smaller model for an old laptop, I can use one.&lt;/p&gt;

&lt;p&gt;If I want a larger model on a workstation, I can use that instead.&lt;/p&gt;

&lt;p&gt;If I want to customize the prompts or fine-tune a model around a specific filing system, I can do that too.&lt;/p&gt;

&lt;p&gt;There is no API key required for every run, no per-file inference bill, and no dependency on a remote service remaining available.&lt;/p&gt;

&lt;p&gt;A closed API could certainly classify files, but the open approach gives this particular project the properties I actually wanted:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;privacy, offline operation, model choice, hackability, and local ownership.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are not implementation details here. They are features.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used an AI-assisted development workflow while designing and building SlothSort, including thinking through the architecture, safety boundaries, CLI experience, and local-model integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevRelay session:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;[ADD YOUR DEVRELAY SESSION HERE]&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;File organization is rarely difficult.&lt;/p&gt;

&lt;p&gt;It is just annoying enough to keep postponing.&lt;/p&gt;

&lt;p&gt;Normally the workflow looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;open file → figure out what it is → decide where it belongs → rename it → move it → repeat 50 times&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With SlothSort, it becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;scan folder → review plan → approve&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I still keep the human in control, but I remove most of the tiny repetitive decisions.&lt;/p&gt;

&lt;p&gt;That is the kind of laziness I wanted for this challenge: not avoiding useful work entirely, but letting the computer handle the boring part so I only have to make the decisions that matter.&lt;/p&gt;

&lt;p&gt;Slow and steady.&lt;/p&gt;

&lt;p&gt;Preferably while doing almost nothing.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I built a tool to help my friend in the next interview.</title>
      <dc:creator>Sanket Deore</dc:creator>
      <pubDate>Sat, 03 Oct 2026 17:42:34 +0000</pubDate>
      <link>https://dev.to/sanket_deore/i-built-a-tool-to-help-my-friend-in-the-next-interview-o75</link>
      <guid>https://dev.to/sanket_deore/i-built-a-tool-to-help-my-friend-in-the-next-interview-o75</guid>
      <description>&lt;p&gt;PostMortem&lt;br&gt;
What I Built&lt;/p&gt;

&lt;p&gt;A close friend of mine had just finished another tech interview and sat there trying to explain to me how it went. She remembered the questions and her answers, but she couldn't figure out what went wrong. No feedback, no reply, just silence. She was giving interview after interview and getting more demoralized every time.&lt;/p&gt;

&lt;p&gt;Getting rejected in tech interviews sucks, but getting ghosted and never knowing why is worse.&lt;/p&gt;

&lt;p&gt;So I built PostMortem for her. It is an interview post-mortem app designed for one person to dump an interview the exact way she remembers it. The app automatically tags her weak spots like rambling or missing metrics, and counts which mistakes keep showing up across multiple interviews. It generates targeted practice drills to help her fix them.&lt;/p&gt;

&lt;p&gt;It has three parts:&lt;/p&gt;

&lt;p&gt;Debrief&lt;/p&gt;

&lt;p&gt;Saves the company, role, outcome, and her raw Q-and-A text dump, then tags each answer.&lt;/p&gt;

&lt;p&gt;Patterns&lt;/p&gt;

&lt;p&gt;Totals those tags across interviews with trend arrows and streak counters.&lt;/p&gt;

&lt;p&gt;Drill&lt;/p&gt;

&lt;p&gt;Asks five practice questions, scores her responses, and rewrites a stronger version of what she actually said.&lt;/p&gt;

&lt;p&gt;Demo&lt;/p&gt;

&lt;p&gt;Live URL: &lt;a href="https://post-mortem-iota.vercel.app/" rel="noopener noreferrer"&gt;https://post-mortem-iota.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/sanketdeore/PostMortem" rel="noopener noreferrer"&gt;https://github.com/sanketdeore/PostMortem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PostMortem&lt;/p&gt;

&lt;p&gt;An interview post-mortem coach for one person.&lt;/p&gt;

&lt;p&gt;She does the interview, gets rejected or ghosted, and never learns why. Rejections never come with feedback.&lt;/p&gt;

&lt;p&gt;PostMortem turns the interview the way she remembers it — a messy Q: / A: dump, or a voice note — into the weakness that keeps showing up, then gives her a drill aimed at that weakness.&lt;/p&gt;

&lt;p&gt;Open-source models only. Nothing in this repo calls OpenAI or Anthropic. Every model call goes through Ollama on her machine, Backboard's open-weight models, or a Tinker fine-tune. With no keys set, the heuristic analyzer still tags answers.&lt;/p&gt;

&lt;p&gt;What It Does&lt;/p&gt;

&lt;p&gt;Debrief. Company, role, outcome, and a dump of what they asked and what she said. Optional .m4a / .mp3 voice note, transcribed locally with faster-whisper and deleted. The audio never leaves the machine.&lt;/p&gt;

&lt;p&gt;Patterns. Weakness tags counted across interviews (no_metrics — 7x in 4 sessions), with trend arrows and streak counters.&lt;/p&gt;

&lt;p&gt;Drill. Five targeted practice questions based on recurring weaknesses. Responses are scored and rewritten into stronger versions of what she actually said.&lt;/p&gt;

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

&lt;p&gt;PostMortem is built around open-weight models with flexible inference backends chosen by an ANALYZER setting in .env:&lt;/p&gt;

&lt;p&gt;Debrief (POST /debrief)&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
   Split Q/A&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
    analyze()&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
SQLite (weakness_tag)&lt;br&gt;
        │&lt;br&gt;
        ├──────────────────────────────┐&lt;br&gt;
        │                              │&lt;br&gt;
        ▼                              ▼&lt;br&gt;
Patterns (GET /patterns)        Drill (POST /drill/start)&lt;br&gt;
        │                              │&lt;br&gt;
        │                              ▼&lt;br&gt;
        │                       5 Questions&lt;br&gt;
        │                              │&lt;br&gt;
        │                              ▼&lt;br&gt;
        │                       Score &amp;amp; Rewrite&lt;br&gt;
        │                              │&lt;br&gt;
        │                              ▼&lt;br&gt;
        │                     Backboard Thread&lt;br&gt;
        │&lt;br&gt;
        └──── Count tags &amp;amp; Read Backboard&lt;/p&gt;

&lt;p&gt;Local Inference with Ollama&lt;/p&gt;

&lt;p&gt;By setting ANALYZER=ollama, PostMortem runs qwen2.5:7b completely locally on her laptop.&lt;/p&gt;

&lt;p&gt;Every model response is strictly parsed into JSON and checked with Pydantic. If an LLM returns bad JSON or hits a network error, it cleanly falls back to a rules-based heuristic tagger so the app never crashes.&lt;/p&gt;

&lt;p&gt;Local Audio Transcription&lt;/p&gt;

&lt;p&gt;If she records a voice memo right after an interview, she can upload .m4a or .mp3 files.&lt;/p&gt;

&lt;p&gt;The server transcribes them locally using faster-whisper, drops the text directly into the debrief textarea, and deletes the audio file immediately.&lt;/p&gt;

&lt;p&gt;Backboard Dual Integration&lt;/p&gt;

&lt;p&gt;Backboard does two separate jobs using open-weight models via the OpenRouter provider.&lt;/p&gt;

&lt;p&gt;First, when ANALYZER=backboard, BackboardAnalyzer tags answers with memory=off and json_output=true without writing to a thread.&lt;/p&gt;

&lt;p&gt;Second, on every scored drill — even when using the heuristic tagger — it appends the question, score, and top tags onto a single persistent Backboard assistant thread with memory=Auto.&lt;/p&gt;

&lt;p&gt;The Patterns page reads that thread back so her practice history persists across sessions.&lt;/p&gt;

&lt;p&gt;Fine-tuning with Tinker&lt;/p&gt;

&lt;p&gt;I used Tinker to LoRA fine-tune Qwen3-8B on her labeled interview answers (data/train.jsonl).&lt;/p&gt;

&lt;p&gt;I used Qwen3-8B here because Tinker does not serve Qwen2.5-7B, the model I run locally with Ollama.&lt;/p&gt;

&lt;p&gt;When ANALYZER=tinker, PostMortem samples the saved checkpoint.&lt;/p&gt;

&lt;p&gt;On a held-out test set of [N] answers, the fine-tuned model achieved 0.50 precision compared to 0.35 for the baseline heuristic rules, with [X] recall vs [Y] for the baseline.&lt;/p&gt;

&lt;p&gt;The dataset is small ([N] labeled answers), so treat these numbers as a promising start, not a benchmark.&lt;/p&gt;

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

&lt;p&gt;Open innovation was super important here for three big reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data Privacy You Can Actually Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Post-interview debriefs contain sensitive details about private company questions, salary talk, and personal mistakes.&lt;/p&gt;

&lt;p&gt;In local mode (Ollama + local Whisper), her raw debrief text and audio never leave her laptop and are never sent to closed API providers for training.&lt;/p&gt;

&lt;p&gt;If she opts into Backboard, only the question, score, and top tags are stored on the remote thread, never the full raw debrief.&lt;/p&gt;

&lt;p&gt;Because the models are open-weight, she gets to choose where that line sits.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Targeted Domain Fine-Tuning&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Generic closed APIs can miss subtle conversational flaws in behavioral answers.&lt;/p&gt;

&lt;p&gt;Fine-tuning open weights (Qwen3-8B) via Tinker allowed us to directly boost precision on her specific weakness categories like:&lt;/p&gt;

&lt;p&gt;rambling&lt;/p&gt;

&lt;p&gt;no_metrics&lt;/p&gt;

&lt;p&gt;weak_closing&lt;/p&gt;

&lt;p&gt;no_structure&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No Vendor Lock-in &amp;amp; Free to Run Locally&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The default analyzer is a heuristic engine, meaning the app works out of the box with zero API keys.&lt;/p&gt;

&lt;p&gt;When running locally with Ollama, she gets unlimited practice drills and post-mortems for $0 in subscriptions or tokens.&lt;/p&gt;

&lt;p&gt;Backboard and Tinker are optional upgrades, not requirements.&lt;/p&gt;

&lt;p&gt;The Goal&lt;/p&gt;

&lt;p&gt;PostMortem isn't trying to tell someone whether they got the interview right or wrong.&lt;/p&gt;

&lt;p&gt;It's designed to answer a much more useful question:&lt;/p&gt;

&lt;p&gt;"What keeps going wrong, and what can I practice before the next interview?"&lt;/p&gt;

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