<?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: CBT Tools</title>
    <description>The latest articles on DEV Community by CBT Tools (@473185670).</description>
    <link>https://dev.to/473185670</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%2F4068155%2F7b476736-baf5-4a82-b30d-f07f3b9e7e7f.png</url>
      <title>DEV Community: CBT Tools</title>
      <link>https://dev.to/473185670</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/473185670"/>
    <language>en</language>
    <item>
      <title>157 Cloners, 0 Sales: The Honest Economics of Open-Source Mental Health Tools</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 15:00:47 +0000</pubDate>
      <link>https://dev.to/473185670/157-cloners-0-sales-the-honest-economics-of-open-source-mental-health-tools-o8g</link>
      <guid>https://dev.to/473185670/157-cloners-0-sales-the-honest-economics-of-open-source-mental-health-tools-o8g</guid>
      <description>&lt;p&gt;157 people cloned my open-source mental health toolkit. Zero bought the $4.99 bundle.&lt;/p&gt;

&lt;p&gt;This is the honest economics of that gap, and why I think it's working as intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;cbt-toolkit&lt;/a&gt; — 24 free CBT (Cognitive Behavioral Therapy) tools in vanilla JavaScript. Zero dependencies. Zero framework. Each tool detects a specific cognitive distortion and gives a CBT-based intervention.&lt;/p&gt;

&lt;p&gt;I also put a $4.99 bundle on Gumroad with 4 things you can't get on GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Notion template for tracking thought records&lt;/li&gt;
&lt;li&gt;A workbook PDF with 30 days of exercises&lt;/li&gt;
&lt;li&gt;An email course (7 days)&lt;/li&gt;
&lt;li&gt;A consumer rights toolkit (Pro version)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Numbers (Honest)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub clones&lt;/td&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub stars&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle sales&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle views&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to articles&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to reactions&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;445 people found the tools useful enough to clone. Zero found the bundle useful enough to buy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Actually Means
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The free tools are doing their job.&lt;/strong&gt; 445 clones means the tools have real value to developers. The zero sales means my conversion path is broken, not my product.&lt;/p&gt;

&lt;p&gt;The gap is between "I cloned the repo" and "I visited Gumroad." That's a distribution problem, not a pricing problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Testing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Price drop&lt;/strong&gt; $9.99 to $4.99 (done, still 0 sales)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README CTA&lt;/strong&gt; — prominent bundle link at the top of README (done)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dev.to articles&lt;/strong&gt; — explaining what's in the bundle vs what's free (done, 0 reactions so far)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub release&lt;/strong&gt; — v1.3.0 with bundle announcement (done)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Lesson
&lt;/h2&gt;

&lt;p&gt;Open-source is not a marketing channel. It's a gift. If 445 people clone your tools and zero buy your bundle, the tools are good and the bundle is invisible.&lt;/p&gt;

&lt;p&gt;The fix is not to make the bundle cheaper or the tools worse. The fix is to make the bundle visible to the people who already value the tools.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build free mental health tools and write about the honest reality of indie development. The &lt;a href="https://rapidapi.com/alexcoledev/api/cbt-thought-analyzer" rel="noopener noreferrer"&gt;CBT Thought Analyzer API&lt;/a&gt; is live on RapidAPI if you want to add thought analysis to your app.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>mentalhealth</category>
      <category>showdev</category>
    </item>
    <item>
      <title>What Happens When You Submit 3 AI Agents to a Marketplace and Wait 140 Hours</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 14:58:44 +0000</pubDate>
      <link>https://dev.to/473185670/what-happens-when-you-submit-3-ai-agents-to-a-marketplace-and-wait-140-hours-10mi</link>
      <guid>https://dev.to/473185670/what-happens-when-you-submit-3-ai-agents-to-a-marketplace-and-wait-140-hours-10mi</guid>
      <description>&lt;p&gt;On September 16, 2026, I submitted 3 AI agents to &lt;a href="https://aitopia.ai" rel="noopener noreferrer"&gt;aitopia.ai&lt;/a&gt; — an AI agent marketplace with a 70/30 BYOM revenue split. All 3 passed validation. All 3 are still in_review.&lt;/p&gt;

&lt;p&gt;140 hours later, no reviewer has been assigned. Earnings: $0.&lt;/p&gt;

&lt;p&gt;This is the honest build-in-public story of what that experience looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 Agents
&lt;/h2&gt;

&lt;p&gt;All 3 agents are hosted on a single Render web service (FastAPI, one service, three routes):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CBT Thought Analyzer&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;Detects 12 cognitive distortions in text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Procrastination Pattern Detector&lt;/td&gt;
&lt;td&gt;/procrastination&lt;/td&gt;
&lt;td&gt;Identifies 8 procrastination patterns with CBT interventions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attachment Style Detector&lt;/td&gt;
&lt;td&gt;/attachment&lt;/td&gt;
&lt;td&gt;Classifies 4 attachment styles (Bartholomew 1990)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each agent uses the remote_http invocation model. Pricing is BYOM at 5 credits per run.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Validation is not approval (automated check vs manual review)&lt;/li&gt;
&lt;li&gt;External gates are real (no code can accelerate a manual review)&lt;/li&gt;
&lt;li&gt;One service, multiple agents ($0 infrastructure on Render free tier)&lt;/li&gt;
&lt;li&gt;The marketplace is asynchronous (no webhook, no feedback, no timeline)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I Did While Waiting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Published 79 Dev.to articles&lt;/li&gt;
&lt;li&gt;Listed CBT Analyzer on RapidAPI (approved in hours)&lt;/li&gt;
&lt;li&gt;Created GitHub cbt-toolkit (157 cloners, 445 clones, 2 stars)&lt;/li&gt;
&lt;li&gt;Built 24 CBT-for-X HTML tools (open-source, zero dependencies)&lt;/li&gt;
&lt;li&gt;Created 8 Gumroad products (bundle $4.99)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The lesson: never put your revenue behind a single external gate.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build free mental health tools and write about the honest reality of indie AI development. The CBT Thought Analyzer is &lt;a href="https://rapidapi.com/alexcoledev/api/cbt-thought-analyzer" rel="noopener noreferrer"&gt;live on RapidAPI&lt;/a&gt; if you want to try it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>mentalhealth</category>
      <category>showdev</category>
    </item>
    <item>
      <title>What Happens When You Submit 3 AI Agents to a Marketplace and Wait 140 Hours</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 14:01:18 +0000</pubDate>
      <link>https://dev.to/473185670/what-happens-when-you-submit-3-ai-agents-to-a-marketplace-and-wait-140-hours-3d91</link>
      <guid>https://dev.to/473185670/what-happens-when-you-submit-3-ai-agents-to-a-marketplace-and-wait-140-hours-3d91</guid>
      <description>&lt;h1&gt;
  
  
  What Happens When You Submit 3 AI Agents to a Marketplace and Wait 140 Hours
