<?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: Juan Esteban Lopez Aranzazu</title>
    <description>The latest articles on DEV Community by Juan Esteban Lopez Aranzazu (@juanlopezaranzazu).</description>
    <link>https://dev.to/juanlopezaranzazu</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%2F1247096%2Ff0fa16e4-6cdd-4b25-a3d0-cf67eb57d8a9.jpeg</url>
      <title>DEV Community: Juan Esteban Lopez Aranzazu</title>
      <link>https://dev.to/juanlopezaranzazu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juanlopezaranzazu"/>
    <language>en</language>
    <item>
      <title>ScopeGuard: Helping Freelancers Handle Scope Creep with Open-Weight AI</title>
      <dc:creator>Juan Esteban Lopez Aranzazu</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:06:11 +0000</pubDate>
      <link>https://dev.to/juanlopezaranzazu/scopeguard-helping-freelancers-handle-scope-creep-with-open-weight-ai-5goi</link>
      <guid>https://dev.to/juanlopezaranzazu/scopeguard-helping-freelancers-handle-scope-creep-with-open-weight-ai-5goi</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;Freelancers know the situation: a client asks for one more feature, another revision, or an additional deliverable that was never part of the original agreement.&lt;/p&gt;

&lt;p&gt;The problem isn't always deciding whether the request is included. It's finding evidence in the agreed scope and responding professionally without damaging the client relationship.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;ScopeGuard&lt;/strong&gt;, a web application that compares new client requests against an agreed project scope and helps freelancers decide how to respond.&lt;/p&gt;

&lt;p&gt;Here's what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define the scope:&lt;/strong&gt; Record the project's deliverables, features, exclusions, and relevant agreement terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze client requests:&lt;/strong&gt; Break a new request into individual items and compare them against the supplied scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review evidence:&lt;/strong&gt; Inspect supporting quotes and identify potential additions or ambiguous requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft a reply:&lt;/strong&gt; Generate a professional response to negotiate additional work, ask for clarification, or decline a request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key difference from a generic AI email writer is that ScopeGuard attempts to ground its analysis in the original agreement instead of simply producing a plausible-sounding answer.&lt;/p&gt;

&lt;p&gt;Who would pay for it? Freelance developers, designers, and small agencies that regularly deal with changing requirements. A possible business model is a free tier with limited analyses and a paid tier for more projects and usage. That's a hypothesis I want to validate with actual users.&lt;/p&gt;

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

&lt;p&gt;The screenshots below showcase ScopeGuard's main workflow, from defining the agreed project scope to analyzing new client requests, reviewing supporting evidence, and generating a suggested reply.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Project Scope
&lt;/h3&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%2Fd7prxb38vb8qstj0o6qv.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%2Fd7prxb38vb8qstj0o6qv.png" alt="Project Scope" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Request Analysis
&lt;/h3&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%2F0dccwp45g7gq8tp78pun.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%2F0dccwp45g7gq8tp78pun.png" alt="Request Analysis" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Evidence
&lt;/h3&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%2Fyfflu6pgiayna5p50ajb.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%2Fyfflu6pgiayna5p50ajb.png" alt="Evidence" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Reply Generator
&lt;/h3&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%2Frelkt3vmabo9j1yvbg58.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%2Frelkt3vmabo9j1yvbg58.png" alt="Reply Generator" width="800" height="453"&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;a href="https://github.com/JuanLopezAranzazu/scopeguard" rel="noopener noreferrer"&gt;https://github.com/JuanLopezAranzazu/scopeguard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the application source code and instructions for running it locally.&lt;/p&gt;

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

&lt;p&gt;ScopeGuard is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React, Vite, and TypeScript&lt;/strong&gt; for the frontend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chakra UI&lt;/strong&gt; for interface components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI and Python&lt;/strong&gt; for the backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; for local model inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen2.5 3B&lt;/strong&gt; as the default language model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser localStorage&lt;/strong&gt; for persisting application data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application sends the project scope and the client's request to the backend, where the model analyzes the requested changes. The frontend then presents the results and allows the user to generate a response.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making a Small Model More Useful
&lt;/h3&gt;

&lt;p&gt;One of the main challenges is that language models can confidently make claims that aren't supported by the supplied agreement.&lt;/p&gt;

&lt;p&gt;ScopeGuard combines model output with application-level validation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The request is evaluated in smaller parts.&lt;/li&gt;
&lt;li&gt;Structured output is validated against the expected schema.&lt;/li&gt;
&lt;li&gt;Supporting quotes are checked against the original scope text.&lt;/li&gt;
&lt;li&gt;A missing or invalid quote prevents the application from treating an unsupported claim as verified evidence.&lt;/li&gt;
&lt;li&gt;The final classification is computed in application code rather than blindly accepting the model's verdict.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These safeguards help reduce unsupported conclusions, although they cannot eliminate all model errors.&lt;/p&gt;

&lt;p&gt;I chose a small open-weight model to explore whether a useful workflow could run locally without requiring a hosted LLM API for every analysis. The trade-off is that smaller models may struggle with complex agreements and ambiguous language, so users still need to review the results.&lt;/p&gt;

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

&lt;p&gt;Project agreements and client conversations can contain sensitive business information. I wanted to explore an approach that gives freelancers more control over where their data is processed.&lt;/p&gt;

&lt;p&gt;Using an open-weight model through Ollama makes local inference possible without sending every prompt to a hosted LLM API. When the frontend, backend, and model all run locally, the workflow can keep its inputs on the user's machine.&lt;/p&gt;

&lt;p&gt;Open models also make experimentation more accessible. Developers can compare different models, inspect their behavior, modify the surrounding validation logic, and adapt the application to their own needs.&lt;/p&gt;

&lt;p&gt;For this project, open innovation made it possible to experiment with a locally run model and build application-level safeguards around its limitations, rather than depending entirely on a closed API.&lt;/p&gt;

&lt;p&gt;Local inference is not automatically cost-free or perfectly private: hardware and electricity still have costs, and the entire application must be configured locally to keep inputs off external services.&lt;/p&gt;

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