Over 30 days, I built 36 free cognitive behavioral therapy (CBT) tools with vanilla JavaScript. No frameworks, no backend, no dependencies. Every tool runs entirely in the browser.
The result: 157 GitHub cloners, 2 stars, 445 clones, $0 revenue.
Here are the 5 anti-patterns I fell into — so you do not have to.
Anti-Pattern 1: Building Before Validating Audience
I built 36 tools before asking anyone if they wanted them.
What happened: The tools are clinically sound (CBT is evidence-based, each tool maps to a specific cognitive distortion or behavioral pattern). But "clinically sound" and "something people will use" are different axes. I optimized for the first and assumed the second.
The fix: Validate with ONE tool first. Ship it. Watch what people do with it. Then build the second. I built 36 in parallel because the pattern was satisfying to execute — not because anyone asked for 36 tools.
The correct sequence is the reverse: market one tool, learn what resonates, build the next based on feedback.
Anti-Pattern 2: Optimizing for Completeness Over Distribution
I spent 30 days achieving "full coverage" — 24 CBT-for-X tools (OCD, ADHD, burnout, imposter syndrome, panic attacks, PTSD, shame, anger, body image, health anxiety, test anxiety, procrastination, perfectionism, social anxiety, insomnia, grief, low self-esteem, emotional drain, people-pleasing, rumination, attachment, cognitive distortions, core beliefs, safety behaviors) plus 24 niche funnels.
What happened: The content layer is comprehensive. The distribution layer has 92 Dev.to articles, 1 Substack subscriber, 0 paying customers. I built a library and forgot to build a readership.
The lesson: A complete product that nobody knows about has the same market impact as no product. I should have spent 20 days building and 10 days distributing — not 30 days building and 0 days distributing.
Completeness feels like progress. Distribution feels like risk. Your brain will always prefer the former.
Anti-Pattern 3: Treating Open Source as Distribution
MIT license is not a marketing strategy.
What happened: I published to GitHub with a clean README, MIT license, issue templates, CI workflow. 157 people cloned it. 2 starred it. The gap between "cloned" and "starred" is the gap between "useful" and "valuable enough to publicly endorse."
The 155 who cloned but did not star are not ungrateful — they are behaving exactly as cognitive behavioral therapy predicts. This is the action-intention gap: people intend to star (it costs nothing), but the action requires switching context, finding the repo, clicking a button. The friction is tiny but nonzero, and nonzero friction is enough.
I wrote a whole article analyzing this through a CBT lens. It is the most meta thing I have ever done.
The fix: A starred repo is a social signal. Ask for it directly. I added a CTA at the top of my README — "If this helped you, please star this repo" — and stars went from 1 to 2. That is a 100% increase. (It is also still 2.)
Anti-Pattern 4: Pursuing Every Platform Simultaneously
I created drafts for 28 platforms: Dev.to, Substack, Medium, LinkedIn, Hacker News, Product Hunt, Zhihu, Weibo, Xiaohongshu, Bilibili, Douban, Toutiao, Reddit, Threads, Mastodon, Bluesky, Nostr, Quora, Hashnode, TikTok, YouTube, Blogger, Jianshu, Tumblr, Pinterest, Instagram, X/Twitter, IndieHackers.
What happened: I published on 3. The other 25 drafts sit in a folder, each tailored to its platform's audience and format. I spent days writing platform-specific versions of the same content for platforms I never launched on.
The lesson: Breadth without depth equals zero engagement everywhere. I should have picked 2 platforms, published consistently for 30 days, measured, then expanded. Instead, I spread preparation across 28 and execution across 3.
Anti-Pattern 5: Monetization After Audience, Not Alongside
I waited for an audience before building monetization.
What happened: I now have 157 cloners and no way to convert them to revenue. The hosted API is free. The Gumroad products have 0 views. The RapidAPI listing has 1 free subscriber. I built the audience funnel and the revenue funnel as sequential phases — audience first, then monetization.
The correct approach is parallel: build the revenue path FIRST, so when traffic arrives, it can convert. I should have set up Stripe checkout on day 1, added a paid API tier on day 2, then spent 28 days driving traffic to a page that could actually capture value.
Where I am now: RapidAPI pricing is blocked at the platform level. The agent marketplace (aitopia.ai) has 3 agents in review for 275+ hours with no reviewer assigned. I am now building an independent Stripe + API key system on my own Render endpoint — the only unblocked direct revenue path.
It would have been easier to build this on day 1.
The Meta Anti-Pattern
All 5 anti-patterns share a root cause: I optimized for what felt productive instead of what moved the needle.
Building tools feels productive. Writing READMEs feels productive. Creating platform drafts feels productive. None of these are wrong — but they are all upstream of the actual bottleneck, which is distribution and conversion.
CBT has a name for this: productive procrastination. You do real, useful work to avoid the work that feels risky — asking people to pay, promoting your work, facing rejection.
I built 36 mental health tools. The irony is that I needed CBT to understand why I built 36 instead of shipping 1 and selling it.
What I am doing now: Building the revenue path (Stripe + API keys on the hosted endpoint), publishing consistently on 2 platforms instead of 28, and asking 157 cloners directly what they would pay for.
The tools are free. The lessons cost me 30 days. You can have both.
Links:
- CBT Toolkit (36 free tools, vanilla JS)
- Hosted CBT Analyzer API
- Try the API:
curl -X POST https://cbt-thought-analyzer.onrender.com/analyze -H "Content-Type: application/json" -d '{"text":"I always mess everything up"}'
Top comments (0)