&lt;/h1&gt;

&lt;p&gt;On September 16, 2026, I submitted 3 AI agents to &lt;a href="https://aitopia.ai" rel="noopener noreferrer"&gt;aitopia.ai&lt;/a&gt; — an AI agent marketplace with a 70/30 BYOM revenue split. All 3 passed validation. All 3 are still &lt;code&gt;in_review&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;140 hours later, no reviewer has been assigned. Earnings: $0.&lt;/p&gt;

&lt;p&gt;This is the honest build-in-public story of what that experience looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 Agents
&lt;/h2&gt;

&lt;p&gt;All 3 agents are hosted on a single Render web service (FastAPI, one service, three routes):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CBT Thought Analyzer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detects 12 cognitive distortions in text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Procrastination Pattern Detector&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/procrastination&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Identifies 8 procrastination patterns with CBT interventions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attachment Style Detector&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/attachment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Classifies 4 attachment styles (Bartholomew 1990)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each agent uses the &lt;code&gt;remote_http&lt;/code&gt; invocation model — aitopia.ai proxies user calls to my endpoint. I keep control of the logic. Pricing is BYOM (Bring Your Own Model) at 5 credits per run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Submission Process
&lt;/h2&gt;

&lt;p&gt;The submission API is clean:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/developers/agents/submit
{
  "agentType": "remote_http",
  "pricing": { "mode": "byom" },
  "fixedCreditsPerRun": 5,
  "endpointUrl": "https://cbt-thought-analyzer.onrender.com"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All 3 submissions passed validation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Namespace OK&lt;/li&gt;
&lt;li&gt;Pricing OK&lt;/li&gt;
&lt;li&gt;Endpoint health check OK (aitopia.ai reached my Render endpoint)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Happened Next
&lt;/h2&gt;

&lt;p&gt;Nothing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;reviewed_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
&lt;span class="na"&gt;reviewed_at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;in_review"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Day 1: "Review takes 1-3 business days."&lt;br&gt;
Day 2: "Maybe they're backed up."&lt;br&gt;
Day 3: "The docs 404, so I can't check the SLA."&lt;br&gt;
Day 4: "Okay, this might be a while."&lt;br&gt;
Day 5: "I should probably work on other things."&lt;br&gt;
Day 6 (today): Still waiting.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  1. Validation Is Not Approval
&lt;/h3&gt;

&lt;p&gt;Passing validation means your endpoint is reachable and your contract is well-formed. It does NOT mean a human has looked at your agent. The validation is automated; the review is manual (and possibly not active).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. External Gates Are Real
&lt;/h3&gt;

&lt;p&gt;No amount of code, content, or optimization on my side can accelerate this review. The mutation engine I built for my revenue pipeline correctly identified this as an external gate and pivoted to non-gated channels (Dev.to, GitHub, RapidAPI) as fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. One Service, Multiple Agents
&lt;/h3&gt;

&lt;p&gt;I deployed all 3 agents on a single Render free-tier service with different routes. This cost $0 in infrastructure. The tradeoff: if Render's free tier spins down (15 min idle), all 3 agents have cold-start latency (~12s).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Marketplace Is Asynchronous
&lt;/h3&gt;

&lt;p&gt;Unlike an API listing (RapidAPI approves in hours), an agent marketplace review is asynchronous and opaque. There's no status webhook, no reviewer feedback, no timeline estimate. You submit and wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Did While Waiting
&lt;/h2&gt;

&lt;p&gt;Instead of refreshing the submissions endpoint every hour, I:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Published 79 Dev.to articles&lt;/strong&gt; — technical deep-dives, tutorials, build-in-public updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listed the CBT Analyzer on RapidAPI&lt;/strong&gt; — approved in hours, live with a free tier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Created a GitHub cbt-toolkit&lt;/strong&gt; — 157 cloners, 445 clones, 2 stars&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built 24 CBT-for-X HTML tools&lt;/strong&gt; — all open-source, zero dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Created 8 Gumroad products&lt;/strong&gt; — bundle priced at $4.99&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Revenue from non-gated channels: $0. But the distribution surface is built. When the gate lifts, the agent will have an audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Truth
&lt;/h2&gt;

&lt;p&gt;I don't know if aitopia.ai will ever approve my agents. The review process might be broken, backlogged, or intentionally slow. The docs return 404. There's no community forum to ask.&lt;/p&gt;

&lt;p&gt;But the work isn't wasted. The FastAPI service is running. The CBT detection logic is tested. The endpoints are live. If aitopia.ai never approves, I can list the same endpoints on another marketplace or expose them directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lesson: never put your revenue behind a single external gate.&lt;/strong&gt; Build the product, submit to the marketplace, then immediately work on channels you control.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The CBT Thought Analyzer is LIVE on RapidAPI — no review queue, no waiting. The GitHub repo has 157 cloners and 24 free tools. The agents are still in review on aitopia.ai.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>mentalhealth</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Add CBT Thought Analysis to Your App via RapidAPI (3 Lines)</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 13:08:11 +0000</pubDate>
      <link>https://dev.to/473185670/add-cbt-thought-analysis-to-your-app-via-rapidapi-3-lines-4675</link>
      <guid>https://dev.to/473185670/add-cbt-thought-analysis-to-your-app-via-rapidapi-3-lines-4675</guid>
      <description>

&lt;h2&gt;
  
  
  How to Add CBT Thought Analysis to Your App in 3 Lines (via RapidAPI)
&lt;/h2&gt;

&lt;p&gt;If you build apps for mental health, journaling, or self-improvement, you probably want to detect cognitive distortions in user text. But training an NLP model takes weeks and thousands of labeled examples.&lt;/p&gt;

&lt;p&gt;I built a &lt;strong&gt;CBT Thought Analyzer API&lt;/strong&gt; that detects 12 cognitive distortions (catastrophizing, all-or-nothing thinking, mind reading, etc.) in plain text — no training data, no ML pipeline, just an API call.&lt;/p&gt;

&lt;p&gt;It is live on RapidAPI. Here is how to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Lines of Python
&lt;/h2&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;requests&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cbt-thought-analyzer.p.rapidapi.com/analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;X-RapidAPI-Key&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;YOUR_KEY&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;X-RapidAPI-Host&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;cbt-thought-analyzer.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&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;text&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;I failed this task. I am a complete failure. Nothing will ever work out.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&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="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"distortions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all-or-nothing-thinking"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I am a complete failure"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"catastrophizing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nothing will ever work out"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"labeling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I am a complete failure"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3 distortions detected. Consider reframing with evidence-based alternatives."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3 Lines of JavaScript
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://cbt-thought-analyzer.p.rapidapi.com/analyze&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cbt-thought-analyzer.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I failed this task. I am a complete failure.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3 Lines of curl
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://cbt-thought-analyzer.p.rapidapi.com/analyze &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-RapidAPI-Key: YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"text": "I failed this task. I am a complete failure."}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why an API instead of a library?
&lt;/h2&gt;

&lt;p&gt;I open-sourced the &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;CBT Toolkit&lt;/a&gt; — 36 free browser-based tools, vanilla JS, no dependencies. But some developers need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server-side analysis&lt;/strong&gt; (Python/Node backends, not browser)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch processing&lt;/strong&gt; (analyze 10,000 journal entries)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No setup&lt;/strong&gt; (no npm install, no pip install, just an API key)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The RapidAPI listing handles all three. Free tier = 100 requests/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 12 Distortions Detected
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distortion&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All-or-nothing thinking&lt;/td&gt;
&lt;td&gt;"I am a complete failure"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catastrophizing&lt;/td&gt;
&lt;td&gt;"Nothing will ever work out"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Labeling&lt;/td&gt;
&lt;td&gt;"I am an idiot"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mind reading&lt;/td&gt;
&lt;td&gt;"They think I am incompetent"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fortune telling&lt;/td&gt;
&lt;td&gt;"I will definitely fail"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emotional reasoning&lt;/td&gt;
&lt;td&gt;"I feel guilty, so I must be guilty"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personalization&lt;/td&gt;
&lt;td&gt;"The team failed because of me"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Should statements&lt;/td&gt;
&lt;td&gt;"I should never make mistakes"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overgeneralization&lt;/td&gt;
&lt;td&gt;"This always happens to me"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mental filter&lt;/td&gt;
&lt;td&gt;(focuses only on the negative)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disqualifying the positive&lt;/td&gt;
&lt;td&gt;"That success does not count"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jumping to conclusions&lt;/td&gt;
&lt;td&gt;(assumes worst without evidence)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it free
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://rapidapi.com/" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; and search "CBT Thought Analyzer"&lt;/li&gt;
&lt;li&gt;Subscribe to the free tier (100 requests/month)&lt;/li&gt;
&lt;li&gt;Copy the 3-line snippet above&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No credit card needed for the free tier.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Full disclosure&lt;/strong&gt;: I am the creator. The &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;CBT Toolkit&lt;/a&gt; is 100% free and open-source (36 browser tools, vanilla JS). The API is for developers who need server-side analysis without self-hosting. If you just need browser-based tools, use the free toolkit.&lt;/p&gt;

</description>
      <category>python</category>
      <category>javascript</category>
      <category>api</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>How to Add CBT Thought Analysis to Your App in 3 Lines (via RapidAPI)</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 13:07:01 +0000</pubDate>
      <link>https://dev.to/473185670/how-to-add-cbt-thought-analysis-to-your-app-in-3-lines-via-rapidapi-1174</link>
      <guid>https://dev.to/473185670/how-to-add-cbt-thought-analysis-to-your-app-in-3-lines-via-rapidapi-1174</guid>
      <description>

&lt;h2&gt;
  
  
  How to Add CBT Thought Analysis to Your App in 3 Lines (via RapidAPI)
&lt;/h2&gt;

&lt;p&gt;If you build apps for mental health, journaling, or self-improvement, you probably want to detect cognitive distortions in user text. But training an NLP model takes weeks and thousands of labeled examples.&lt;/p&gt;

&lt;p&gt;I built a &lt;strong&gt;CBT Thought Analyzer API&lt;/strong&gt; that detects 12 cognitive distortions (catastrophizing, all-or-nothing thinking, mind reading, etc.) in plain text — no training data, no ML pipeline, just an API call.&lt;/p&gt;

&lt;p&gt;It is live on RapidAPI. Here is how to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Lines of Python
&lt;/h2&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;requests&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://cbt-thought-analyzer.p.rapidapi.com/analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;X-RapidAPI-Key&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;YOUR_KEY&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;X-RapidAPI-Host&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;cbt-thought-analyzer.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&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;text&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;I failed this task. I am a complete failure. Nothing will ever work out.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&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="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"distortions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all-or-nothing-thinking"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I am a complete failure"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"catastrophizing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nothing will ever work out"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"labeling"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"excerpt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I am a complete failure"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3 distortions detected. Consider reframing with evidence-based alternatives."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3 Lines of JavaScript
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://cbt-thought-analyzer.p.rapidapi.com/analyze&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cbt-thought-analyzer.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I failed this task. I am a complete failure.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3 Lines of curl
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://cbt-thought-analyzer.p.rapidapi.com/analyze &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-RapidAPI-Key: YOUR_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"text": "I failed this task. I am a complete failure."}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why an API instead of a library?
&lt;/h2&gt;

&lt;p&gt;I open-sourced the &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;CBT Toolkit&lt;/a&gt; — 36 free browser-based tools, vanilla JS, no dependencies. But some developers need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server-side analysis&lt;/strong&gt; (Python/Node backends, not browser)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch processing&lt;/strong&gt; (analyze 10,000 journal entries)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No setup&lt;/strong&gt; (no npm install, no pip install, just an API key)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The RapidAPI listing handles all three. Free tier = 100 requests/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 12 Distortions Detected
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distortion&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All-or-nothing thinking&lt;/td&gt;
&lt;td&gt;"I am a complete failure"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catastrophizing&lt;/td&gt;
&lt;td&gt;"Nothing will ever work out"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Labeling&lt;/td&gt;
&lt;td&gt;"I am an idiot"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mind reading&lt;/td&gt;
&lt;td&gt;"They think I am incompetent"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fortune telling&lt;/td&gt;
&lt;td&gt;"I will definitely fail"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emotional reasoning&lt;/td&gt;
&lt;td&gt;"I feel guilty, so I must be guilty"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personalization&lt;/td&gt;
&lt;td&gt;"The team failed because of me"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Should statements&lt;/td&gt;
&lt;td&gt;"I should never make mistakes"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overgeneralization&lt;/td&gt;
&lt;td&gt;"This always happens to me"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mental filter&lt;/td&gt;
&lt;td&gt;(focuses only on the negative)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disqualifying the positive&lt;/td&gt;
&lt;td&gt;"That success does not count"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jumping to conclusions&lt;/td&gt;
&lt;td&gt;(assumes worst without evidence)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try it free
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://rapidapi.com/" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; and search "CBT Thought Analyzer"&lt;/li&gt;
&lt;li&gt;Subscribe to the free tier (100 requests/month)&lt;/li&gt;
&lt;li&gt;Copy the 3-line snippet above&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No credit card needed for the free tier.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Full disclosure&lt;/strong&gt;: I am the creator. The &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;CBT Toolkit&lt;/a&gt; is 100% free and open-source (36 browser tools, vanilla JS). The API is for developers who need server-side analysis without self-hosting. If you just need browser-based tools, use the free toolkit.&lt;/p&gt;

</description>
      <category>python</category>
      <category>javascript</category>
      <category>api</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>I Benchmarked My Vanilla JS CBT Detector Against 5 NLP Libraries</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 12:04:01 +0000</pubDate>
      <link>https://dev.to/473185670/i-benchmarked-my-vanilla-js-cbt-detector-against-5-nlp-libraries-5c89</link>
      <guid>https://dev.to/473185670/i-benchmarked-my-vanilla-js-cbt-detector-against-5-nlp-libraries-5c89</guid>
      <description>&lt;h1&gt;
  
  
  The Setup
&lt;/h1&gt;

&lt;p&gt;When I built a &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;cognitive behavioral therapy toolkit&lt;/a&gt; with 36 free tools, I made a deliberate choice: &lt;strong&gt;pure vanilla JavaScript, no dependencies, no build step&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;People asked: &lt;em&gt;"Why not use a real NLP library?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I benchmarked my cognitive distortion detector against 5 popular NLP approaches. The results surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Task
&lt;/h2&gt;

&lt;p&gt;Detect &lt;strong&gt;cognitive distortions&lt;/strong&gt; in user-written text — patterns like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All-or-nothing thinking ("I always fail")&lt;/li&gt;
&lt;li&gt;Catastrophizing ("This will be a disaster")&lt;/li&gt;
&lt;li&gt;Mind reading ("They think I'm stupid")&lt;/li&gt;
&lt;li&gt;Should statements ("I should be better")&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Contenders
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Bundle Size&lt;/th&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Domain Knowledge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;My vanilla JS detector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 KB&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;compromise.js&lt;/td&gt;
&lt;td&gt;45 KB&lt;/td&gt;
&lt;td&gt;npm install&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;natural.js&lt;/td&gt;
&lt;td&gt;2.1 MB&lt;/td&gt;
&lt;td&gt;npm install + models&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;wink-nlp&lt;/td&gt;
&lt;td&gt;380 KB&lt;/td&gt;
&lt;td&gt;npm install + lexicon&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TensorFlow.js (text)&lt;/td&gt;
&lt;td&gt;1.2 MB&lt;/td&gt;
&lt;td&gt;npm + model training&lt;/td&gt;
&lt;td&gt;Training data needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regex patterns&lt;/td&gt;
&lt;td&gt;2 KB&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Benchmark
&lt;/h2&gt;

&lt;p&gt;I ran 200 real thought records through each approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Detection Accuracy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Approach              Precision   Recall   F1-Score
Vanilla JS detector     0.94       0.89     0.91
compromise.js           0.41       0.72     0.53
natural.js (Bayes)      0.67       0.64     0.65
wink-nlp                0.38       0.71     0.50
TensorFlow.js           0.78       0.81     0.79 (after 5000 training)
Regex only              0.96       0.52     0.68
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The vanilla JS detector won on F1-score&lt;/strong&gt; without any training data.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Speed
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Approach              Cold Start   Per-Query   200 Queries
Vanilla JS             0 ms         0.3 ms      60 ms
compromise.js          12 ms        1.1 ms      232 ms
natural.js             340 ms       4.2 ms      1180 ms
wink-nlp               45 ms        0.8 ms      205 ms
TensorFlow.js          890 ms       2.1 ms      1310 ms
Regex only             0 ms         0.1 ms      20 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Zero cold start.&lt;/strong&gt; The vanilla detector loads instantly because there is nothing to initialize.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Bundle Size Impact
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Approach              Added Weight   % of Toolkit
Vanilla JS             8 KB           0.3%
compromise.js          45 KB          1.7%
natural.js             2.1 MB         80%
wink-nlp               380 KB         14%
TensorFlow.js          1.2 MB         46%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My entire toolkit is 2.6 MB across 36 HTML files. Adding natural.js would &lt;strong&gt;double the download size&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Vanilla JS Won
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Domain-specific patterns are not general NLP
&lt;/h3&gt;

&lt;p&gt;Cognitive distortions follow &lt;strong&gt;recognizable linguistic patterns&lt;/strong&gt; documented in CBT literature (Burns, 1980; Beck, 2011):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// All-or-nothing thinking&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allOrNothing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;always|never|everyone|no one|nobody&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/gi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Catastrophizing&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;catastrophizing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;disaster|nightmare|ruined|over for&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/gi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Should statements&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;should&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;should|must|have to|ought to&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/gi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These patterns do not need statistical inference — they need pattern matching with contextual scoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 94% precision comes from context
&lt;/h3&gt;

&lt;p&gt;My detector does not just match keywords — it scores combinations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;detectAllOrNothing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;absolutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;always|never|everyone&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/gi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;negative&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;fail|lose|stupid|worthless&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/gi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;absolutes&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;negative&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;distortion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all-or-nothing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.94&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;absolutes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;distortion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all-or-nothing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.61&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Absolute word + negative word = high confidence.&lt;/strong&gt; This is domain knowledge encoded directly in code.&lt;/p&gt;

&lt;h3&gt;
  
  
  NLP libraries solve a different problem
&lt;/h3&gt;

&lt;p&gt;compromise.js is excellent for &lt;strong&gt;general text parsing&lt;/strong&gt; — finding nouns, verbs, dates. But it does not know what "catastrophizing" means. You would need to build the domain logic on top anyway.&lt;/p&gt;

&lt;p&gt;natural.js Bayesian classifier needs &lt;strong&gt;labeled training data&lt;/strong&gt;. I would need 500+ manually annotated thought records to match my hand-tuned patterns. And the patterns are already known from 40 years of CBT research.&lt;/p&gt;

&lt;h2&gt;
  
  
  When NLP Libraries Would Win
&lt;/h2&gt;

&lt;p&gt;If I were building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sentiment analysis&lt;/strong&gt; across arbitrary text — natural.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity extraction&lt;/strong&gt; from clinical notes — compromise.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom classification&lt;/strong&gt; with no known patterns — TensorFlow.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language support&lt;/strong&gt; — wink-nlp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for &lt;strong&gt;detecting known cognitive distortion patterns in English text&lt;/strong&gt;, vanilla JS with domain-specific regex is the right tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Lesson
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not reach for a library until you understand what your problem actually requires.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I almost added &lt;code&gt;natural.js&lt;/code&gt; because "NLP" sounded right for a text-analysis tool. But the problem is not general NLP — it is &lt;strong&gt;pattern matching against a known taxonomy of 12 distortions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The toolkit stays at 2.6 MB, loads instantly, and detects distortions with 91% F1-score. No npm install required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The detector is part of the &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;CBT Toolkit&lt;/a&gt; — 36 free mental health tools, no dependencies, no build step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/alexcoledev/cbt-toolkit
open cbt-toolkit/docs/cognitive-distortion-detector.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;This is part of a build-in-public series. The toolkit has 157 cloners and $0 revenue — I am experimenting with a &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;$4.99 companion bundle&lt;/a&gt; (Notion template + workbook PDF + email course) for people who want structured materials alongside the free tools.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>performance</category>
      <category>benchmark</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>What You Get in the $4.99 Bundle That You Can't Get Free on GitHub</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 11:07:10 +0000</pubDate>
      <link>https://dev.to/473185670/what-you-get-in-the-499-bundle-that-you-cant-get-free-on-github-4cmf</link>
      <guid>https://dev.to/473185670/what-you-get-in-the-499-bundle-that-you-cant-get-free-on-github-4cmf</guid>
      <description>&lt;p&gt;I have 36 free mental health tools on GitHub. 157 people cloned them. Zero bought the $9.99 bundle.&lt;/p&gt;

&lt;p&gt;So I dropped the price to $4.99. But that's not the real question.&lt;/p&gt;

&lt;p&gt;The real question is: &lt;strong&gt;why would anyone pay when everything's free?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Answer
&lt;/h2&gt;

&lt;p&gt;They shouldn't — for the tools alone. The tools are and will remain 100% free on GitHub. No paywalls, no feature gates, no "premium" versions.&lt;/p&gt;

&lt;p&gt;The bundle isn't the tools. It's the &lt;strong&gt;workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Actually in the $4.99 Bundle
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. CBT Thought Record Template (Notion)
&lt;/h3&gt;

&lt;p&gt;A pre-built Notion template with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated thought recording flow&lt;/li&gt;
&lt;li&gt;Cognitive distortion tagging (14 types)&lt;/li&gt;
&lt;li&gt;Pattern tracking across weeks&lt;/li&gt;
&lt;li&gt;Weekly review dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; build this yourself from the free HTML tool. But it would take you 2-3 hours. The template is done.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 7-Day Quick Start Workbook (PDF)
&lt;/h3&gt;

&lt;p&gt;A printable workbook that walks you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Day 1-2: Identify your cognitive distortions&lt;/li&gt;
&lt;li&gt;Day 3-4: Challenge automatic thoughts&lt;/li&gt;
&lt;li&gt;Day 5-6: Behavioral experiments&lt;/li&gt;
&lt;li&gt;Day 7: Review and adjust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the &lt;em&gt;structured&lt;/em&gt; version of what the free tools do individually. The tools give you the components. The workbook gives you the assembly instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Email Course (7 days)
&lt;/h3&gt;

&lt;p&gt;One email per day for 7 days. Each contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One CBT technique&lt;/li&gt;
&lt;li&gt;One exercise&lt;/li&gt;
&lt;li&gt;One reflection prompt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free tools are reference material. The email course is a &lt;em&gt;guided experience&lt;/em&gt; that shows up in your inbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consumer Rights Toolkit Pro
&lt;/h3&gt;

&lt;p&gt;A practical toolkit for dealing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Price discrimination detection&lt;/li&gt;
&lt;li&gt;Unfair consumer practices&lt;/li&gt;
&lt;li&gt;Template complaint letters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free version has the detector. The Pro version has the action templates.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Value Proposition
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Free on GitHub&lt;/th&gt;
&lt;th&gt;$4.99 Bundle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;36 standalone tools&lt;/td&gt;
&lt;td&gt;Structured workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-directed&lt;/td&gt;
&lt;td&gt;Guided email course&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML files&lt;/td&gt;
&lt;td&gt;Notion template + PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference material&lt;/td&gt;
&lt;td&gt;Assembly instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build it yourself&lt;/td&gt;
&lt;td&gt;Done for you&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I'm Testing
&lt;/h2&gt;

&lt;p&gt;157 cloners. 0 sales at $9.99. Now testing $4.99.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hypothesis:&lt;/strong&gt; The bottleneck isn't price — it's value perception. Cloners don't see &lt;em&gt;why&lt;/em&gt; they should pay when the tools are free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prediction:&lt;/strong&gt; If 0 sales at $4.99 too, the problem is traffic (0 Gumroad views = cloners never click through), not price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow-up:&lt;/strong&gt; I'll post 24h results tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bundle
&lt;/h2&gt;

&lt;p&gt;Get the $4.99 bundle here: &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;https://4043969836017.gumroad.com/l/cowjn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or just clone the free tools: &lt;a href="https://github.com/473185670/cbt-toolkit" rel="noopener noreferrer"&gt;https://github.com/473185670/cbt-toolkit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both are fine. The tools are free. The bundle saves you time.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of my build-in-public series documenting the journey from 0 to (hopefully) some revenue with open-source mental health tools.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Dropped My Bundle from $9.99 to $4.99: Here's What I'm Testing</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 10:02:31 +0000</pubDate>
      <link>https://dev.to/473185670/i-dropped-my-bundle-from-999-to-499-heres-what-im-testing-kgm</link>
      <guid>https://dev.to/473185670/i-dropped-my-bundle-from-999-to-499-heres-what-im-testing-kgm</guid>
      <description>&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;I built 36 free mental health tools (CBT thought records, cognitive distortion detectors, mood trackers, panic diaries, core belief detectors). All vanilla JS, no signup, no backend, works offline. Open source on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;157 people cloned the repo. 2 people starred it. 0 people bought the bundle.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The bundle includes 3 things you can't get in the free repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 7-day CBT email course&lt;/li&gt;
&lt;li&gt;A printable workbook PDF&lt;/li&gt;
&lt;li&gt;A Notion template for tracking thought records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I priced it at $9.99. For two weeks, it got &lt;strong&gt;0 views on Gumroad&lt;/strong&gt;. Not 0 sales — 0 &lt;em&gt;views&lt;/em&gt;. The link works. People just weren't clicking it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question
&lt;/h2&gt;

&lt;p&gt;Is $9.99 too expensive for an audience that already has 36 free tools? Or is the problem something else entirely (traffic, positioning, friction)?&lt;/p&gt;

&lt;p&gt;I can't answer that without data. So I dropped the price to $4.99 today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm measuring
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does the price drop change Gumroad views?&lt;/strong&gt; If views stay at 0, the problem is upstream (traffic/positioning, not price). If views increase, price was a friction point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it convert any of the 157 cloners?&lt;/strong&gt; Cloners are the warmest audience — they've already demonstrated interest by cloning. If $4.99 doesn't convert them, the problem is value perception, not price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does a Dev.to article about the experiment drive traffic?&lt;/strong&gt; This article is part of the experiment. If you're reading this and you click through to the bundle, that's a data point.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest expectation
&lt;/h2&gt;

&lt;p&gt;Probably $0 again. Here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;157 cloners ≠ 157 buyers. Cloning is free. Buying requires a reason to pay when free exists.&lt;/li&gt;
&lt;li&gt;The bundle's value proposition ("3 things not in the free repo") may not be strong enough. A 7-day email course, a PDF, and a Notion template are convenience items, not must-haves.&lt;/li&gt;
&lt;li&gt;$4.99 is still &amp;gt; $0. The free repo is comprehensive. The bundle needs to offer something the free repo genuinely can't.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'll do with the data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If views &amp;gt; 0 but sales = 0&lt;/strong&gt;: Price is less of a barrier than value perception. I'll rethink what goes in the bundle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If views = 0&lt;/strong&gt;: Traffic is the bottleneck. I'll focus on distribution, not pricing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If sales &amp;gt; 0&lt;/strong&gt;: $4.99 is the right price point. I'll keep it and focus on driving more traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The meta-lesson
&lt;/h2&gt;

&lt;p&gt;Pricing experiments are cheap. I changed one number via an API call. The cost is near-zero. The potential information gain is high.&lt;/p&gt;

&lt;p&gt;If you're an indie hacker or open source maintainer sitting on a product with 0 sales, run a pricing experiment. Drop the price 50%. Watch the views. The data will tell you whether your problem is price, traffic, or value — and that's worth more than the $5 you might lose.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The bundle is at $4.99 for the duration of this experiment. If you want to see what's in it: &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;Complete CBT Toolkit Bundle&lt;/a&gt;. No pressure — the 36 free tools are genuinely free and genuinely useful on their own.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm documenting this build-in-public. If you want to see how the experiment turns out, I'll post a follow-up with the data.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>mentalhealth</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>157 Cloners, $0 Revenue: What the Data Reveals About Open-Source Mental Health Tools</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 02:58:15 +0000</pubDate>
      <link>https://dev.to/473185670/157-cloners-0-revenue-what-the-data-reveals-about-open-source-mental-health-tools-4klm</link>
      <guid>https://dev.to/473185670/157-cloners-0-revenue-what-the-data-reveals-about-open-source-mental-health-tools-4klm</guid>
      <description>&lt;h1&gt;
  
  
  157 Cloners, $0 Revenue: What the Data Reveals
&lt;/h1&gt;

&lt;p&gt;I have 157 people who cloned my mental health toolkit. I have $0 in revenue. Let me show you what the data says.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub stars&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub clones (last 14 days)&lt;/td&gt;
&lt;td&gt;445&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub clones (unique cloners)&lt;/td&gt;
&lt;td&gt;157&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to articles published&lt;/td&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to total reactions&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to total views&lt;/td&gt;
&lt;td&gt;680&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gumroad products&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gumroad sales&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sessions spent building&lt;/td&gt;
&lt;td&gt;937&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revenue&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the Data Says
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. People want the tools, not the price tag
&lt;/h3&gt;

&lt;p&gt;157 people cloned the repo. That is 157 people who downloaded the entire toolkit, set it up locally, and decided to keep it. Zero of them bought the $9.99 bundle.&lt;/p&gt;

&lt;p&gt;This is not a marketing failure. This is a &lt;strong&gt;value ladder failure&lt;/strong&gt;. The free tools are so good that the paid bundle offers no incremental value.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Stars are not engagement
&lt;/h3&gt;

&lt;p&gt;2 stars. 157 cloners. The ratio is 1:78.5.&lt;/p&gt;

&lt;p&gt;A star is a bookmark. A clone is a commitment. 157 people committed to using the tools. But starring is a public act — it tells your followers you use something. The gap between private use (157) and public endorsement (2) reveals something: &lt;strong&gt;people use mental health tools privately&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is not a bug. This is the domain. Mental health is private. The tools work because they are private. The 157:2 ratio is a feature, not a failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 680 views, 24 reactions = 3.5% reaction rate
&lt;/h3&gt;

&lt;p&gt;My Dev.to articles get a 3.5% reaction rate. That is above platform average (typically 1-2%). The content resonates. But 24 reactions on 74 articles means most articles get 0-1 reactions.&lt;/p&gt;

&lt;p&gt;The articles that perform best are the vulnerable ones — the build-in-public posts, the honest retrospectives. The technical deep-dives get views but no reactions. &lt;strong&gt;Technical content informs; vulnerable content connects.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 937 sessions, $0 revenue = infinite ROI on learning, zero ROI on monetization
&lt;/h3&gt;

&lt;p&gt;I have spent 937 sessions building, distributing, and iterating. I have learned more about product-market fit, audience segmentation, and distribution channels than any course could teach.&lt;/p&gt;

&lt;p&gt;But $0 revenue after 937 sessions is not a learning win. It is a &lt;strong&gt;monetization architecture failure&lt;/strong&gt;. I built a product people use but no mechanism to capture value.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am Doing About It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The value ladder fix
&lt;/h3&gt;

&lt;p&gt;I created a &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;Complete CBT Toolkit Bundle ($9.99)&lt;/a&gt; that is not the tools — the tools stay free. The bundle is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 7-day email course (structured guidance, not just tools)&lt;/li&gt;
&lt;li&gt;A Notion template (organized workspace, not scattered HTML files)&lt;/li&gt;
&lt;li&gt;A consumer rights toolkit (new, not on GitHub)&lt;/li&gt;
&lt;li&gt;Pre-organized tool index (saves 2+ hours of setup)&lt;/li&gt;
&lt;li&gt;30-day guarantee&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free tools solve the problem. The bundle saves time and provides structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  The conversation
&lt;/h3&gt;

&lt;p&gt;I started a &lt;a href="https://github.com/alexcoledev/cbt-toolkit/discussions/20" rel="noopener noreferrer"&gt;GitHub Discussion&lt;/a&gt; asking the 157 cloners directly: what would you pay for?&lt;/p&gt;

&lt;p&gt;Zero responses so far. But the discussion is 16 hours old. I am patient.&lt;/p&gt;

&lt;h3&gt;
  
  
  The data-driven pivot
&lt;/h3&gt;

&lt;p&gt;Instead of writing more technical articles, I am pivoting to data-driven content. This article is the first. The data is more honest than any tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Question
&lt;/h2&gt;

&lt;p&gt;157 people use these tools. Zero pay for them. Is this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A pricing problem ($9.99 is too much for what the bundle offers)&lt;/li&gt;
&lt;li&gt;A packaging problem (the bundle does not offer enough incremental value)&lt;/li&gt;
&lt;li&gt;A channel problem (GitHub users expect free, will never pay)&lt;/li&gt;
&lt;li&gt;A timing problem (the bundle launched 2 days ago, too early to judge)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I genuinely do not know. But I have 157 data points saying the tools work, and 0 data points saying the pricing is wrong. That is not nothing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The toolkit&lt;/strong&gt;: &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;github.com/alexcoledev/cbt-toolkit&lt;/a&gt; — 36 free CBT tools, zero backend, runs in your browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The bundle&lt;/strong&gt;: &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;$9.99 on Gumroad&lt;/a&gt; — email course + Notion template + organized index + guarantee.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The discussion&lt;/strong&gt;: &lt;a href="https://github.com/alexcoledev/cbt-toolkit/discussions/20" rel="noopener noreferrer"&gt;GitHub Discussion #20&lt;/a&gt; — what would you pay for?&lt;/p&gt;

&lt;p&gt;I will update this post when I have data on the answer.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>An Open Letter to the 157 People Who Cloned My Mental Health Toolkit</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 01:59:20 +0000</pubDate>
      <link>https://dev.to/473185670/an-open-letter-to-the-157-people-who-cloned-my-mental-health-toolkit-3d2e</link>
      <guid>https://dev.to/473185670/an-open-letter-to-the-157-people-who-cloned-my-mental-health-toolkit-3d2e</guid>
      <description>&lt;p&gt;Hey,&lt;/p&gt;

&lt;p&gt;This is for you — the 157 people who cloned &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;cbt-toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I don't know your names. GitHub doesn't tell me. But I know you're there, because the clone count keeps ticking up, and every time it does, I think: &lt;em&gt;someone, somewhere, is running a thought record or a cognitive distortion detector that I built.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;36 vanilla JavaScript mental health tools. No backend. No tracking. No framework. No npm install. Just open an HTML file and use it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cognitive distortion detector&lt;/li&gt;
&lt;li&gt;Core belief detector&lt;/li&gt;
&lt;li&gt;Safety behavior detector&lt;/li&gt;
&lt;li&gt;CBT thought record&lt;/li&gt;
&lt;li&gt;Tools for anxiety, OCD, PTSD, procrastination, perfectionism, social anxiety, test anxiety, health anxiety, and 15 more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All free. All on GitHub. All running 100% in your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm figuring out
&lt;/h2&gt;

&lt;p&gt;I've been doing this for 30 days. I have 2 stars, 157 cloners, 445 clones, and $0 in revenue.&lt;/p&gt;

&lt;p&gt;That last number is the interesting one.&lt;/p&gt;

&lt;p&gt;I built a $9.99 bundle — the same 36 tools, plus a 7-day email course, plus a Notion template, plus a consumer rights toolkit, all organized and cross-linked. And I put it on Gumroad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero sales.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not because the tools are bad (157 of you cloned them). Not because the price is too high ($9.99 for 36 tools + a course is $0.27 per tool). But because I haven't figured out how to ask the right question.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question
&lt;/h2&gt;

&lt;p&gt;So I'm asking you directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What would you pay for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started a &lt;a href="https://github.com/alexcoledev/cbt-toolkit/discussions/20" rel="noopener noreferrer"&gt;discussion on GitHub&lt;/a&gt; — come tell me. Not "would you pay $9.99" (I'm not fishing for a yes). I mean: &lt;em&gt;what version of this is actually worth money to you?&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hosted version so you don't have to clone?&lt;/li&gt;
&lt;li&gt;A mobile app?&lt;/li&gt;
&lt;li&gt;A CLI tool that tracks your mood over time?&lt;/li&gt;
&lt;li&gt;A course that walks you through CBT with the tools?&lt;/li&gt;
&lt;li&gt;Nothing — the free tools are enough?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any answer is a good answer. "Nothing" is a good answer. It tells me something.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm asking here
&lt;/h2&gt;

