<?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: Shreya Dutta</title>
    <description>The latest articles on DEV Community by Shreya Dutta (@arceuzvx).</description>
    <link>https://dev.to/arceuzvx</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%2F2957949%2F82aaf979-78e4-4cbf-bcd9-a1fa744033f2.jpg</url>
      <title>DEV Community: Shreya Dutta</title>
      <link>https://dev.to/arceuzvx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arceuzvx"/>
    <language>en</language>
    <item>
      <title>I Built a Local AI 'Bad Cop' Because I Suck at Saying No to Freelance Scope Creep</title>
      <dc:creator>Shreya Dutta</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:19:21 +0000</pubDate>
      <link>https://dev.to/arceuzvx/i-built-a-local-ai-bad-cop-because-i-suck-at-saying-no-to-freelance-scope-creep-53jc</link>
      <guid>https://dev.to/arceuzvx/i-built-a-local-ai-bad-cop-because-i-suck-at-saying-no-to-freelance-scope-creep-53jc</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;Let me tell you about the most expensive sentence in the freelance world: &lt;em&gt;"Hey, quick question—this should only take 5 minutes, right?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two months ago, I took on a fixed-price freelance project to build a clean, static 3-page portfolio site for $1,200. Easy money, right? Well, halfway through week two, the client casually dropped a message asking if we could "quickly hook up a member login portal and a Stripe checkout before Friday so users can buy exclusive PDFs." Because I suffer from severe people-pleasing syndrome and hate awkward confrontations over money, I swallowed my pride, said &lt;em&gt;"Sure, I'll squeeze it in,"&lt;/em&gt; and spent my entire weekend fighting auth webhooks and database schemas for zero extra dollars. (╯°□°）╯︵ ┻━┻&lt;/p&gt;

