The Solopreneur Lifestyle
I'm Haruhisa Maniwa (Hulk), CEO of Laicos Inc.
I live what people call the solopreneur lifestyle.
Last month, this article I wrote on Zenn went viral in a weird way.
I've made my living almost entirely with Rails, so I'm a dyed-in-the-wool Rails lover.
If someone asks me, "Who do you respect the most?" I immediately answer, "DHH."
I truly believe, from the bottom of my heart, that Rails' simplicity and track record are still weapons in the AI era. Unfortunately, it's also true that many people disagree.
So when I praise Rails, it catches fire.
That's right. This month, we're setting things on fire again.
This time, my company actually developed and is operating two products with Rails, so I'd like to explain how I launched them.
I hope this will be useful for anyone wondering, "What kind of business do indie developers actually run?"
Rails Is Not Dead
Over the past five years since I entered the programming world, the industry has been tossed around by trends like NoSQL, BaaS, GraphQL, and the MEAN stack.
Those technologies have, in the true sense, "died out."
Meanwhile, Rails, despite everyone saying it would disappear, has barely changed for 20 years.
If a Rails engineer from 20 years ago time-traveled to 2026 and was assigned a Rails 8 task, they would probably spend about three days in despair and then reluctantly start writing code.
There is no other web framework with this level of consistency.
The Lifespan of a Framework Is the Lifespan of a Business
For me, someone who wants to build businesses that survive long term, the lifespan of a framework directly means the lifespan of the business.
I'm challenging myself to "release one product per month."
This directly imitates the Build in Public approach practiced by the original indie developer, Pieter Levels.
However, there is one difference: AI.
As you all know, AI agents have overturned the very concept of coding.
And not just coding. Marketing, design, sales—everything.
However, even when many indie developers use AI to release products, they often fail to generate any meaningful revenue afterward.
On top of that, they become unable to untangle the spaghetti code produced by vibe coding, and six months later, they quietly shut everything down where nobody is watching.
I've had similar experiences myself.
As a reflection on that, I decided to impose the following constraints on myself when releasing products from now on:
- Implement only the absolute minimum necessary features
- Do not spend more time on development than on marketing (promotion and announcements)
- Do not care about technology trends
- Do not cling to a single product
"If I want to spin the flywheel of rapid market feedback and build a business that survives the turbulent AI era, isn't Rails the best fit?"
That is my hypothesis. I want to prove it.
By the way, this month is the second month and the second product in this challenge.
The Idea I Came Up With
The keyword is "a cafe inside the terminal."
When I work remotely, I often listen to music.
Recently, however, I found myself always streaming the same artists and the same YouTube channels, and my brain started rejecting it.
There was no freshness at all, and I couldn't concentrate!
I thought, "If my home felt like a stylish cafe, I could concentrate more."
Then, while using lazygit and lazydocker, an idea suddenly occurred to me.
Why not make a cafe in the terminal?
jesseduffield
/
lazygit
simple terminal UI for git commands
Available for macOS and Linux
Sponsors
Maintenance of this project is made possible by all the contributors and sponsors. If you'd like to sponsor this project and have your avatar or company logo appear below click here. 💙
Elevator Pitch
Rant time: You've heard it before, git is powerful, but what good is that power when everything is so damn hard to do? Interactive rebasing requires you to edit a goddamn TODO file in your editor? Are you kidding me? To stage part of a file you need to use a command line program to…
jesseduffield
/
lazydocker
The lazier way to manage everything docker
Available for MacOS and Linux
A simple terminal UI for both docker and docker-compose, written in Go with the gocui library.
Sponsors
Maintenance of this project is made possible by all the contributors and sponsors. If you'd like to sponsor this project and have your avatar or company logo appear below click here. 💙
Elevator Pitch
Minor rant incoming: Something's not working? Maybe a service is down. docker-compose ps. Yep, it's that microservice that's still buggy. No issue, I'll just restart it: docker-compose restart. Okay now let's try again. Oh wait the issue is still there. Hmm. docker-compose ps. Right so the service must have just stopped immediately after starting. I probably would have known…
I asked Gemini, "I want to create a cafe-like space in the terminal and play cafe-inspired music endlessly. Is that possible?" It replied, "Totally possible."
That was the moment my next project was decided.
I also had Gemini make the mockup.
The project name is LazyCafe!
By the way, some of you may be thinking, "Couldn't you just search for cafe music on YouTube and play that?"
No.
YouTube has too much noise: weird animations, related videos, and so on.
The same goes for other music streaming apps.It has to be completed entirely inside the terminal, or it has no meaning.
I think all you Vimmers understand this feeling. Am I wrong? You there, Vimmer!
Tools Used
My selection criterion was whether the tool could help build a business that survives 10 years from now.
I excluded all pointless trends.
My company has only one person, and of course we don't yet have enough revenue to hire outsourced engineers.
On top of that, I also do contract development as a sole proprietor, so I only have about three days a week to work on LazyCafe.
Therefore, in order to complete and release the product within one month while simultaneously handling marketing, I had to strictly follow these three rules:
- Automate development work with programs and AI as much as possible
-
Add absolutely no unnecessary features
- (Looking back, I feel like the chat feature may not have been necessary.)
- Never do the same task twice
AI Tools
GeminiChatGPT(Pro plan)GitHub CopilotPi,Opencode
Most Development Is Done with GitHub Copilot
When I assign tasks to GitHub Copilot as if I were assigning issues to a subordinate, it creates pull requests with far better results than I expected.
We can review each other on PRs and discuss implementation details.
It feels like working with a remote employee.
For concrete instructions like "do this in that file," I leave everything to GitHub Copilot.
After carefully reviewing it, I release it.
Business Logic Is Implemented with Pi and Opencode
Sometimes there are areas I absolutely cannot entrust to AI, such as business-specific logic or parts related to payments and authentication that could cause customer damage. I cannot simply dump those onto GitHub Copilot, so I implement them myself.
Since I use Neovim as my main editor, I need AI agents that work well with the CLI.
That's why I mainly use Opencode and Pi.
You can think of them as open-source versions of Claude Code CLI.
I learned about Pi from a tweet by DHH. For now, I like it because it seems easier to use than Opencode.
For the model, I use gpt-5.5 through the premium requests bundled with GitHub Copilot and my ChatGPT subscription.
ChatGPT's Chat Feels Childish
For brainstorming and research via chat, I use Gemini.
ChatGPT lies normally, uses too many bullet points, and is hard to read.
It's basically a yes-man, and it somehow feels like I'm being treated like a child, which irritates me.
Previously, I asked ChatGPT how much tax-saving effect there would be from using both a micro-corporation and sole proprietorship.
It calculated only the taxes on the micro-corporation side with low executive compensation and replied, "It's cheaper than being a sole proprietor."
I flipped out because, if you're comparing them, you obviously have to look at the taxes and social insurance premiums on the sole proprietor side too.
My basic strategy is to use APIs at fixed rates through external tools.
ChatGPT's image-2.0 Is Insane
Image2 is seriously powerful.
For someone like me, whose girlfriend rated my design sense as "on the level of a chimpanzee," it is more than enough.
It can output app mockups and YouTube thumbnails at a level I'm satisfied with in one shot.
The LazyCafe logo.
It put the terminal ">_" on the cup and combined "zzz" with both laziness and coffee steam. Amazing.
A YouTube video thumbnail for English-speaking users.
I uploaded an image I took myself to GPT and said, "Make a thumbnail with this."
The surrounding icons feel AI-ish, but the typography and photo processing are much higher quality than what I could do myself.
Until now, at our company, the only employee besides me was GitHub Copilot, but GPT Image2 has now been promoted to employee status as well.
Backend
Using a Boilerplate
In order to release reliably within limited time, I had actually developed a boilerplate as my first project last month.
I have run rails new more than 500 times so far.
Based on that experience, I created a boilerplate preloaded with the libraries and features I know I absolutely need, and I also sold it.
For example: authentication, social login, authorization, notifications, admin screens, user profile pages, and user information editing.
These are not included in Rails by default, but I knew from my own cases that I would definitely need them, so I added them last month.
GitHub repositories have a feature that lets you register them as a "Template repository."
When you turn this on, you can smoothly rocket-start the next project from the template.
Currently, "SuperRails" has 158 commits.
That means if I use this boilerplate going forward, I can expect to save that much time.
Incidentally, the sales site for the boilerplate, super-rails.com itself, was also developed using the SuperRails boilerplate.
Rails Is Evolving Toward Less Is More
Rails has evolved with each version toward being "simpler and easier to understand."
Thanks to Hotwire, the frontend is also completed within the Rails codebase. There is no need to deliberately use modern JS.
Kamal 2 is a Docker deployment tool included by default in Rails.
Once you have contracted a VPS and can connect via SSH, you can publish your product to the entire world just by running kamal/setup.
For VPS, I often use Hetzner, a European rental server service.
It is also introduced in the Rails Guides.
Since Rails 8, SQLite has become production-ready, so there is no need to prepare a separate DB server.
For files, we use the VPS's local storage, so there is no need to prepare an external file storage service like S3 either.
Redis for jobs has also become unnecessary thanks to the Solid stack.
The architecture becomes simple, and above all, infrastructure costs are low because external dependencies are reduced!!!
DHH is truly a god.
I learned about ffmpeg for the first time this time, but apparently it can be used for music playback.
Frontend
Ink is a React framework for implementing CLIs.
vadimdemedes
/
ink
🌈 React for interactive command-line apps
React for CLIs. Build and test your CLI output using components.
Ink provides the same component-based UI building experience that React offers in the browser, but for command-line apps It uses Yoga to build Flexbox layouts in the terminal, so most CSS-like properties are available in Ink as well If you are already familiar with React, you already know Ink.
Since Ink is a React renderer, all features of React are supported Head over to the React website for documentation on how to use it. Only Ink's methods are documented in this readme.
Fully AI-generated pull requests are not accepted. You can use AI, but should be verified and cleaned up by a human. Only Opus 4.6+ (high-effort) and Codex 5.4+ (extra high) are accepted models. Preferably created with Opus and verified by Codex.
Install
npm install ink react
Note
…
Code Example
import {render, Text} from 'ink';
const Example = () => (
<>
<Text color="green">I am green</Text>
<Text color="black" backgroundColor="white">
I am black on white
</Text>
<Text color="#ffffff">I am white</Text>
<Text bold>I am bold</Text>
<Text italic>I am italic</Text>
<Text underline>I am underline</Text>
<Text strikethrough>I am strikethrough</Text>
<Text inverse>I am inversed</Text>
</>
);
render(<Example />);
It feels like bringing a concept similar to React Native to CLI tools—does that make sense?
Rust and Go Were Also Options, But...
When considering maintainability and safety, including psychological safety, Rust and Go were also possible options, but I passed on them.
- I have written Rust before, but I cannot implement things as easily as I can with React (my personal issue)
- I don't know Go
From that perspective, I chose React because I had used it on the web before and prioritized "being able to release."
How I Deal with Vibe Coding
I think blindly throwing coding tasks at AI without looking at the code is evil, because there are security risks and so on.
For the Rails backend, I release only after thoroughly testing and carefully reviewing it.
So I thought it wouldn't be a major problem even if I cut corners on the frontend (React), and I ended up delegating it to AI in a way very close to vibe coding. Sorry.
It will probably continue to crash or behave unexpectedly in the future (in fact, it already sometimes happens in my environment, which is scary), but I don't have time to refactor, so I'll just keep whack-a-mole fixing issues as they come up.
I also have to catch up on Ink-specific knowledge, so it's tough...
Takuya, the developer of Inkdrop, also says not to refactor until users gather.
Things built for the shortest possible release and expanded with speed as the priority inevitably become redundant or wasteful in many places. But once PMF is achieved and you know it works as a business, then you can start refactoring and trimming things down. I do not recommend spending a long time refactoring before PMF. The fundamental problem is not there.
How the Application Works
Basically, the structure is:
- Web (authentication, payments, token issuance, admin screens, etc.): Rails
- CLI: Ink/React
Music is stored as MP3 files inside Rails' Active Storage, saved locally on the server deployed with Kamal, and URLs are returned as JSON.
// Example of returning a music list as JSON.
// There is nothing particularly complex; React/Ink simply downloads
// MP3s based on file URLs and caches them.
{
"data": [
{
"id": 1,
"title": "Path of Sunlit Leaves",
"duration": 156.72,
"created_at": "2026-05-08T06:49:35.281Z",
"updated_at": "2026-05-13T07:50:37.370Z",
"file_url": "https://lazymusic.cc/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcsInB1ciI6ImJsb2JfaWQifX0=--8d03037bec4f54b548c3263458f4fa4e77ff9d0b/Morning%20Loop.mp3"
},
{
"id": 2,
"title": "Birds at the Café Terrace",
"duration": 153.72,
"created_at": "2026-05-08T06:50:31.461Z",
"updated_at": "2026-05-13T07:50:37.492Z",
"file_url": "https://lazymusic.cc/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a471fa6a93a60ae2ce14756d61d9d68fc57f3ef1/Morning%20Loop%20(1).mp3"
},
{
"id": 3,
"title": "Through the Misty Forest",
"duration": 104.904,
"created_at": "2026-05-08T06:52:08.453Z",
"updated_at": "2026-05-13T07:50:37.625Z",
"file_url": "https://lazymusic.cc/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MywicHVyIjoiYmxvYl9pZCJ9fQ==--1f5e201c9ea64933443c8560920f15461bb80a71/Forest%20Morning.mp3"
}
],
"pagination": {
"count": 53,
"page": 1,
"limit": 3,
"pages": 18,
"next": 2,
"prev": null
}
}
The plan is to delete the entire cache when the command exits.
The admin screens and payment screens on the web are completely Rails.
I implemented them extremely quickly.
The admin screen uses a gem called Avo.
When the Track model was generated, it created the admin functionality, so the time newly spent building the admin screen was 0 seconds.
As a little bonus, LazyCafe includes a chat space.
If there are other LazyCafe users, you can interact with them in real time.
This real-time communication is implemented with Rails' Action Cable using socket communication.
There is absolutely nothing special about the implementation.
Don't Do Wasteful Things
I don't do wasteful things.
This is a CLI tool, so obsessing over the landing page is meaningless.
Therefore, I will release the first version with this design that AI casually implemented.
This is embarrassing.
But there aren't enough people yet for me to be embarrassed.
Finished Version
Somehow, I managed to get it into shape in half a month.
I've also been using it while working, and I've grown quite attached to it.
This is already the phase where it should be released.
How I Collected the Music
To create a cafe-like atmosphere, I needed to prepare a lot of music.
The kind of music I especially like is a genre called Lofi Hip-Hop, so I needed to collect a lot of it.
Naturally, I cannot compose music, so I had to get it from somewhere.
I considered the following options:
- Public-domain music
- Free asset sites like
Pixabay Lyria3(Gemini's music generation model)SunoAI
Public-Domain Music
I thought, "If I collect and line up music whose copyright has expired or been waived, it should take shape," but that was the beginning of hell.
Lofi Hip-Hop seems to be a genre that only recently became popular, and I just couldn't find anything.
When I searched, all I found were obscure classical pieces and low-quality jazz.
So I gave up on public-domain music right there.
Free Asset Sites Like Pixabay
I thought free asset sites would be fine because they are permissive about copyright.
Indeed, they say commercial use is allowed, and if used only as a minor part, it should be fine even without credit.
However, the phrase "minor part" bothered me.
You cannot sell or distribute Content (either in digital or physical form) on a Standalone basis. Standalone means where no creative effort has been applied to the Content and it remains in substantially the same form as it exists on our website.
"Standalone basis"?
Hmm. Since the music would simply play in the user's terminal, would that be considered "standalone," or would the CLI functionality be seen as added value?
When I consulted AI, Claude, ChatGPT, and Gemini all said it was not allowed and that I should stop.
(I tried changing the prompt in various ways, including asking, "Of course it's okay, right?" but it still said no. What an annoying thing with more ethics than humans.)
I won't explain the reasons in detail, but apparently the act of "redistribution" itself is a copyright problem, even if credit is given.
Moreover, in my case, I would not be streaming; I would be downloading the files and storing the music heavily on my Rails server, which would apparently be judged as "possessing the music without permission."
Another reason may be that it competes with Pixabay's business model of "freely borrowing free assets."
Honestly, I don't think anyone would notice even if I did it, but since this is a business where I receive money from customers, I must respect rules and manners as much as possible.
When I looked at other free asset sites that allow commercial use, they were all in a similar situation.
This was a problem.
Lyria3
I gave up and decided to try generating music with AI.
Although AI-generated music does not become completely owned by me, I can publish it as mine within the scope of "ownership rights."
There should be no problem with presenting music I made through a CLI tool.
I interpreted it as a problem to claim that music created by AI was "created by myself without using AI."
I really don't know about this area, so if anyone knowledgeable is reading this, please comment.
So I tried using Lyria3, released by Google, to generate music.
But the quality was... underwhelming.
It still had that unmistakable AI feeling. On top of that, it only supported generation up to three minutes.
If the songs change too frequently, users cannot concentrate.
Rejected.
SunoAI
The final landing point was SunoAI.
As expected from such a famous service, the quality is outstanding.
However, while I had heard that the latest model, v5.5, could generate music up to eight minutes long, it mostly generated songs shorter than two minutes.
If the music changes too frequently, concentration breaks.
Hey, how can something that only generates music just over one minute long claim it can "generate up to eight minutes"?
No matter how I changed the prompts, it didn't work, so I gave up, generated a large amount of music, and uploaded only decent tracks longer than two and a half minutes to LazyCafe.
Of course, if you listen carefully, there are strange AI-generated artifacts, but I decided to embrace that as part of the flavor.
So I generated over 300 songs through sheer effort (all manually...), and selected 50 carefully chosen tracks for LazyCafe.
I am proud to say it has become a pretty good playlist.
SunoAI itself is a wonderful service!
I often use it for my YouTube channel too, so I will keep using it.
To freely use music generated by SunoAI, you need to be a paid user at the time of generation. Please check SunoAI's latest information for details.
Speeding Through the "Just Release It" Phase
In any case, you cannot get results unless you release.
The reason I am challenging myself, like Pieter Levels, to "release a product in one month" is that most products decay without ever achieving PMF.
However, if the success rate of making a living through indie development is 10%, then releasing 10 products means one will surely hit.
That's why I have to keep swinging the bat until I connect.
In an era where most people in the world simply ignore AI by saying, "AI? It chats with you? That's cool," I want to leave my mark on society in the field of product development.
Costs Incurred
I summarized the costs related to developing LazyCafe from the beginning of May to the 15th.
| Item | Amount | Note |
|---|---|---|
| ChatGPT Pro plan | $0 | The first month is free thanks to a trial of ¥3,000. I plan to start paying next month. |
| GitHub Copilot | $28.65 | Pay-as-you-go. Caused by using too many Premium Requests. Since I found out that the ChatGPT Pro subscription can be used with Pi, this should decrease next month. GitHub Actions usage time also accounts for a fair portion of the charges, but assigning issues is convenient, so I accept it as the cost of convenience. |
| Domain | $8.80 | Purchased via Cloudflare Register. This is probably the cheapest. |
| Hetzner | $9.49/month | Rental server fee. Since it's postpaid, I haven't paid yet. LazyCafe's server is located in Falkenstein, Germany, prioritizing low cost. Even so, it reaches me in Osaka without stress. |
Even with a generous estimate, I expect it will not exceed 10,000 yen by the end of the month.
That said, AI-related tools are also heavily used in other service development and contract development for my sole proprietorship, so if limited to LazyCafe, it should be even cheaper.
It doesn't even compare to about a year ago when I was subscribed to the Claude Max plan ($200/mo)...
The price destruction caused by technological progress is terrifying.
Incidentally, last month's project, SuperRails, somehow got a VPS contract at the bargain price of $4.99/mo, so its running cost is practically nothing.
Thanks to Kamal, I could eliminate the DB server, which is usually the most expensive part of infrastructure, and keep costs very low.
Redis has also become unnecessary thanks to Rails 8's default features, so that cost is gone too.
Seriously, all hail DHH 🙏
Marketing Strategy for Awareness
Code that nobody uses is, in other words, garbage.
You must not make excuses like, "I made it as a hobby, so it's fine if it doesn't sell."
LazyCafe's beta has reached a level where it can be used for now, so although it is only about 30% complete, I want to release it to get feedback and dedicate the remaining half of the month entirely to marketing.
Installation is simple:
$ npm i -g lazycafe@latest
$ lazycafe
That's it.
I want to provide users with the excitement of transforming their terminal into a cafe with just these commands.
People doing indie development have probably begun to realize this: marketing is more than 100 times harder than development.
So I will first expose it to the world, improve it based on faint feedback, then get more feedback, and repeat that process.
The first version of the credit card payment platform Stripe was very rough, and Mailchimp v1.0 was also extremely simple. That's fine. The early version of Inkdrop was a note app, but it didn't even have a proper settings screen. Because I wanted to release quickly, I postponed payment implementation and posted on Hacker News as a closed beta to recruit testers and see the reaction.
I will keep swinging the bat.
Conclusion: Was It Good to Use Rails?
The topic drifted a bit, so I want to close with Rails.
A few years ago, DHH named Rails "The One Person Framework."
It is exactly the right framework for me, developing alone (+ two AIs).
This time, I shared how I am launching a new business using Rails.
However, as you probably noticed, most of the content was about business.
- How to release quickly and get feedback
- How to operate cheaply
- How to prepare music within the rules
- How to avoid wasteful work
- How to automate routine work or delegate it to AI
The fact that I can make these kinds of "upstream" decisions one after another without having to sort out countless small development concerns is, I think, a perfect embodiment of the benefits of Rails.
Part of it is because I am used to Rails, but more than that, the major advantages of using Rails are:
- Because of "convention over configuration," both AI and humans can more easily follow best practices
- The core structure has not changed for over 20 years
- Thanks to a community with strong opinions, you can rarely go wrong by using well-known gems
- It continues to evolve in a simpler direction
- Its creator himself describes it as "The One Person Framework" for the AI era
I think it would be impossible to move this smoothly with other frameworks.
Things like whether to cache this or that, whether something belongs on the server or client, what to do about the ORM, or needing to add your own test library because one is not included.
I don't want such trivial things getting in the way of my business.
I truly love Rails.
I plan to publish an update soon on the progress of LazyCafe during the remaining half month.
Everyone, let's build startups with Rails!
zenn.dev




























































































































































blog.craftz.dog



gemini.google
Top comments (0)