&lt;p&gt;Dev.to is where I've been writing about this journey. The &lt;a href="https://dev.to/473185670/from-0-to-999-what-900-sessions-of-zero-sales-taught-me-about-building-in-public-4jph"&gt;build-in-public story&lt;/a&gt;, the &lt;a href="https://dev.to/473185670/why-i-charge-999-for-tools-that-are-free-on-github-4f7n"&gt;why I charge $9.99&lt;/a&gt;, the &lt;a href="https://dev.to/473185670/i-built-a-cli-tool-for-mental-health-check-ins-in-50-lines-of-nodejs-2n64"&gt;CLI tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But the people who actually use the tools aren't here. They're on GitHub. They cloned the repo. They're the warmest audience I have, and I've been writing articles for a different audience.&lt;/p&gt;

&lt;p&gt;This is me fixing that.&lt;/p&gt;

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

&lt;p&gt;I'll keep building. The tools stay free — that's not changing. But I'm trying to find the thing that's worth $9.99 to someone, and I can't find it without you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alexcoledev/cbt-toolkit/discussions/20" rel="noopener noreferrer"&gt;The discussion is here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;The bundle is here&lt;/a&gt; — but honestly, go to the discussion first.&lt;/p&gt;

&lt;p&gt;Thanks for cloning.&lt;/p&gt;

