<?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: Ishan Khan</title>
    <description>The latest articles on DEV Community by Ishan Khan (@devwishan).</description>
    <link>https://dev.to/devwishan</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%2F4182633%2F6a7c18c0-d2a9-4c76-a240-74f52af0df3a.jpg</url>
      <title>DEV Community: Ishan Khan</title>
      <link>https://dev.to/devwishan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devwishan"/>
    <language>en</language>
    <item>
      <title>Socratic Duck</title>
      <dc:creator>Ishan Khan</dc:creator>
      <pubDate>Sat, 31 Oct 2026 12:08:29 +0000</pubDate>
      <link>https://dev.to/devwishan/socratic-duck-1gp9</link>
      <guid>https://dev.to/devwishan/socratic-duck-1gp9</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;You know the rubber duck trick. You explain your bug out loud to a toy on your desk, and somewhere in the middle of the sentence you hear yourself and the problem just falls out. The duck never says a word. That's the whole trick.&lt;/p&gt;

&lt;p&gt;AI tools quietly broke that. Now I paste the error, get a fix, and move on without learning why it broke. I did this for months before I noticed I was getting faster and not any better.&lt;/p&gt;

&lt;p&gt;So I built the opposite. Socratic Duck reads your code or a screenshot of your error and asks you questions. Only questions. There's a four step hint ladder, and it starts at "what did you expect to happen?" and slowly gets pointier,It never reaches the fix.&lt;/p&gt;

&lt;p&gt;Beg for the answer and the patience meter drops. The duck gets grumpier. When my guard catches a reply that was about to give the game away, a rubber stamp slams down on screen: DUCK ALMOST BLABBED. When you finally work it out yourself, you hit Solved it and get a little case file with the root cause in plain words and one flashcard.&lt;/p&gt;

&lt;p&gt;Séance Mode is where the theme comes in. Flip the switch and the duck turns into the ghost of a dead language. COBOL, Fortran, Pascal, BASIC or ALGOL, your pick. The scene goes dark, the patience meter becomes a candle, the stamp becomes a wax seal. The spirit haunts your code and refuses to tell you what's wrong, same as the duck. Only the voice changes, the rules don't. Solve the bug and the case file turns into an ofrenda card, because a bug you actually understand gets laid to rest. &lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://socratic-duck.vercel.app/" rel="noopener noreferrer"&gt;https://socratic-duck.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&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/pythonperfec" rel="noopener noreferrer"&gt;
        pythonperfec
      &lt;/a&gt; / &lt;a href="https://github.com/pythonperfec/socratic-duck" rel="noopener noreferrer"&gt;
        socratic-duck
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       Most AI tools write your code for you. Socratic Duck does the opposite: it reads your bug (text or screenshot), asks questions until you find the cause yourself, and a guard harness blocks any reply that leaks the fix.
    &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;🦆 Socratic Duck&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/pythonperfec/socratic-duck/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e19d32ddd0fe35c406741f25b9b857f291780424f61b66afa7f884354256b8ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d7465616c2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://nodejs.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ae91a16485af5b85be247f01677caa9b67e6834c2dde78a1dfaa227e8137fdc3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d32302b2d3245394339412e737667" alt="Node.js"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ae360ea074fff8ba25568f4cdbea755eac32ac3e7fa67fdd83e38579788a32f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d47656d6d612532303425323028323642292d4635433430302e737667" alt="Gemma 4"&gt;&lt;/a&gt;
