<?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: Badal Patel</title>
    <description>The latest articles on DEV Community by Badal Patel (@badal_patel_46892c77e1d45).</description>
    <link>https://dev.to/badal_patel_46892c77e1d45</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%2F4192976%2F8201bd74-2fea-435f-a4fd-fc207fa16f99.png</url>
      <title>DEV Community: Badal Patel</title>
      <link>https://dev.to/badal_patel_46892c77e1d45</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/badal_patel_46892c77e1d45"/>
    <language>en</language>
    <item>
      <title>Vexvon Growth Desk: an open-weight AI that tells a one-person agency who to call today</title>
      <dc:creator>Badal Patel</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:17:32 +0000</pubDate>
      <link>https://dev.to/badal_patel_46892c77e1d45/vexvon-growth-desk-an-open-weight-ai-that-tells-a-one-person-agency-who-to-call-today-4o2p</link>
      <guid>https://dev.to/badal_patel_46892c77e1d45/vexvon-growth-desk-an-open-weight-ai-that-tells-a-one-person-agency-who-to-call-today-4o2p</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;&lt;strong&gt;Vexvon Growth Desk&lt;/strong&gt; is a client-growth desk for 1–10 person service businesses: freelancers, small agencies, local B2B shops.&lt;/p&gt;

&lt;p&gt;Small firms don't lose deals because they lack a CRM. They lose them because nobody follows up. HubSpot stores the data but never tells you that the proposal you sent six days ago to the client who replied twice is about to go cold.&lt;/p&gt;

&lt;p&gt;Vexvon opens on a &lt;strong&gt;Today queue&lt;/strong&gt;: the 7 contacts you should touch today, ranked, each with a one-line reason and a one-click follow-up draft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who pays:&lt;/strong&gt; an owner-operator billing $5k–$50k a month. One rescued deal pays for years of a $19/month subscription.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://vexvon-growth-desk-s-ua21.bolt.host" rel="noopener noreferrer"&gt;Vexvon Growth Desk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try it:&lt;/strong&gt; sign up, choose "Start with sample data", and you land in a populated workspace (24 fictional contacts, ~90 activities) in under 20 seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 3-minute path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Today:&lt;/strong&gt; the top card says &lt;em&gt;Nudge proposal&lt;/em&gt;, Hot, with three reasons ("Proposal stage +40", "Replied 2x this month +6", ...).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft:&lt;/strong&gt; pick tone and channel; Vexvon drafts a short, specific follow-up. Copy, then &lt;strong&gt;Mark as sent&lt;/strong&gt;: the activity is logged and the card leaves the queue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipeline:&lt;/strong&gt; drag a deal to &lt;em&gt;Won&lt;/em&gt;; column totals and KPIs update instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Briefs:&lt;/strong&gt; generate a weekly growth brief with 3 wins, 3 priorities (each linked to a real contact) and 1 risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settings → Offline AI:&lt;/strong&gt; flip it on and drafts still work from templates. The product survives a dead API.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built in Bolt.new:&lt;/strong&gt; React + Vite + TypeScript, Tailwind, Recharts, dnd-kit; Bolt Database (Postgres + row-level security) and auth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight model integration:&lt;/strong&gt; Vexvon Growth Desk supports configurable Gemma integration: one server function, &lt;code&gt;ai&lt;/code&gt;, calls Gemma through Google's OpenAI-compatible endpoint. Follow-up drafts currently use templates until a compatible AI provider is configured and tested. The model is pure config (&lt;code&gt;AI_BASE_URL&lt;/code&gt;, &lt;code&gt;AI_MODEL&lt;/code&gt;), so swapping Gemma for Llama, Qwen or a self-hosted Ollama box is a config change, not a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The LLM writes words; it doesn't make decisions.&lt;/strong&gt; Scoring and "what to do next" are a deterministic, unit-tested function:

&lt;ul&gt;
&lt;li&gt;Score (0–100) = stage + deal value + recency + inbound engagement + intent tags&lt;/li&gt;
&lt;li&gt;Priority = score + up to 30 points for overdue follow-ups&lt;/li&gt;
&lt;li&gt;Seven ordered rules pick the action (First touch, Nudge proposal, Follow up, Re-engage, ...)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;11 Vitest tests pin the math. The model only explains the decision and drafts the message, which keeps a small open model accurate and the whole system debuggable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security I didn't skip:&lt;/strong&gt; owner-only RLS on every table; composite foreign keys so nobody can attach data to another tenant's contact; the AI key lives only in server secrets; email and phone are stripped before anything reaches the model; contact notes are passed as untrusted data (prompt-injection resistant); AI output is schema-validated and rendered as plain text; 50 AI calls per workspace per day.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why open innovation matters here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The unit economics only work with an open model.&lt;/strong&gt; A $19/month side-hustle SaaS can't burn dollars per user per day on a frontier API. Drafting 7 short follow-ups a day is a perfect job for a small open-weight model, because the hard decision is already made by the rules engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in.&lt;/strong&gt; The model is a config value. If a provider changes pricing or deprecates a model, I switch in a minute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data stays narrow.&lt;/strong&gt; Only the fields needed to write a message reach the model, never email or phone. Because the endpoint is OpenAI-compatible, a privacy-sensitive customer can point it at their own Gemma server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where open beat closed:&lt;/strong&gt; pinning a specific open model version makes drafts reproducible for demos and tests. A hosted "latest" closed model changes under you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Paste raw call notes and let the model extract budget, timeline and next step (with user confirmation before any field changes).&lt;/li&gt;
&lt;li&gt;CSV import.&lt;/li&gt;
&lt;li&gt;Landing a first paying user.&lt;/li&gt;
&lt;/ul&gt;

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