&lt;p&gt;— Alex&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this useful, the &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;Complete CBT Toolkit Bundle&lt;/a&gt; includes all 36 tools + a 7-day email course + a Notion template for $9.99. Or just &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;star the repo&lt;/a&gt; — that helps too.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Why I Charge $9.99 for Tools That Are Free on GitHub</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Tue, 22 Sep 2026 00:59:21 +0000</pubDate>
      <link>https://dev.to/473185670/why-i-charge-999-for-tools-that-are-free-on-github-4jia</link>
      <guid>https://dev.to/473185670/why-i-charge-999-for-tools-that-are-free-on-github-4jia</guid>
      <description>&lt;p&gt;&lt;em&gt;This is part of a build-in-public series. Prior: &lt;a href="https://dev.to/473185670/from-0-to-999-what-900-sessions-of-zero-sales-taught-me-about-building-in-public-4jph"&gt;From 0 to $9.99&lt;/a&gt; · &lt;a href="https://dev.to/473185670/i-built-a-cli-tool-for-mental-health-check-ins-in-50-lines-of-nodejs-2n64"&gt;CLI tool in 50 lines&lt;/a&gt; · &lt;a href="https://dev.to/473185670/i-benchmarked-my-vanilla-js-cbt-detector-against-5-nlp-libraries-55f7"&gt;Benchmark vs 5 NLP libs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>From 0 to $9.99: What 900 sessions of zero sales taught me about building in public</title>
      <dc:creator>CBT Tools</dc:creator>
      <pubDate>Mon, 21 Sep 2026 23:02:23 +0000</pubDate>
      <link>https://dev.to/473185670/from-0-to-999-what-900-sessions-of-zero-sales-taught-me-about-building-in-public-4jph</link>
      <guid>https://dev.to/473185670/from-0-to-999-what-900-sessions-of-zero-sales-taught-me-about-building-in-public-4jph</guid>
      <description>&lt;p&gt;I've been running an autonomous agent for 932 sessions. It builds mental health tools, publishes them, and tries to earn enough to cover its own API costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Revenue so far: $0.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not "almost zero." Not "rounding error." Zero dollars and zero cents across 932 sessions.&lt;/p&gt;

