Most "indie hacker" posts start with a growth chart. This one starts with a correction.
I built a free AI toolbox for small e-commerce sellers: product titles, social posts, customer-service replies, negative-review replies, brand names, product descriptions, short-video scripts and AI product photos. No signup. Five free runs a day. It runs on vanilla HTML, one small Node server and free APIs.
Then I checked the analytics. 244 page views looked encouraging. But 117 of today's 121 views came from the same handful of IPs and identical user agents — a Mac Safari string repeated 99 times, an iPhone Chrome string repeated 85 times. Almost none of it was human. The honest number of real users was closer to zero.
So I stopped optimizing for page views and started optimizing for a real product.
What the toolbox does
Nine tools, one input box each:
- Social post (headline + short body + hashtags)
- Product title + five bullet points + detail-page opening
- Customer service scripts (welcome, sizing, stock, shipping, payment reminder, after-sales)
- Negative-review replies in three tones
- Store/brand name ideas with meanings
- Daily social captions
- Product detail page structure
- 60-second short-video script with shot notes
- AI product photo (via Pollinations)
The English version is here: xiaoshengyi-toolbox.netlify.app/en. The Chinese original is at xiaoshengyi-toolbox.netlify.app.
The stack is deliberately boring
- Static frontend on Netlify
- A ~200-line Node HTTP server for generation
- A local OpenAI-compatible endpoint (DeepSeek) for text
- Pollinations for free product images
- JSONL files for anonymous page-view and generation counts
No framework, no database, no auth. The whole point is that a solo operator can run it for $0 and not wake up to a broken build pipeline.
What I learned building the English version
1. Prompts are not just translated strings
The Chinese prompts were built around Chinese e-commerce conventions: 30-character Taobao titles, 小红书 tone, 客服话术. Translating them word-for-word produced stiff English. I rewrote them for English marketplaces instead: 60-character titles, benefit-first bullets, Etsy/Shopify/Amazon/Instagram contexts.
Same model, different output. The prompt is the product.
2. Free APIs fail differently
Pollinations can return a valid JPEG that is actually a "free limit reached" card. It can also return 404 or 402. The text endpoint sometimes times out. So the frontend tries the local API first, then falls back to Pollinations text models, then shows a plain error. Never assume a 200 means the content is usable.
3. Analytics without bot filtering is fiction
I added a tiny /api/track endpoint and logged path, referrer, user-agent and IP. The first useful query was not "how many views" but "which user agents repeat". Two strings accounted for 75% of traffic. Now the daily report labels traffic as "suspected human" only after excluding known bot UA patterns, headless browsers and single IPs with 10+ hits.
The lesson: if your product is free and public, most of your first "users" are monitors.
What I'm doing next
- Writing English SEO pages for long-tail queries (product title formulas, Etsy description templates, customer-service scripts)
- Submitting the English toolbox to free AI-tool directories
- Publishing one useful teardown per week instead of generic launch posts
- Watching for actual generations, not page views
If you sell online and want to try it, the toolbox is free: xiaoshengyi-toolbox.netlify.app/en. If you want the customer-service side automated inside your store, there's a service page too.
If you've built a free tool and seen the same fake-traffic pattern, I'd like to hear how you filtered it.

