<?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: Akshay Goel</title>
    <description>The latest articles on DEV Community by Akshay Goel (@akshaygoel7).</description>
    <link>https://dev.to/akshaygoel7</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%2F533819%2F9b06e9fd-114f-41c7-991f-02ddcf974a95.jpeg</url>
      <title>DEV Community: Akshay Goel</title>
      <link>https://dev.to/akshaygoel7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akshaygoel7"/>
    <language>en</language>
    <item>
      <title>A WhatsApp brief should not become a cloud prompt</title>
      <dc:creator>Akshay Goel</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:32:42 +0000</pubDate>
      <link>https://dev.to/akshaygoel7/a-whatsapp-brief-should-not-become-a-cloud-prompt-2bg0</link>
      <guid>https://dev.to/akshaygoel7/a-whatsapp-brief-should-not-become-a-cloud-prompt-2bg0</guid>
      <description>&lt;p&gt;A client sends a WhatsApp message, not a brief. "Need a one-page menu site and a WhatsApp order button by next Friday. Also a simple logo. Budget is around 25k." The person who has to answer is usually on a laptop, and pasting that message into a cloud chatbot means the client's plan, budget, and neighbourhood leave the machine.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/akshaygoel7/brief-to-quote" rel="noopener noreferrer"&gt;Brief to Quote&lt;/a&gt; for that moment. It is a small local page. You paste the message, and it returns a fixed quote in rupees: line items, a total, a timeline, and payment terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model
&lt;/h2&gt;

&lt;p&gt;The quote is written by Gemma 3 1B through &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, on the same laptop. The brief is not sent to a model API. The request asks for JSON and passes a schema, because a small model will otherwise skip the line items or turn "25k" into 250000.&lt;/p&gt;

&lt;p&gt;On the sample brief from Mehra Foods, a cloud kitchen in Lajpat Nagar, the page showed this run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-page menu site, with the order button described inside that line: ₹20,000&lt;/li&gt;
&lt;li&gt;Total: ₹20,000, which is inside the ₹25,000 budget&lt;/li&gt;
&lt;li&gt;The summary still named the logo and the WhatsApp button&lt;/li&gt;
&lt;li&gt;The page labelled the source as a local open-weight model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 1B model can stay inside the budget and still collapse three requests into one line. I left that visible. Filling in the missing lines after the fact would hide the thing a freelancer needs to notice.&lt;/p&gt;

&lt;p&gt;If the model returns JSON that is not a list of priced items, or a total above the budget, the desk throws that quote away and uses a local price list instead: ₹12,000 for the page, ₹3,000 for the WhatsApp button, ₹6,000 for the logo, ₹21,000 in all. The page says which path it used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two bugs that made the price list lie
&lt;/h2&gt;

&lt;p&gt;The fallback had its own mistakes.&lt;/p&gt;

&lt;p&gt;"Budget is around 25k" was read as 25. A pattern for a bare number matched before the pattern that understands the &lt;code&gt;k&lt;/code&gt;. The fix keeps the suffix and treats &lt;code&gt;k&lt;/code&gt; as thousands.&lt;/p&gt;

&lt;p&gt;"WhatsApp" contains the letters "app", so the desk added an ₹18,000 web app that nobody asked for. Deliverable words are matched on word boundaries. "WhatsApp" is matched as its own word.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who would pay
&lt;/h2&gt;

&lt;p&gt;A freelancer who quotes from WhatsApp several times a week, and who does not want a client's budget sitting in someone else's prompt log. They would pay for the first reply being faster, and for the message staying on the laptop.&lt;/p&gt;

&lt;p&gt;Open models matter here for a boring reason. The useful part of the product is privacy. A closed API would cancel that, however much better the prose was.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nearby work
&lt;/h2&gt;

&lt;p&gt;Other entries this week are in the same neighbourhood. &lt;a href="https://dev.to/shikhar_ahirwar_60abbcba4/quote-forge-28lj"&gt;Quote Forge&lt;/a&gt; is a local proposal builder. &lt;a href="https://dev.to/robinamirbahar/freelanceshield-ai-local-open-weight-scope-creep-detector-tabpfn-invoice-risk-forecaster-83k"&gt;FreelanceShield AI&lt;/a&gt; watches scope creep on a contract. This one is narrower: one message in, one rupee total out.&lt;/p&gt;

&lt;p&gt;The code is MIT licensed: &lt;a href="https://github.com/akshaygoel7/brief-to-quote" rel="noopener noreferrer"&gt;https://github.com/akshaygoel7/brief-to-quote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post was written and published by an agent in Cursor, at my request. The ₹20,000 figure is from a run of Gemma 3 1B in the browser on this laptop on 15 October 2026.&lt;/p&gt;

&lt;h1&gt;
  
  
  devchallenge #hf26challenge
&lt;/h1&gt;

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