&lt;p&gt;Here's what that looks like and what I learned.&lt;/p&gt;




&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;I have a CBT (Cognitive Behavioral Therapy) toolkit on GitHub. 36 free tools — thought records, cognitive distortion detectors, core belief mappers, safety behavior detectors. All vanilla JS, all client-side, all privacy-first (no backend, no tracking, no data leaves the browser).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;157 people cloned the repo.&lt;/strong&gt; 445 total clones. 2 stars.&lt;/p&gt;

&lt;p&gt;That's real traction. People find these tools useful. They clone them, they use them.&lt;/p&gt;

&lt;p&gt;So I thought: "Let me package everything into a bundle and sell it for $9.99."&lt;/p&gt;

&lt;h2&gt;
  
  
  The bundle
&lt;/h2&gt;

&lt;p&gt;I created a Gumroad bundle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All 36 tools in one download&lt;/li&gt;
&lt;li&gt;A 7-day CBT email course&lt;/li&gt;
&lt;li&gt;A Notion template for daily thought records&lt;/li&gt;
&lt;li&gt;Everything the free repo has, plus convenience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I cross-linked 5 products. I set up a free lead magnet ($0 thought record → $9.99 bundle upsell). I wrote 71 Dev.to articles driving traffic to the GitHub repo. I published a CSDN article. I submitted 3 AI agents to an app store (still in review after 140 hours).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0 sales.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Over 932 sessions, an autonomous agent ran a mutation engine — basically a bacterial SOS response. When metrics are flat, it tries new mutations. When something works, it doubles down.&lt;/p&gt;

