I Shipped My First Indie Product. Here Is What Actually Happened.

I Shipped My First Indie Product. Here Is What Actually Happened.

posted Originally published at dev.to 4 min read

37 days. A Chrome extension with an AI reading assistant. Full cycle: idea, build, release, marketing, exit. My first indie project under the Indie Labs brand.

Result: 11 installs, 0 active users, 0 revenue. Now open-source and self-hosted.

This is not a success story. But it is an honest one.


What I built

R-Searcher is a Chrome extension that helps you read faster without leaving the page. Open an article, click Read, get three tabs back: Essence (3 to 5 sentences on whether the article is worth your time), Notes (a markdown digest of what is worth keeping), and Next Steps (where to go after this article). Highlight any confusing fragment and get an inline explanation.

The stack was intentionally lean: Chrome Extension MV3, Cloudflare Worker as the backend, Gemini API for inference.

The product works. The rest did not go as planned.


What went well

Full cycle completed. Build, test, release, marketing: all in one project. Real experience, not a tutorial.

Fast pivot. I spotted the risk with my own API key being shared across all users, found a solution (self-hosted worker), and shipped it before it became a real cost problem. The project stayed alive and my expenses dropped to zero.

The product is actually live. Extension in the Chrome Store, landing page, documentation, onboarding guide: everything is in place.

Knowing when to stop. I honestly admitted the project was falling out of my focus and moved it to a low-cost mode instead of dragging it out.


What was hard

Gemini rate limits. Google does not offer strict per-user spending caps. That made any free-tier model risky: a traffic spike with no ceiling is a blank check.

Distribution. AI reading extensions are one of the most crowded segments in the Chrome Store right now. Organic traffic without an existing audience is nearly impossible.

Business model. Self-hosted solved my cost problem but created a new one: onboarding friction. Free users drop off at the "deploy a worker" step.

Focus. The first indie project pulled attention from other ideas that might have been better fits. Knowing when to move on is a skill I had to learn mid-project.


Marketing: the plan vs reality

The plan: Chrome Store brings users organically. Create Indie Labs accounts across Reddit, X, Dev.to, Hashnode, LinkedIn. Post on launch day. Watch installs come in.

What actually happened:

  • Chrome Store takes 5 days for review, then another week before the listing gets any impressions. Zero downloads on launch day.
  • Google banned my new account as a bot. Had to create a new one.
  • Reddit banned my new account as a bot. Same.
  • X without a paid subscription gets essentially zero impressions.
  • Dev.to and Hashnode posts did not get traction.
  • LinkedIn post was received coldly: wrong audience for this product.

Right now the extension has 11 installs and 0 active users. The Store is finally showing it to people, so organic is slowly starting. But it is slow.

The real lesson: a marketplace is a shelf, not a salesperson. The shelf does not sell anything on its own. You need traffic before the release, not after.

New accounts get zero-trust treatment everywhere: Google, Reddit, Patreon, all of them. Accounts need history before you use them for promotion. That means posting about the build process weeks before launch, not creating accounts on launch day.


Monetization: the plan vs reality

The plan: Lemon Squeezy for Pro licenses, free users get weekly limits. Stripe as a backup. Patreon for early supporters.

What actually happened:

  • Lemon Squeezy does not work with Ukraine.
  • Stripe does not work with Ukraine.
  • Patreon: killed by the same zero-trust problem with new accounts.
  • No clear plan B.

Result: no monetization path at all.

I came up with workarounds. Distribute license keys manually, use Patreon as a delivery channel. But each one had a blocker. The payment infrastructure problem was never solved because I did not check it before starting, only after.

Verify your payment stack before writing the first line of code. Not during development. Not after launch. Before. This is a specific problem for developers in Ukraine: Stripe and Lemon Squeezy are simply not available options. Paddle, Gumroad, and local alternatives need to be evaluated upfront.


The technical decision I am actually happy with

The original version was connected to my own Gemini API key. Google does not offer strict per-user spending limits, which meant uncontrolled traffic could cost real money with no way to cap it.

I refactored to self-hosted: each user deploys their own Cloudflare Worker, connects their own AI provider, and pays for their own usage. The extension stays alive in the Chrome Store without touching my budget.

This was the right call economically. But it has a cost: the setup step kills conversion. Most users want "install and it works." A step that says "deploy a Cloudflare Worker first" loses the majority of potential users.

The tradeoff is real. Next time I either build in paid monetization from day one with a provider that actually works for my region, or I design the product so it genuinely works without any setup.


Lessons for the next project

Audience before product. Find people with the pain in real communities, talk to them, understand if they actually want a solution: before writing any code. My next move is posting in relevant subreddits about the problem I want to solve next, not promoting anything, just listening.

Payment stack on day one. Know how you will accept money before you start building. Not a rough plan, an actual working setup.

Public devlog in parallel with development. This builds account history, creates a narrative, and grows an early audience. All three things I needed and did not have. Also: read at least one book on go-to-market before starting. I was not the first to walk into these mistakes and the information exists.

Set a timeline for the pivot decision before you start. 37 days was a good pace. But having a pre-committed checkpoint helps you move on without second-guessing.


The project is closed. The code is on GitHub. The extension is still in the Chrome Store.

GitHub | rsearcher.online | indielabs.tech

First project under Indie Labs. Building in public.

More Posts

Just completed another large-scale WordPress migration — and the client left this

saqib_devmorph - Apr 7

I Wrote a Script to Fix Audible's Unreadable PDF Filenames

snapsynapseverified - Apr 20

What Is an Availability Zone Explained Simply

Ijay - Feb 12

Local-First: The Browser as the Vault

Pocket Portfolioverified - Apr 20

I spent years trying to get AI agents to collaborate. Then Opus 4.6 and Codex 5.3 wrote the rules

snapsynapseverified - Apr 20
chevron_left

Related Jobs

View all jobs →

Commenters (This Week)

1 comment
1 comment
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!