Playbook · 19 June 2026 · 8 min read
How to get your first paying customer for a side project
You built the thing. It works. People even said "cool." And yet your Stripe dashboard says ₹0. This is the most common — and most fixable — failure mode for indie hackers. Here's the monetization-first playbook to fix it.
The real reason your finished app makes ₹0
It's rarely the product. Builders ship genuinely useful tools and still earn nothing because the path to paymentdoesn't exist. A visitor lands, can't tell what it costs, can't see a reason to trust you, and there's no button that takes their money. The gap between "it works" and "it charges money" is a checklist, not a moonshot.
The good news: every item on that checklist is something you can fix in a day. Let's go through them in order of revenue impact.
The 10 things that block your first sale
1. Pricing isn't visible
If a visitor can't find a number, they assume one of two things: it's free (so they won't value it) or it's "enterprise" (so they leave). Put a real price on the page. A single ₹999/mo beats "Contact us" for a solo product every time. You don't need three perfect tiers — you need one honest number.
2. There's no checkout
This is the big one. A shocking number of "launched" products have no way to actually pay. Wiring Stripe or Razorpay feels like a weekend of webhook pain, so it gets deferred forever. It shouldn't. A working subscription checkout in Next.js is about five files: a checkout route, a signature-verified webhook, an entitlement check, and a paywall component. (FirstDollar generates all of them for you — scan your site and grab the boilerplate.)
3. The CTA is unclear or competes with itself
Five buttons of equal weight is zero buttons. Pick one primary action — "Start free", "Get started" — and make everything else secondary. One obvious path converts.
4. No email capture for the 95% who won't buy today
Most first-time visitors aren't ready. If they leave without giving you an email, they're gone forever. A simple "get notified" field turns a bounce into a follow-up — and follow-up is where a lot of first sales actually happen.
5. Zero social proof
Strangers pay strangers only when the risk feels low. You don't need 10,000 users. One real testimonial, a founder note, a "built by an indie dev like you" — anything that makes you a person instead of a faceless form.
6. The headline doesn't say what it does
Clever beats clear in your head; clear beats clever on the page. The formula that works: [outcome] for [who], without [pain]. Under twelve words. If a stranger can't tell what you do in three seconds, they scroll past.
7. Broken share previews
You'll launch on Reddit, X, and in DMs. If your link unfurls to a blank box, click-through craters. Add Open Graph tags and a 1200×630 image. It's ten minutes that multiplies every share you get.
8. No analytics
You cannot improve a funnel you cannot see. Install a lightweight analytics tool (Plausible, PostHog, Umami) and fire two events: signup and paid. Now you know whether your problem is traffic, signups, or conversion — three very different fixes.
9. Missing legal pages
This isn't just CYA. Payment providers — Razorpay especially — require a public Privacy and Refund/Cancellation policy before they'll approve you for live payments. Skipping them literally blocks your ability to charge.
10. The mobile layout is broken
Launch traffic from Reddit and X is overwhelmingly mobile. If your pricing table overflows at 375px, those buyers never get to checkout. Test at 375, 768, and 1280.
The afternoon plan
- Add one visible price and a single primary CTA. (30 min)
- Wire a real checkout + webhook. Use generated boilerplate so it's done, not deferred. (60 min)
- Add Privacy + Refund pages so your payment provider approves you. (30 min)
- Add an email capture and one testimonial or founder note. (30 min)
- Fix OG tags, install analytics, sanity-check mobile. (30 min)
- Write and schedule your launch posts. (30 min)
That's a single focused afternoon between you and a checkout that works. The hard part — building the product — is already behind you.
Where FirstDollar fits
FirstDollar exists to compress that afternoon. Paste your landing page and it scans for all ten blockers above, scores you 0–100, and ranks the fixes by revenue impact. It writes your pricing page in ₹ and $, generates a drop-in Stripe or Razorpay paywall for Next.js, and drafts your Reddit, X, Product Hunt, and Show HN posts. It doesn't help you build — it helps you get paid, which is exactly where most makers get stuck.