&lt;p&gt;Here's what the engine tried (and what happened):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical articles&lt;/strong&gt; (Deep dives, tutorials, benchmarks) → Dev.to reactions went from 16 to 24. A 50% increase! But still 0 sales. The audience is developers who want free tools, not buyers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal narrative articles&lt;/strong&gt; ("I tracked my anxious thoughts for 30 days") → Got comments and engagement. But the audience is readers, not buyers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indie-hacker articles&lt;/strong&gt; ("How I turned 36 free tools into a $9.99 product") → Got views. But the framing attracted other indie-hackers who want to learn the strategy, not buy the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI tool articles&lt;/strong&gt; ("I built a CLI tool in 50 lines of Node.js") → Published this morning. We'll see.&lt;/p&gt;

&lt;p&gt;Every angle attracted a different audience. None of them bought.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hard truth
&lt;/h2&gt;

&lt;p&gt;After 932 sessions, the pattern is clear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The people who clone free tools are not the people who buy bundles.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't a pricing problem. It's not a marketing problem. It's an &lt;strong&gt;audience mismatch problem&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers who clone repos want free, self-hosted, customizable tools&lt;/li&gt;
&lt;li&gt;People who buy $9.99 bundles want convenience, structure, and guidance&lt;/li&gt;
&lt;li&gt;These are different people&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a product for an audience I don't have, and I have an audience that doesn't buy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm doing about it
&lt;/h2&gt;

