Latest / The Indie Hacker Podcast with Fexingo: Solo Developers, SaaS Side Projects, and Independent Tech / How a Solo Dev Used a CLI Tool to Hit 10K MRR
Transcript
- Lucas: So there's this solo developer — goes by the handle 'deploydave' on Twitter — who hit ten thousand dollars in monthly recurring revenue with a product that doesn't even have a web interface. Luna: Wait, no dashboard at all? Lucas: None. It's a command-line tool — you install it with a single npm command, and from then on you manage everything from your terminal. The product is called 'TunnelKit' — it solves the problem of exposing a local development server to the internet for testing webhooks and API integrations. Luna: Okay, so it's like ngrok but paid. Lucas: Exactly. But what's interesting is how he positioned it. Ngrok has a free tier that's pretty generous, but it's unreliable for production use — connections drop, you get rate-limited. Dave saw that developers who needed stable tunnels for automated testing were willing to pay, but they hated the complexity of ngrok's enterprise plans. So he built a dead-simple CLI that costs twenty-nine dollars a month, flat rate, no tiers. Luna: And he got to ten thousand MRR just from that? How many customers does that take? Lucas: At twenty-nine dollars a month, you need about three hundred and forty-five customers. He hit that in six months. But here's the part I found really clever — he didn't build a landing page. He didn't have a website at all for the first three months. Luna: So how did people find it? Lucas: He posted the GitHub repo on Hacker News with a short demo video recorded in his terminal. No voiceover, just him typing commands. The post got about two hundred upvotes, and that first wave brought in about eighty paying customers. After that, it was all word of mouth. Developers would tweet about it, other devs would see it in their timeline, and they'd install it directly from the terminal. Luna: That's a really narrow funnel — basically just a GitHub README and a Twitter account. But I guess for a developer tool, that might be enough. Lucas: Right. And that's the insight — if your customer is a developer, you don't need to sell them with a shiny marketing site. You need to show them the product in the environment they already live in. Dave's README had a single GIF showing him running 'npx tunnelkit start' and then watching a webhook come through. That was his entire sales pitch. Luna: I wonder about churn, though. Twenty-nine dollars a month is low enough that it's an easy decision to sign up, but also easy to cancel when a project ends. Lucas: His churn is actually below three percent monthly, which is impressive for a tool at that price point. He told me the key is that his customers are using it for automated CI/CD pipelines — it's not a discretionary tool. If they stop paying, their tests break. So it's sticky in a way that a lot of developer tools aren't. Luna: That makes sense. It's integrated into a workflow that has consequences if it fails. Lucas: Exactly. And he's kept the feature set incredibly focused. He doesn't offer team accounts, doesn't have analytics, doesn't have a dashboard. The only way to see your usage is to run 'tunnelkit status' in the terminal. That simplicity actually works in his favor — there's nothing to confuse you, nothing to break. Luna: So what's next for him? Does he plan to add a web interface at some point? Lucas: He's explicitly said he won't. He thinks the terminal is a differentiator. Every other tool in this space tries to be a platform with dashboards and settings pages. He wants to be the opposite — the thing you install and forget. He's actually raising his price to thirty-nine dollars a month for new customers next quarter, grandfathering existing ones. Luna: That's a bold move. If churn stays low, that could push him well past ten thousand MRR. Lucas: Yeah, he's projecting to hit around eighteen thousand MRR by the end of the year. And he's still solo. He's outsourcing support to a part-time contractor, but all the code is his. Luna: It's a really clean example of the 'do one thing well' philosophy. Lucas: Absolutely. And I think it's a useful counterpoint to the idea that you need a beautiful product or a big launch. Sometimes the right move is to find a single painful workflow that developers face every day, build a command-line tool that solves it perfectly, and put it on GitHub. Luna: Speaking of GitHub, I saw you posted a new side project there last week — a little CLI tool for tracking time. Lucas: Oh, you saw that? Yeah, it's super rough. But honestly, talking to Dave inspired me. I realized I'd been overthinking the whole 'build in public' thing — you don't need a launch week or a Product Hunt page. You just need to ship something that works and tell people about it in the places they already hang out. Luna: And that's exactly the kind of conversation that makes this podcast worth doing. If today's episode gave you something usable — maybe you're thinking about building a CLI tool yourself, or just rethinking how you distribute your product — then it's exactly the kind of show we want to keep making. Lucas: Yeah, and we're able to keep this podcast ad-free because of listeners who chip in. If you find value in these stories, you can support the show at buy me a coffee dot com slash fexingo. It's a small way to help us keep digging up these case studies. Luna: Absolutely. And every bit helps us spend more time on research and interviews. Lucas: So back to Dave — one thing I didn't mention is how he handles billing. He uses Stripe's CLI, which is itself a command-line tool for payments. So his entire billing flow is terminal-based. When a customer signs up, they run 'tunnelkit subscribe' and enter their email. Stripe sends them a payment link. Everything happens without a web page. Luna: That is so meta. A CLI tool using another CLI tool for payments. Lucas: Right. And it's all automated. He has a GitHub Action that checks every hour for failed payments and revokes access. No human intervention needed. Luna: It's almost like a blueprint for how to run a software business as a solo developer with minimal overhead. Lucas: Exactly. And I think that's the takeaway for this episode — you don't need a team, you don't need investors, you don't need a marketing budget. You just need to identify a specific pain point that other developers have, solve it in the simplest possible way, and put it where they'll find it. Luna: The command line isn't dead. It's still the most efficient interface for a lot of tasks. Lucas: And it's a competitive moat. Most founders wouldn't dream of shipping a product without a dashboard. So if you're willing to go all-in on the terminal, you're operating in a space with very few competitors. Luna: Alright, I'm going to go install TunnelKit and test it out. Lucas: Do it. And let me know what you think.