&lt;a href="https://hacktoberfest.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17e816559c70a51f18e5fa012d09766e96557c1be1aa6ee5bc07c2060515bb99/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d4632423642302e737667" alt="Hacktoberfest"&gt;&lt;/a&gt;
&lt;a href="https://events.mlh.io/events/15149-hacktoberfest-hack-day-new-delhi-x-south-asian-university" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/201728b3b2557c78fcb59a0ca60dda08e9aaac05b3e5c6d605697ad7fd33dcc3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d4c482d4861636b2532304461792532304e657725323044656c68692d3146324432442e737667" alt="MLH Hack Day"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A rubber duck debugging companion engineered to interrogate developers about their bugs using Socratic dialogue, strictly built to &lt;strong&gt;never&lt;/strong&gt; give the fix.&lt;br&gt;
Powered by Gemma 4 with an active two-stage guard harness that intercepts and neutralizes answer leaks before they reach the user.&lt;br&gt;
Wrapped in a tactile bathroom aesthetic—floating soap-bubble chat, an animated tiled bathtub, dynamic patience meter, and a slamming rubber stamp.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏛️ System Architecture&lt;/h2&gt;
&lt;/div&gt;

  &lt;div class="js-render-enrichment-target"&gt;
    &lt;div class="render-plaintext-hidden"&gt;
      &lt;pre&gt;flowchart TD
    subgraph Client ["Frontend: web/ (Vite + React)"]
        UI["Bathroom Workspace (styles.css)"]
        Tub["Bathtub with Animated Water &amp;amp; SVG Duck (4 Moods)"]
        Chat["Soap-Bubble Dialogue Thread"]
        Meter["Yellow Water-Level Patience Gauge (0-100)"]
        Stamp["Rubber Stamp: DUCK ALMOST BLABBED"]
        Case["Case File Post-Mortem &amp;amp; PDF Print Modal"]
    end
    subgraph Server ["Backend: server/ (Node.js Express ESM)"]
        API["POST /api/chat &amp;amp; POST /api/report"]
        subgraph ExecutionFlow ["Response Generation &amp;amp; Guard Flow"]
            ModelGen["1. Model Inference (generateFn)&amp;lt;br/&amp;gt;Google AI Studio Gemma 4"]
            Rule["2. Stage 1: Rule-Based Heuristic Regex&amp;lt;br/&amp;gt;Code fences, spans &amp;gt;20ch, forbidden phrases"]
            Judge["3.&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pythonperfec/socratic-duck" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Every reply goes through the same path: the model writes it, a rule check looks at it, a second model call judges it, and if either one says it leaks, the reply gets thrown away and regenerated. Two retries, then the duck falls back to a canned line asking something safe.&lt;br&gt;
The rule check is dumb on purpose. It catches code fences, phrases like "change this to that", "the fix is", things like that. The judge is another Gemma call that reads the reply and answers one question: did this reveal the fix?&lt;br&gt;
I needed both after something I only found by playing with it. The duck was in its squint mood, and it gave the answer away. No code, nothing the rule check could catch. It just explained the problem in a friendly sentence. Prose leaks are the hard ones, and that's the reason the judge exists.&lt;br&gt;
The benchmark taught me a lesson too. My first version reported 0% leaks with the guard off and 0% with it on. It looked great and it meant nothing, because I was grading replies with the guard's own detector. Of course it agreed with itself. I rebuilt it with a separate grader that gets the real fix for each bug, and three modes: a plain coding assistant, the duck prompt alone, and the duck with the guard. In the quick run the plain assistant leaked on 15 out of 15. The duck prompt alone and the full guard both held at 0 out of 15.&lt;/p&gt;

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

&lt;p&gt;Two backends. gemma-4-26b-a4b-it through Google AI Studio, and a small gemma:2b through Ollama for running offline. I want to be straight about this: the 26B one is a hosted call. The weights are open, but I'm not running them. The offline path is the small model, and it is noticeably weaker.&lt;/p&gt;

&lt;p&gt;The guard doesn't care which model sits underneath it. Change one line in the env file and the same checks run on a different model. The Socratic rules and hint ladder live in a plain prompt file and a SKILL.md, so anyone can fork the behavior and make a stricter duck or a gentler one.&lt;/p&gt;

&lt;p&gt;And it costs nothing to run locally, which let me hammer the benchmark hundreds of times without thinking about a bill.&lt;/p&gt;

&lt;p&gt;A hosted assistant is tuned to be as helpful as possible, and here, being helpful is the exact bug. Running my own model behind a guard I can read made it easier to see where it fails and fix that spot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;The ghost in the machine, to me, is the bug that's been sitting in your code the whole time. It already knows what's wrong. The duck is the ghost that knows too, and the only thing it will do is ask you the right question until you see it.&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 4 does all of the talking: it reads screenshots and code, asks the questions, judges its own replies for leaks, and writes the case file at the end&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>software</category>
    </item>
    <item>
      <title>FreelanceForge AI: Turn Raw Client Chaos into Billable Deliverables</title>
      <dc:creator>Ishan Khan</dc:creator>
      <pubDate>Wed, 14 Oct 2026 14:54:16 +0000</pubDate>
      <link>https://dev.to/devwishan/freelanceforge-ai-turn-raw-client-chaos-into-billable-deliverables-26d2</link>
      <guid>https://dev.to/devwishan/freelanceforge-ai-turn-raw-client-chaos-into-billable-deliverables-26d2</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;If you’ve ever freelanced or run a boutique consulting business, you know the drill: you finish a client call, look down at a notebook full of messy scribbles, and realize you now have two hours of unpaid admin work ahead of you.&lt;/p&gt;

&lt;p&gt;You need to turn those &lt;strong&gt;disjointed bullets into a professional proposal&lt;/strong&gt;, defend invoice hours so a client doesn’t question your bill, figure out how to push back on scope creep without sounding defensive, or draft a polite email chasing an overdue invoice.&lt;/p&gt;

&lt;p&gt;Most freelancers** lose between 20% and 30%** of their billable hours to this kind of administrative friction.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;FreelanceForge AI&lt;/strong&gt; to solve that problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FreelanceForge is a local-first, open-weight AI workspace designed specifically for freelancers, solopreneurs, and independent creators. Instead of relying on rigid SaaS forms or closed, metered AI APIs, it runs privately on your own machine using open weights (Llama 3.1 8B via Ollama), maintains persistent client memory across projects using Backboard, and formats rough thoughts into client-ready documents on an authentic tactile paper canvas.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;freelanceforge-ai.onrender.com&lt;br&gt;
&lt;strong&gt;Proposal Draft:&lt;/strong&gt;&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%2Frz6yjtrcys9gpjq4m3ve.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%2Frz6yjtrcys9gpjq4m3ve.PNG" alt=" " width="800" height="701"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invoice Value Justifier:&lt;/strong&gt;&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%2Fvv8g6n3kl8s8611biv0p.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%2Fvv8g6n3kl8s8611biv0p.PNG" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;br&gt;
**&lt;br&gt;
Scope Guardian:**&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%2Fmnv74zc42khcodwl2yw6.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%2Fmnv74zc42khcodwl2yw6.PNG" alt=" " width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt;&lt;br&gt;
&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/pythonperfec" rel="noopener noreferrer"&gt;
        pythonperfec
      &lt;/a&gt; / &lt;a href="https://github.com/pythonperfec/freelanceforge-ai" rel="noopener noreferrer"&gt;
        freelanceforge-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first, open-weight AI suite that helps freelancers draft winning proposals, defend billable hours, and remember client agreements. For submission to Hacktoberfest 2026 Week 2 Challenge: Side Hustle.
    &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;FreelanceForge AI&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A local-first, open-weight AI workspace for freelancers to draft proposals, itemize invoices, establish scope boundaries, and manage client communications.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/pythonperfec/freelanceforge-ai/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://nodejs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c26764c75a9e5059a6b9bb1583df5201c49253ba0983069efa7084b23e907181/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d7632322d677265656e2e737667" alt="Built with Node.js"&gt;&lt;/a&gt;
&lt;a href="https://ollama.ai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/feeff605e3fb2e818121383ea8c6700e336707bf0d5e1321cb0a106f5e22dc3b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f64656c2d4c6c616d615f332e315f38422d707572706c652e737667" alt="Model: Llama 3.1 8B"&gt;&lt;/a&gt;
&lt;a href="https://github.com/pythonperfec/freelanceforge-ai/render.yaml" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d9b2b5643442f04b7a27dcc14df747ac130ae4af4a8ddc8e56ef32c5995b19b7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f792d52656e6465722d3436453342372e737667" alt="Deploy on Render"&gt;&lt;/a&gt;
&lt;a href="https://backboard.io" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/030ed321c3a7998c80e909bf038c26271314c804b0eacec128f6e5da899e2ffb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d656d6f72792d4261636b626f6172642e696f2d6f72616e67652e737667" alt="Memory: Backboard.io"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12" rel="nofollow"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Administrative work like drafting proposals, detailing invoices, defining scope, and handling awkward client emails can take up a significant portion of a freelancer's working hours.&lt;/p&gt;
&lt;p&gt;FreelanceForge AI is an open-source, local-first application built to handle these tasks directly on your machine. Instead of sending sensitive project notes to third-party proprietary services, it uses local open weights (Llama 3.1 8B via Ollama) and persistent memory via Backboard.io to generate structured, client-ready documents.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Key Tools&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proposal Draft:&lt;/strong&gt; Converts unorganized meeting notes or audio memos into structured proposals with milestone schedules, deliverable breakdowns, and payment terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoice Value Justifier:&lt;/strong&gt; Translates task lists, hours, or Git commits into business-outcome line items for client billing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope Guardian:&lt;/strong&gt; Analyzes new client requests…&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/pythonperfec/freelanceforge-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Who Would Pay For It?
&lt;/h2&gt;

&lt;p&gt;Freelancers, independent developers, designers, copywriters, and agency owners billing $60 to $200/hour.&lt;br&gt;
When you're billing hourly, spending three hours writing a proposal or arguing over an unitemized invoice directly costs you $180 to $600 of lost income. A dedicated freelance workspace that eliminates that overhead is an easy purchase at $19–$39/month as a hosted subscription, or $99 as a standalone offline desktop utility.&lt;/p&gt;

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

&lt;p&gt;The project is built using :&lt;br&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js (v22), Express.js&lt;br&gt;
&lt;strong&gt;Agent Orchestration:&lt;/strong&gt; Mastra Agent Harness with cascading provider routing&lt;br&gt;
&lt;strong&gt;Open-Weight Models: **Meta Llama 3.1 8B (via local Ollama daemon) + Groq **Cloud fallback&lt;/strong&gt; (llama-3.1-8b-instant)&lt;br&gt;
&lt;strong&gt;Long-Term Memory &amp;amp; Rate RAG:&lt;/strong&gt; Backboard.io (backboard-sdk)&lt;br&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Semantic HTML5, Vanilla JavaScript, CSS custom property design system (Paper &amp;amp; Forge themes), Marked.js&lt;br&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Render (Infrastructure as Code via render.yaml &amp;amp; render.yml)&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How it works&lt;/strong&gt;&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%2Fwodcz3hponyetpsv1ifj.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%2Fwodcz3hponyetpsv1ifj.png" alt=" " width="700" height="808"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.toNotes,%20Meeting%20Bullets,%20or%20Web%20Speech%20Voice%20Memo"&gt; Freelancer Input &lt;/a&gt;&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="//server/index.js"&gt; Express.js API Server &lt;/a&gt;&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="//server/middleware/backboard.js"&gt; Backboard Memory Service &lt;/a&gt;&lt;br&gt;
  ├── Fetches remembered client terms, past rates, and interaction history via Backboard.io Cloud Assistant&lt;br&gt;
  └── (Falls back to local persistent store if offline)&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="//server/mastra/prompts.js"&gt; Prompt Construction Engine &lt;/a&gt;&lt;br&gt;
  ├── Merges specialized freelancer persona&lt;br&gt;
  ├── Injects user's custom system prompt edits (Prompt Transparency)&lt;br&gt;
  └── Injects Backboard rate context for commercial continuity&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="//server/mastra/agent.js"&gt; Mastra Multi-Tier Dispatcher &lt;/a&gt;&lt;br&gt;
  ├── 1. Priority 1 (Local): Ollama daemon with Llama 3.1 8B (100% private, on-device)&lt;br&gt;
  ├── 2. Priority 2 (Cloud): Groq open-weight hosted endpoint (fast fallback for cloud demo)&lt;br&gt;
  └── 3. Priority 3 (Offline): Deterministic Template Synthesizer (zero external dependency)&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="https://dev.to/api/generate-stream"&gt; Server-Sent Events (SSE) Stream &lt;/a&gt;&lt;br&gt;
         │&lt;br&gt;
         ▼&lt;br&gt;
&lt;a href="//public/app.js"&gt; Frontend Document Desk &lt;/a&gt;&lt;br&gt;
  ├── Live typewriter token streaming directly onto tactile paper sheet&lt;br&gt;
  ├── Telemetry strip updates (model, latency, memory status)&lt;br&gt;
  └── Auto-saves client rates and deliverables back to Backboard cloud&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Strict Client Confidentiality (NDA Protection)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Permanent $0 Marginal Cost:&lt;/strong&gt;Running open weights locally costs exactly $0 per generation.&lt;br&gt;
&lt;strong&gt;No Vendor Lock-In:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My first user was me&lt;/strong&gt;,alongside testing the workflow on realistic scenarios encountered by freelance colleagues.&lt;/p&gt;

&lt;p&gt;One recurring challenge was dealing with scope creep on sprint deliveries. A client would agree to a core web application, and then halfway through development send a message asking: "Can we also add Google OAuth, an export-to-CSV feature, and support for three extra payment gateways before launch?"&lt;/p&gt;

&lt;p&gt;Normally, writing the response takes an hour of careful drafting to avoid sounding confrontational while still protecting your time.&lt;/p&gt;

&lt;p&gt;I pasted those requirements into the Scope Guardian tool. Within three seconds, the model:&lt;/p&gt;

&lt;p&gt;Outlined the agreed baseline vs. the new out-of-scope requests.&lt;br&gt;
Itemized the deliverables with clear hourly estimations ($950 add-on).&lt;br&gt;
Generated a polite, professional client reply script ready to copy-paste.&lt;/p&gt;

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

&lt;p&gt;Building a raw text generation isnt enough these days,continuity is what creates value . Streaming and visual feedback changes user perception drastically as it is better than waiting 6 seconds on a blank screen which is curbed by (SSE),Server-Sent Events (SSE)&lt;/p&gt;

&lt;p&gt;Experienced freelancers don't want a black-box AI dictating how they talk to their clients. Exposing the system prompt and letting users adjust instructions directly in the app makes the tool adapt to the freelancer's voice, rather than forcing them into a generic template.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Backboard&lt;/strong&gt; — Persistent Client Assistant  Automatically creates and syncs with a dedicated cloud assistant on Backboard.io.&lt;br&gt;
RAG Context Injection is useful when returning client name is entered the app queries Backboard memory to inject previously agreed rates and agreements &lt;/p&gt;

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