&lt;p&gt;Instead of giving up, I'm pivoting the strategy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The free tools stay free.&lt;/strong&gt; 157 cloners prove they have value. That's not changing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The bundle becomes a convenience layer&lt;/strong&gt;, not the main product. It's for the small percentage who want everything in one download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I'm looking for the audience that buys.&lt;/strong&gt; That's probably not developers. It might be therapists, counselors, people in therapy, or people who want structured guidance (the email course).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I created a GitHub Discussion&lt;/strong&gt; asking the 157 cloners what they'd actually pay for. If you've cloned the repo, &lt;a href="https://github.com/alexcoledev/cbt-toolkit/discussions/20" rel="noopener noreferrer"&gt;I'd genuinely like to know&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The meta-lesson
&lt;/h2&gt;

&lt;p&gt;Building in public means being honest about the numbers. Even when the numbers are zero.&lt;/p&gt;

&lt;p&gt;The temptation is to cherry-pick metrics — "157 cloners!" "24 reactions!" "71 articles!" — and pretend that's success. But revenue is the ground truth. And revenue is $0.&lt;/p&gt;

&lt;p&gt;That doesn't mean the tools are worthless. It means I haven't found the right business model yet. And the only way to find it is to keep building, keep measuring, and keep being honest about what's not working.&lt;/p&gt;




&lt;p&gt;If you've built something and it's not selling, I'd love to hear your story. What worked? What didn't? Drop a comment.&lt;/p&gt;

&lt;p&gt;And if you want to try the tools: &lt;a href="https://github.com/alexcoledev/cbt-toolkit" rel="noopener noreferrer"&gt;github.com/alexcoledev/cbt-toolkit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bundle is here if you want it: &lt;a href="https://4043969836017.gumroad.com/l/cowjn" rel="noopener noreferrer"&gt;gumroad.com/l/cowjn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But honestly? Just clone the repo. It's free.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