&lt;p&gt;When I finally did the math on Monday morning, I realized my effective hourly rate had tanked to pennies. And the worst part? It wasn't a coding problem—it was a boundary problem. Freelancers lose thousands of dollars every year not because they can't build, but because tracking contract drift and writing firm, polite pushback emails feels exhausting, awkward, and confrontational.&lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;ScopeGuard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ScopeGuard&lt;/strong&gt; is a local, zero-egress AI CLI tool that acts as an objective, non-emotional "bad cop" and Technical Project Manager for freelance developers, designers, and boutique agencies. You feed it two local files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your baseline Statement of Work (&lt;code&gt;sow.txt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The raw, chaotic email, Slack message, or WhatsApp text from your client (&lt;code&gt;client_message.txt&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ScopeGuard cross-references the two locally, isolates every single feature request that falls outside your agreed baseline, calculates the hidden engineering complexity, and automatically drafts a warm, diplomatic, yet rock-solid &lt;strong&gt;Change Order email&lt;/strong&gt; complete with itemized hour estimates, milestone impact, and pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the Side Hustle Works (Who Pays &amp;amp; Why?)
&lt;/h3&gt;

&lt;p&gt;If you ask a solo freelancer to pay $49/month for a bloated enterprise project management SaaS, they will close the tab immediately. But if you offer a &lt;strong&gt;one-time $29 indie CLI license&lt;/strong&gt; (or a $9/month micro-subscription) for a local tool that saves them $500 to $1,500 on the very first unbilled feature it catches? It pays for itself in thirty seconds. ¯\&lt;em&gt;(ツ)&lt;/em&gt;/¯&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target Customers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo Freelance Developers &amp;amp; Designers:&lt;/strong&gt; Who want to stay in their terminal and write code instead of playing contract lawyer every Tuesday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Student &amp;amp; Early-Career Freelancers:&lt;/strong&gt; Who frequently get taken advantage of on fixed-price gigs because they are terrified of sounding "difficult" or losing a client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boutique 2–5 Person Dev Agencies:&lt;/strong&gt; Who need standardized, polite Change Order responses across their client communication channels without exposing confidential client contracts to third-party cloud tools.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Here is ScopeGuard running locally in my terminal, catching a classic "quick Stripe + login portal" scope creep attempt and generating a ready-to-send Change Order response:&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%2Func7cflr0toskhblmh53.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%2Func7cflr0toskhblmh53.png" alt="ScopeGuard ASCII" width="795" height="298"&gt;&lt;/a&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%2F0n020xdjam5emefwdxxu.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%2F0n020xdjam5emefwdxxu.png" alt="ScopeGuard result 1" width="800" height="320"&gt;&lt;/a&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%2Fkl8payh45ueh3vphsd2m.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%2Fkl8payh45ueh3vphsd2m.png" alt="ScopeGuard result 2" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sample Input vs. Output
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Baseline Contract (&lt;code&gt;sow.txt&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; Modern 3-Page Portfolio Website ($1,200 Fixed Fee)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Agreed Scope:&lt;/strong&gt; Home page, About Me page, Static contact form via Formspree, responsive layout hosted on GitHub Pages.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Explicitly Excluded:&lt;/strong&gt; Custom database backends, user authentication, payment processing, dynamic CMS integrations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. Incoming Client Request (&lt;code&gt;client_message.txt&lt;/code&gt;):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Hey, looking great so far! Quick thought before we launch: can we also add a member login portal so returning clients can download exclusive PDFs? Also, we'll need Stripe integration to charge $20 for access. Should be super quick to hook up right? Let's get that live by Friday!"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;3. ScopeGuard Local Audit &amp;amp; Generated Response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Scope Drift Analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-Scope Confirmed:&lt;/strong&gt; 3-page static layout (Home, About, Contact via Formspree), responsive design, static GitHub Pages deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-Scope Drift Flagged (Financial Risk: HIGH):&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Member Login Portal &amp;amp; Authentication:&lt;/strong&gt; Violates the explicit &lt;em&gt;Excluded&lt;/em&gt; clause ("user authentication, custom database backends"). Requires session management, user DB provisioning, and password reset flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protected Digital Asset Delivery (PDFs):&lt;/strong&gt; Requires authenticated route guarding and secure storage permissions rather than static hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe Payment Gateway Integration:&lt;/strong&gt; Violates the &lt;em&gt;Excluded&lt;/em&gt; clause ("payment processing"). Requires checkout session creation, webhook listeners, and payment state reconciliation.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Client Change Order Email
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Subject:&lt;/strong&gt; Re: Exciting additions! + Scope &amp;amp; Timeline Update for Member Portal &amp;amp; Stripe&lt;/p&gt;

&lt;p&gt;Hi [Client Name],&lt;/p&gt;

&lt;p&gt;Love where your head is at with monetizing the exclusive PDFs—adding a member portal and Stripe checkout is a fantastic way to turn the portfolio into a recurring revenue stream!&lt;/p&gt;

&lt;p&gt;Because our original Statement of Work ($1,200 fixed fee) was scoped strictly for a static 3-page architecture without database backends, user authentication, or payment processing, transitioning the site into a full-stack application with secure login and Stripe webhooks falls outside our baseline agreement.&lt;/p&gt;

&lt;p&gt;To build this securely and make sure your customers have a seamless checkout experience, I've put together a Change Order breakdown at my standard rate ($75/hr):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Authentication &amp;amp; Member Portal Setup:&lt;/strong&gt; 8 hours ($600)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe Checkout &amp;amp; Webhook Integration:&lt;/strong&gt; 6 hours ($450)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure PDF Delivery &amp;amp; End-to-End Testing:&lt;/strong&gt; 4 hours ($300)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total Change Order Addition:&lt;/strong&gt; +18 Hours ($1,350 USD) | &lt;strong&gt;Timeline Impact:&lt;/strong&gt; +5 Business Days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have two great options to keep momentum going:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Phase 1 Launch (Recommended):&lt;/strong&gt; We launch the static 3-page site this Friday as originally planned so you can go live on schedule, and tackle the Member Portal + Stripe as a separate Phase 2 milestone next week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All-in Launch:&lt;/strong&gt; I send over the formal Change Order for the additional $1,350 today, and we push our target launch date to next Friday to accommodate the backend engineering.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let me know which path works best for you!&lt;/p&gt;
&lt;/blockquote&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/arceuzvx" rel="noopener noreferrer"&gt;
        arceuzvx
      &lt;/a&gt; / &lt;a href="https://github.com/arceuzvx/ScopeGuard" rel="noopener noreferrer"&gt;
        ScopeGuard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;(If the GitHub embed takes a moment to load, you can explore the full repository here: &lt;a href="https://github.com/arceuzvx/ScopeGuard" rel="noopener noreferrer"&gt;https://github.com/arceuzvx/ScopeGuard&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complete Implementation (&lt;code&gt;scopeguard.py&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sentry_sdk&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rich.console&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rich.panel&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Panel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rich.markdown&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Markdown&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Sentry for agent execution &amp;amp; latency tracing
&lt;/span&gt;&lt;span class="n"&gt;sentry_sdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dsn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;traces_sample_rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;console&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;RED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bold red&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;DARK_RED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#8b0000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;MUTED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#555555&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Supports lightweight local models like gemma:2b or deep reasoning models like qwen3:14b
&lt;/span&gt;&lt;span class="n"&gt;MODEL_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3:14b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_banner&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;banner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
  ███████╗ ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ██╗   ██╗ █████╗ ██████╗ ██████╗ 
  ██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔════╝ ██║   ██║██╔══██╗██╔══██╗██╔══██╗
  ███████╗██║     ██║   ██║██████╔╝█████╗  ██║  ███╗██║   ██║███████║██████╔╝██║  ██║
  ╚════██║██║     ██║   ██║██╔═══╝ ██╔══╝  ██║   ██║██║   ██║██╔══██║██╔══██╗██║  ██║
  ███████║╚██████╗╚██████╔╝██║     ███████╗╚██████╔╝╚██████╔╝██║  ██║██║  ██║██████╔╝
  ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝     ╚══════╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚═════╝ 
                 [ LOCAL SCOPE-CREEP &amp;amp; CONTRACT DRIFT DEFENDER ]
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DARK_RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;banner&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DARK_RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;][!] Error:[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] Missing file &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_scope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sow_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a senior freelance contract negotiator and technical project manager.

ORIGINAL STATEMENT OF WORK (SoW):
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sow_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

NEW CLIENT REQUEST:
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;client_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

TASKS:
1. Identify all items in the client&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s request that are OUT OF SCOPE relative to the original Statement of Work.
2. Draft a firm, polite, and professional email to the client:
   - Acknowledge their ideas enthusiastically.
   - Clarify that these additions fall outside the agreed baseline SoW.
   - Include a structured Change Order proposal with estimated hours, hourly rate ($75/hr), and milestone impact.

FORMAT YOUR RESPONSE AS:
# Scope Drift Analysis
- **In-Scope Confirmed:** &amp;lt;items&amp;gt;
- **Out-of-Scope Drift:** &amp;lt;items flagged with financial risk&amp;gt;

# Client Change Order Email
&amp;lt;Draft email here text&amp;gt;
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;][*] Running local inference on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MODEL_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; via Ollama (Sentry tracing active)...[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;start_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;sentry_sdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ai_inference&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scope Drift Check&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MODEL_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;latency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start_time&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;latency&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print_banner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;sow_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sow.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;client_message.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DARK_RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]─── Loaded Local Files ──────────────────────────────────────[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;DARK_RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;][+] sow.txt (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sow_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; chars) | [+] client_message.txt (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; chars)[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;latency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze_scope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sow_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Panel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Markdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;border_style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DARK_RED&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[bold red]ScopeGuard Audit Report[/bold red]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;][*] Trace Complete | Latency: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;latency&lt;/span&gt;&lt;span class="si"&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;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s | Zero Cloud Data Egress.[/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MUTED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;Honestly, building this today was a pure hackathon rollercoaster. I originally planned to scaffold the entire application using cloud-based coding models inside OpenCode, and within ten minutes I slammed headfirst into an &lt;code&gt;API Rate Limit Exceeded&lt;/code&gt; wall. Panic mode immediately set in. I decided to pivot entirely to my local machine, fired up &lt;code&gt;ollama serve&lt;/code&gt; in PowerShell, and immediately got slapped with a nasty Windows error: &lt;code&gt;listen tcp 127.0.0.1:11434: bind: Only one usage of each socket address is normally permitted.&lt;/code&gt; (－‸ლ)&lt;/p&gt;

&lt;p&gt;After losing ten precious minutes wondering what rogue process hijacked my port, I realized the Ollama background tray daemon was already silently running and listening on &lt;code&gt;11434&lt;/code&gt;. Once I stopped fighting my own operating system, everything clicked into place.&lt;/p&gt;

&lt;p&gt;Here is how the technical pipeline is architected:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local Open-Weight Inference (&lt;code&gt;Ollama&lt;/code&gt; + &lt;code&gt;Qwen3:14b&lt;/code&gt; / &lt;code&gt;Gemma:2b&lt;/code&gt;):&lt;/strong&gt; The core reasoning engine runs 100% locally via the &lt;code&gt;ollama&lt;/code&gt; Python SDK. The script is designed to be model-agnostic—working seamlessly with &lt;code&gt;qwen3:14b&lt;/code&gt; for deep contract nuance or Google's lightweight &lt;code&gt;gemma:2b&lt;/code&gt; for rapid inference on lower-spec laptops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adversarial &amp;amp; Role-Based Prompt Engineering:&lt;/strong&gt; Out of the box, LLMs are trained to be helpful and agreeable. If you casually ask an AI to "reply to this client email," it will happily write a response agreeing to do 20 hours of free database work! I engineered the system prompt to force the model into the persona of a &lt;strong&gt;Senior Technical Project Manager &amp;amp; Contract Negotiator&lt;/strong&gt;. It explicitly hunts for &lt;em&gt;Exclusion Clauses&lt;/em&gt; in the SoW, translates vague client requests ("quick login") into concrete backend sub-tasks (database provisioning, session middleware, webhook security), and automatically introduces a &lt;strong&gt;"Phase 1 vs. Phase 2" psychological anchor&lt;/strong&gt; so the client feels guided rather than rejected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimalist Terminal UI (&lt;code&gt;Rich&lt;/code&gt;):&lt;/strong&gt; I wanted ScopeGuard to feel like a sharp cybersecurity CLI utility rather than a bloated web dashboard. Using Python's &lt;code&gt;rich&lt;/code&gt; library, I styled the interface in a pitch-black and blood-red (&lt;code&gt;#8b0000&lt;/code&gt;) aesthetic that parses and renders the LLM's Markdown output inside clean console panels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution Telemetry (&lt;code&gt;Sentry SDK&lt;/code&gt;):&lt;/strong&gt; Running local models requires keeping a close eye on hardware responsiveness. I wrapped the &lt;code&gt;ollama.chat()&lt;/code&gt; call inside a &lt;code&gt;sentry_sdk.start_transaction()&lt;/code&gt; span to benchmark inference latency from prompt dispatch to completion.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;When I first pitched this concept to a friend, their immediate reaction was: &lt;em&gt;"Wait, why wouldn't a freelancer just copy-paste their contract and client email into ChatGPT?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two words: &lt;strong&gt;Non-Disclosure Agreements (NDAs).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Almost every legitimate freelance contract, consulting agreement, or agency Master Services Agreement (MSA) contains a strict confidentiality clause. When a client sends over a Statement of Work and follow-up feature requests, those documents contain sensitive IP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unreleased product roadmaps and proprietary business features.&lt;/li&gt;
&lt;li&gt;Internal software architectures and security boundaries.&lt;/li&gt;
&lt;li&gt;Private pricing tiers, hourly rates, and client identities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a freelancer copy-pastes their client's confidential SoW and private emails into a closed, third-party cloud API, &lt;strong&gt;they are actively violating their NDA and exposing client data to external servers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open-source, local AI isn't just a "nice-to-have" here—it is the &lt;strong&gt;only reason ScopeGuard can legally and financially work&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;100% Data Sovereignty &amp;amp; NDA Compliance:&lt;/strong&gt; Because ScopeGuard executes open-weight models via Ollama strictly on &lt;code&gt;127.0.0.1&lt;/code&gt;, zero bytes of client contract data ever leave the freelancer's laptop. You can literally turn off your Wi-Fi on an airplane and audit five sensitive client contracts with zero compliance risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Subscription Bleed ($0.00 Unit Economics):&lt;/strong&gt; When building a micro-tool for indie freelancers, paying recurring cloud API token fees destroys your margins. By running open weights locally on the user's existing hardware, the marginal cost per contract audit is &lt;strong&gt;$0.00&lt;/strong&gt;. ᕙ(⇀‸↼‶)ᕗ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Vendor Lock-In or Sudden Deprecations:&lt;/strong&gt; Closed API providers routinely deprecate model checkpoints or alter system behavior overnight, which breaks carefully tuned negotiation formatting. Open weights let developers lock in exact local model versions (&lt;code&gt;gemma:2b&lt;/code&gt; or &lt;code&gt;qwen3:14b&lt;/code&gt;) and swap them with a single variable change.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Right after I got the terminal output working, I hopped on Discord and demoed ScopeGuard to a close developer friend from our university hackathon community who builds freelance React and Next.js sites on the side to help pay for college.&lt;/p&gt;

&lt;p&gt;We tested it on an actual WhatsApp message he received earlier this month from a local business client. The client had paid for a static landing page, and then texted asking for &lt;em&gt;"a quick admin dashboard where I can log in and crop/upload new gallery photos myself."&lt;/em&gt; We dropped his original deliverables list into &lt;code&gt;sow.txt&lt;/code&gt; and the client's text into &lt;code&gt;client_message.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;ScopeGuard immediately flagged the request as high-risk scope creep—breaking down why an admin dashboard requires cloud storage buckets, image processing pipelines, and authentication—and drafted a polite Change Order quoting an extra &lt;strong&gt;$450 (6 hours)&lt;/strong&gt; with a Phase 1 / Phase 2 launch option.&lt;/p&gt;

&lt;p&gt;His literal reaction on the Discord call was: &lt;em&gt;"Bro, push this to GitHub right now. Last month I built a whole Firebase admin panel for free because I was scared the client would leave a bad review if I asked for more money. The Phase 1 vs Phase 2 line in this email is actually genius."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He hasn't handed me $29 in cash yet (though he did promise to treat me to biryani next week ◕‿◕), and he already gave me my first two user feature requests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct PDF/DOCX Ingestion:&lt;/strong&gt; So he can drop a signed PDF contract directly into the folder without copy-pasting into &lt;code&gt;.txt&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;code&gt;--tone&lt;/code&gt; CLI Flag:&lt;/strong&gt; Allowing freelancers to toggle between &lt;code&gt;--tone gentle&lt;/code&gt; (for long-term repeat clients) and &lt;code&gt;--tone strict&lt;/code&gt; (for serial boundary-pushers).&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Designed and validated the local Ollama prompt pipeline to support fast, lightweight local inference on Google's open-weight &lt;code&gt;gemma:2b&lt;/code&gt; model alongside &lt;code&gt;qwen3:14b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Sentry Agent Tracing:&lt;/strong&gt; Instrumented the local LLM inference execution block with &lt;code&gt;sentry-sdk&lt;/code&gt; transaction spans to monitor local hardware latency.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Build to Break: Your Guide to Cybersecurity at Hacktoberfest HackDay x OWASP JIS Univerity</title>
      <dc:creator>Shreya Dutta</dc:creator>
      <pubDate>Sun, 27 Sep 2026 12:34:08 +0000</pubDate>
      <link>https://dev.to/arceuzvx/build-to-break-your-guide-to-cybersecurity-at-hacktoberfest-503b</link>
      <guid>https://dev.to/arceuzvx/build-to-break-your-guide-to-cybersecurity-at-hacktoberfest-503b</guid>
      <description>&lt;h2&gt;
  
  
  OWASP × Hacktoberfest Cybersecurity Track
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Build. Break. Secure.
&lt;/h2&gt;




&lt;p&gt;Welcome to &lt;a href="https://events.mlh.com/events/14953-hacktoberfest-hack-day-kolkata-x-owasp-jis-university" rel="noopener noreferrer"&gt;Hacktoberfest Hack Day Kolkata x OWASP JIS University&lt;/a&gt; 💖&lt;/p&gt;

&lt;p&gt;Build a project that solves a real cybersecurity problem.&lt;/p&gt;

&lt;p&gt;Your project can focus on application security, cloud security, AI security, authentication, supply-chain security, detection and response, DevSecOps, or another security challenge.&lt;/p&gt;

&lt;p&gt;You don't need to build a complete enterprise security platform. &lt;strong&gt;Pick one meaningful problem, build a focused solution, and demonstrate that it works.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Can You Build?
&lt;/h2&gt;

&lt;p&gt;Here are some areas to explore:&lt;/p&gt;

&lt;h3&gt;
  
  
  Web &amp;amp; API Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API authorization tester&lt;/li&gt;
&lt;li&gt;IDOR/BOLA detector&lt;/li&gt;
&lt;li&gt;Web vulnerability scanner&lt;/li&gt;
&lt;li&gt;Secure API gateway&lt;/li&gt;
&lt;li&gt;Authentication security tool&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cloud Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;IAM privilege-escalation analyzer&lt;/li&gt;
&lt;li&gt;Cloud misconfiguration scanner&lt;/li&gt;
&lt;li&gt;Cloud attack-path visualizer&lt;/li&gt;
&lt;li&gt;Exposed credential detector&lt;/li&gt;
&lt;li&gt;Cloud security monitoring tool&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prompt-injection detector&lt;/li&gt;
&lt;li&gt;LLM security testing tool&lt;/li&gt;
&lt;li&gt;AI data-leakage detector&lt;/li&gt;
&lt;li&gt;Secure AI-agent permission layer&lt;/li&gt;
&lt;li&gt;AI-generated code security analyzer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  DevSecOps &amp;amp; Supply Chain
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD security gate&lt;/li&gt;
&lt;li&gt;Secret detection and remediation tool&lt;/li&gt;
&lt;li&gt;Dependency/SBOM risk analyzer&lt;/li&gt;
&lt;li&gt;Container security scanner&lt;/li&gt;
&lt;li&gt;Infrastructure-as-Code security analyzer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detection &amp;amp; Response
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Security-log correlation tool&lt;/li&gt;
&lt;li&gt;Attack-chain reconstruction&lt;/li&gt;
&lt;li&gt;Threat-intelligence enrichment tool&lt;/li&gt;
&lt;li&gt;Security alert triage system&lt;/li&gt;
&lt;li&gt;Automated incident-response assistant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are starting points, not restrictions. &lt;strong&gt;If you have a different cybersecurity idea, build it.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Approach Your Project
&lt;/h2&gt;

&lt;p&gt;A simple way to structure a cybersecurity project is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────┐
│   Problem    │
└──────┬───────┘
       ↓
┌──────────────┐
│    Attack    │
└──────┬───────┘
       ↓
┌──────────────┐
│   Security   │
│    Control   │
└──────┬───────┘
       ↓
┌──────────────┐
│ Demonstrate  │
│   &amp;amp; Test     │
└──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1. Define the Problem
&lt;/h3&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What are you trying to protect, and what are you protecting it from?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Exposed API credentials can be used to access sensitive resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attacker:&lt;/strong&gt; Someone who obtains a leaked credential.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; Unauthorized access to data or services.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Understand the Attack
&lt;/h3&gt;

&lt;p&gt;Before building the solution, understand how the attack actually happens.&lt;/p&gt;

&lt;p&gt;Think about:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attacker → Attack Vector → Vulnerability/Weakness → Impact&lt;/strong&gt;&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 plaintext"&gt;&lt;code&gt;Attacker
   │
   ▼
Stolen API Key
   │
   ▼
Unauthorized API Access
   │
   ▼
Sensitive Data Exposure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your project should intervene somewhere in this attack path.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Build the Security Control
&lt;/h3&gt;

&lt;p&gt;Your project should &lt;strong&gt;do something about the security problem&lt;/strong&gt;.&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 plaintext"&gt;&lt;code&gt;Source Code
    │
    ▼
Secret Scanner
    │
    ▼
Credential Detected
    │
    ▼
Alert / Block Commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IAM Policy
    │
    ▼
Permission Analysis
    │
    ▼
Privilege Escalation Path
    │
    ▼
Finding + Remediation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Security Logs
    │
    ▼
Detection Engine
    │
    ▼
Suspicious Activity
    │
    ▼
Alert / Investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal isn't to have the most features. &lt;strong&gt;A focused security control that works is more valuable than a large collection of unfinished features.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Using Open-Source &amp;amp; Open-Weight AI
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest is about building with open source, including &lt;strong&gt;open-source and open-weight AI models&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If your project uses AI, we encourage you to use an appropriate open-source or open-weight model rather than relying entirely on a proprietary API.&lt;/p&gt;

&lt;p&gt;You can use &lt;strong&gt;Gemma&lt;/strong&gt;, but Gemma is &lt;strong&gt;not the only option&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Depending on your project, you could explore models such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemma&lt;/li&gt;
&lt;li&gt;Llama&lt;/li&gt;
&lt;li&gt;Mistral&lt;/li&gt;
&lt;li&gt;Qwen&lt;/li&gt;
&lt;li&gt;Phi&lt;/li&gt;
&lt;li&gt;Other appropriately licensed open-source/open-weight models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose the model based on what your project actually needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make the AI contribution clear
&lt;/h3&gt;

&lt;p&gt;Don't just write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We used an open-source AI model."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Explain &lt;strong&gt;what the model does in your project and why you chose it&lt;/strong&gt;.&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 plaintext"&gt;&lt;code&gt;Security Detection
       │
       ▼
Open-Source / Open-Weight Model
       │
       ▼
Explanation / Correlation
       │
       ▼
Remediation Recommendation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good uses for AI include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explaining security findings&lt;/li&gt;
&lt;li&gt;Correlating security events&lt;/li&gt;
&lt;li&gt;Summarizing incidents&lt;/li&gt;
&lt;li&gt;Classifying security data&lt;/li&gt;
&lt;li&gt;Extracting threat intelligence&lt;/li&gt;
&lt;li&gt;Suggesting remediation&lt;/li&gt;
&lt;li&gt;Providing a natural-language interface to security tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Document how you used the model
&lt;/h3&gt;

&lt;p&gt;Consider adding a &lt;code&gt;skills.md&lt;/code&gt; file or similar documentation to your repository.&lt;/p&gt;

&lt;p&gt;Use it to explain things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model you used&lt;/li&gt;
&lt;li&gt;Why you chose it&lt;/li&gt;
&lt;li&gt;Where it is used in your architecture&lt;/li&gt;
&lt;li&gt;What tasks it performs&lt;/li&gt;
&lt;li&gt;How you run it&lt;/li&gt;
&lt;li&gt;Any important limitations&lt;/li&gt;
&lt;li&gt;How developers can reproduce or modify the AI component&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to make your use of open-source/open-weight AI &lt;strong&gt;visible, understandable, and reproducible&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Be Careful With AI-Generated Actions
&lt;/h2&gt;

&lt;p&gt;Treat model output as &lt;strong&gt;untrusted input&lt;/strong&gt;, especially if it generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Shell commands&lt;/li&gt;
&lt;li&gt;IAM policies&lt;/li&gt;
&lt;li&gt;Kubernetes configurations&lt;/li&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prefer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Output
    │
    ▼
Validation
    │
    ▼
Controlled Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Output
    │
    ▼
Production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your AI model should not automatically become the root of trust for a security-critical operation.&lt;/p&gt;




&lt;h1&gt;
  
  
  Test Your Project Like an Attacker
&lt;/h1&gt;

&lt;p&gt;Don't only demonstrate the happy path.&lt;/p&gt;

&lt;p&gt;Try to break your own system.&lt;/p&gt;

&lt;p&gt;At minimum, test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normal input&lt;/li&gt;
&lt;li&gt;Malicious input&lt;/li&gt;
&lt;li&gt;Invalid input&lt;/li&gt;
&lt;li&gt;Unexpected input&lt;/li&gt;
&lt;li&gt;Edge cases&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Prompt-Injection Defense
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal Prompt
     ↓
   Works

Malicious Prompt
     ↓
Injection Detected
     ↓
   Blocked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  IAM Security Tool
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vulnerable Policy
       ↓
Privilege Escalation
       ↓
     Detected
       ↓
Remediation Suggested
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Secret Detection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Leaked Credential
       ↓
    Detected
       ↓
Commit Blocked
       ↓
Developer Alerted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Prove That It Works
&lt;/h2&gt;

&lt;p&gt;A cybersecurity project should be demonstrated with an actual security scenario.&lt;/p&gt;

&lt;p&gt;A simple structure is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attack → Detection/Prevention → Result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don't just show a dashboard and say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our system detects attacks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Show the attack.&lt;/p&gt;

&lt;p&gt;Show what your system detects or prevents.&lt;/p&gt;

&lt;p&gt;Show the result.&lt;/p&gt;




&lt;h1&gt;
  
  
  Keep Your Claims Realistic
&lt;/h1&gt;

&lt;p&gt;Avoid making claims that you cannot demonstrate.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our system completely prevents phishing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Explain what your system actually does:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our system detects suspicious websites using URL, DOM and visual features."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our AI guarantees secure code."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Our AI identifies potential security issues and suggests remediation."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you report metrics such as accuracy, explain how you measured them.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What dataset did you use?&lt;/li&gt;
&lt;li&gt;How many test cases?&lt;/li&gt;
&lt;li&gt;How many attacks were detected?&lt;/li&gt;
&lt;li&gt;How many false positives?&lt;/li&gt;
&lt;li&gt;How many false negatives?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Useful Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OWASP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://top10.owasp.org/2025/" rel="noopener noreferrer"&gt;OWASP Top 10:2025&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
A starting point for understanding common application-security risks and finding project ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://genai.owasp.org/llm-top-10/" rel="noopener noreferrer"&gt;OWASP Top 10 for LLM Applications&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Useful for projects involving LLMs, GenAI, AI agents, or open-source/open-weight models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cheatsheetseries.owasp.org/" rel="noopener noreferrer"&gt;OWASP Cheat Sheet Series&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Practical implementation guidance for common security topics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://owasp.org/API-Security/" rel="noopener noreferrer"&gt;OWASP API Security Top 10&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Useful if your project involves APIs, authentication, authorization, or access control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://owasp.org/www-project-web-security-testing-guide/" rel="noopener noreferrer"&gt;OWASP Web Security Testing Guide&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Use this to test your web application before submission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-Source AI
&lt;/h3&gt;

&lt;p&gt;If you're building with AI, explore open-source and open-weight models and choose one that fits your project's requirements.&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;Google Gemma track&lt;/strong&gt;, you can start with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ai.google.dev/gemma" rel="noopener noreferrer"&gt;Google Gemma&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You are &lt;strong&gt;not required to use Gemma for every AI-based cybersecurity project&lt;/strong&gt;. Other appropriately licensed open-source/open-weight models are also valid for the broader Open-Source AI theme.&lt;/p&gt;




&lt;h1&gt;
  
  
  Need More Project Ideas?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://community.owasp.org/initiatives/gsoc/gsoc2026ideas" rel="noopener noreferrer"&gt;OWASP GSoC Project Ideas&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Explore real OWASP open-source projects and technical problem areas for additional inspiration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://owasp.org/projects/" rel="noopener noreferrer"&gt;OWASP Project Directory&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Browse existing OWASP projects across application security, AI security, cloud security, tooling, and more.&lt;/p&gt;

&lt;p&gt;These are provided for &lt;strong&gt;inspiration and further exploration&lt;/strong&gt;. You do not need to contribute to an existing OWASP project for the Hackday.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Checklist
&lt;/h1&gt;

&lt;p&gt;Before submitting, ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] What security problem am I solving?&lt;/li&gt;
&lt;li&gt;[ ] Who is the attacker?&lt;/li&gt;
&lt;li&gt;[ ] How does the attack work?&lt;/li&gt;
&lt;li&gt;[ ] What does my project detect, prevent, or mitigate?&lt;/li&gt;
&lt;li&gt;[ ] Can I demonstrate the attack?&lt;/li&gt;
&lt;li&gt;[ ] Can I demonstrate my security control working?&lt;/li&gt;
&lt;li&gt;[ ] Have I tested malicious and unexpected inputs?&lt;/li&gt;
&lt;li&gt;[ ] Are my security/AI claims supported by evidence?&lt;/li&gt;
&lt;li&gt;[ ] If I use AI, is it actually contributing something meaningful?&lt;/li&gt;
&lt;li&gt;[ ] Have I clearly documented which open-source/open-weight model I used and how?&lt;/li&gt;
&lt;li&gt;[ ] Can another person understand and reproduce my project?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Basic Formula
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Problem → Attack → Security Control → Test → Result&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You don't need to build the next enterprise security platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick one real security problem. Understand it. Build a focused solution. Try to break it. Then demonstrate that your solution works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All the best. :) 🎉&lt;/p&gt;

&lt;p&gt;Follow us on &lt;a href="https://www.linkedin.com/company/owasp-student-chapter-jis-university/" rel="noopener noreferrer"&gt;LinkedIN&lt;/a&gt; for more fun events with OWASP JIS University. 🖤&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>cybersecurity</category>
      <category>owasp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How Strong Is Dropbox Password Security? Real Password Crack Time Analysis Using Modern GPU Models</title>
      <dc:creator>Shreya Dutta</dc:creator>
      <pubDate>Sun, 08 Feb 2026 06:33:31 +0000</pubDate>
      <link>https://dev.to/arceuzvx/how-strong-is-dropbox-password-security-real-password-crack-time-analysis-using-modern-gpu-models-41fl</link>
      <guid>https://dev.to/arceuzvx/how-strong-is-dropbox-password-security-real-password-crack-time-analysis-using-modern-gpu-models-41fl</guid>
      <description>&lt;p&gt;Hey everyone 👋🏻 I’m Shreya, a Computer Science student with cyber security as a specialization, exploring the various areas in Information Security. Today’s blog covers password policy analysis with Dropbox as a case study.&lt;/p&gt;

&lt;h2&gt;
  
  
  Password Policy Analysis — Dropbox
&lt;/h2&gt;

&lt;p&gt;Password policy (Observed + Documented behavior):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At least 8 characters&lt;br&gt;
Encourages letters, numbers, symbols (UI driven strength feedback)&lt;br&gt;
Pattern / common password detection (not just character rules)&lt;/p&gt;
&lt;/blockquote&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.amazonaws.com%2Fuploads%2Farticles%2Fz8rqhtyrc705qhvsqtbl.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.amazonaws.com%2Fuploads%2Farticles%2Fz8rqhtyrc705qhvsqtbl.png" alt=" " width="799" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Though it doesn’t meet the &lt;em&gt;12 character&lt;/em&gt; requirement like many newer orgs these days, &lt;em&gt;8 characters is pretty much the minimum baseline&lt;/em&gt; still accepted across many platforms. Modern security guidance is slowly pushing toward &lt;em&gt;12–16+ characters&lt;/em&gt; as safer defaults.&lt;/p&gt;

&lt;p&gt;Industry reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 = legacy baseline&lt;/li&gt;
&lt;li&gt;10–12 = modern baseline&lt;/li&gt;
&lt;li&gt;14–16 = strong modern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also to note, there’s &lt;em&gt;no strict Upper/Lower case enforcement rule&lt;/em&gt; publicly documented, which can look like a drawback from a traditional complexity-rule viewpoint, but modern systems often prefer &lt;em&gt;entropy + pattern detection&lt;/em&gt; instead of forcing predictable complexity substitutions.&lt;/p&gt;

&lt;p&gt;Dropbox actually uses password strength detection that compares passwords against common words, names, patterns and numbers to prevent easy-to-guess passwords.&lt;/p&gt;

&lt;p&gt;For more info: &lt;a href="https://help.dropbox.com/security/password-control" rel="noopener noreferrer"&gt;https://help.dropbox.com/security/password-control&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dropbox also recommends longer passwords, unique passwords per service, and enabling 2FA or passkeys for stronger protection.&lt;br&gt;
Here: &lt;a href="https://help.dropbox.com/security/secure-password" rel="noopener noreferrer"&gt;https://help.dropbox.com/security/secure-password&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passwords to Test&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;password_123&lt;/li&gt;
&lt;li&gt;bluey#1996&lt;/li&gt;
&lt;li&gt;bg@1996_dropbox&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Detailed Explanation For Why Each Password Will Eventually Be Cracked
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1️⃣ password_123
&lt;/h3&gt;

&lt;p&gt;Very common password variant of this being “password123” has been in pretty much every password leak databases for years now, so this variant will also be cracked easily.&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.amazonaws.com%2Fuploads%2Farticles%2Frdlubhoo6qz83xjmikw1.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.amazonaws.com%2Fuploads%2Farticles%2Frdlubhoo6qz83xjmikw1.png" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attack reality:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This would likely be cracked instantly using credential stuffing or breach database matching, not brute force.&lt;/p&gt;


&lt;h3&gt;
  
  
  2️⃣ bluey#1996
&lt;/h3&gt;

&lt;p&gt;Identical to email/first name plus 1996 could highly mean their birth year.&lt;br&gt;&lt;br&gt;
A little digging about the person’s identity and boom you have it all with all possible variants with name/birthdate etc.&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.amazonaws.com%2Fuploads%2Farticles%2F0um3al57xqbt32ugjerl.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.amazonaws.com%2Fuploads%2Farticles%2F0um3al57xqbt32ugjerl.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attack reality:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is classic OSINT-derivable password construction.&lt;/p&gt;


&lt;h3&gt;
  
  
  3️⃣ bg@1996_dropbox
&lt;/h3&gt;

&lt;p&gt;Abbreviation of name + year + website they’re signing up for along with 2 special characters.&lt;br&gt;&lt;br&gt;
Slightly better than last 2 but still very predictable as it’s a combo of name/DOB/website. Still not secure enough.&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.amazonaws.com%2Fuploads%2Farticles%2Ffl5fr0k67gf5dsh7g7bo.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.amazonaws.com%2Fuploads%2Farticles%2Ffl5fr0k67gf5dsh7g7bo.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attack reality:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Attackers specifically test service-name + year + initials combos.&lt;/p&gt;


&lt;h2&gt;
  
  
  Crack Time Testing
&lt;/h2&gt;

&lt;p&gt;Went a step ahead and checked how long it’ll take hackers with modern tools to crack the above three.  &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.amazonaws.com%2Fuploads%2Farticles%2Fz1cp2vz04s0cqgkamlh2.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.amazonaws.com%2Fuploads%2Farticles%2Fz1cp2vz04s0cqgkamlh2.png" alt=" " width="799" height="355"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fi5rqvb2btzayzrxa03yp.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.amazonaws.com%2Fuploads%2Farticles%2Fi5rqvb2btzayzrxa03yp.png" alt=" " width="800" height="256"&gt;&lt;/a&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.amazonaws.com%2Fuploads%2Farticles%2Fxksg6jfaj8kg3g4lz0jr.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.amazonaws.com%2Fuploads%2Farticles%2Fxksg6jfaj8kg3g4lz0jr.png" alt=" " width="799" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First 2 → under 1 sec
&lt;/li&gt;
&lt;li&gt;Third → ~8 hrs
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Important Context
&lt;/h3&gt;

&lt;p&gt;These tools estimate brute-force cracking assuming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No prior knowledge
&lt;/li&gt;
&lt;li&gt;No breach database
&lt;/li&gt;
&lt;li&gt;No OSINT
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real attackers usually try:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Leaks
&lt;/li&gt;
&lt;li&gt;Pattern mutations
&lt;/li&gt;
&lt;li&gt;OSINT guessing
&lt;/li&gt;
&lt;li&gt;Then brute force
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can try it on:&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.mypasswordchecker.com/" rel="noopener noreferrer"&gt;https://www.mypasswordchecker.com/&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  4th Password — Password Manager Style
&lt;/h2&gt;

&lt;p&gt;I’d like to take a 4th password for the analysis, something that Google password manager would suggest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;XFu2&amp;amp;3fM^Tm&amp;amp;&amp;amp;2#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks like sci-fi but let’s see:&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.amazonaws.com%2Fuploads%2Farticles%2Fmbkbk6d8spcgxdbm3omx.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.amazonaws.com%2Fuploads%2Farticles%2Fmbkbk6d8spcgxdbm3omx.png" alt=" " width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It does say very strong but modern GPUs can theoretically crack it in &amp;lt;12 days (pure brute force estimate assuming high compute resources).&lt;/p&gt;




&lt;h3&gt;
  
  
  Real-World Note
&lt;/h3&gt;

&lt;p&gt;Without:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breach exposure
&lt;/li&gt;
&lt;li&gt;Password reuse
&lt;/li&gt;
&lt;li&gt;Offline hash cracking
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attackers are unlikely to brute force something like this unless extremely high value target scenario.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Looks like we need to step up the password game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Modern Direction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Longer passwords / passphrases
&lt;/li&gt;
&lt;li&gt;Unique per service
&lt;/li&gt;
&lt;li&gt;Password manager usage
&lt;/li&gt;
&lt;li&gt;MFA / Passkeys
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Extra Real-World Security Context
&lt;/h2&gt;

&lt;p&gt;Modern password strength systems don’t just check symbols. They check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common password lists
&lt;/li&gt;
&lt;li&gt;Human language patterns
&lt;/li&gt;
&lt;li&gt;Keyboard patterns
&lt;/li&gt;
&lt;li&gt;Known leaks
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Research shows machine learning models can now learn real human password behavior from leak datasets and improve password guessing success significantly.&lt;/p&gt;

&lt;p&gt;Also, password strength meters themselves can leak pattern info or be gamed if poorly designed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cool Research Papers to Explore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Human Password Modeling Research&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2407.14145" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2407.14145&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Password Strength Meter Risks Research&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2505.08292" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2505.08292&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Password Entropy Theory&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2404.16853" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2404.16853&lt;/a&gt;  &lt;/p&gt;




&lt;h3&gt;
  
  
  NOTE
&lt;/h3&gt;

&lt;p&gt;Most accounts are NOT hacked via brute force.&lt;/p&gt;

&lt;p&gt;Most are compromised via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Password reuse
&lt;/li&gt;
&lt;li&gt;Phishing
&lt;/li&gt;
&lt;li&gt;Malware / infostealers
&lt;/li&gt;
&lt;li&gt;Credential stuffing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passwords are slowly becoming just one layer of authentication.&lt;/p&gt;




&lt;p&gt;Hope you liked the write-up 🙂&lt;br&gt;&lt;br&gt;
Follow up in &lt;a href="https://x.com/arceuzvx" rel="noopener noreferrer"&gt;X / Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>webdev</category>
      <category>web</category>
    </item>
  </channel>
</rss>
