u/markyonolan

A customer told me he picked my tool because "there was nothing else to learn." That sentence reframed my entire single-feature SaaS strategy. 13 paid subscribers, 4 months, solo

A customer told me he picked my tool because "there was nothing else to learn." That sentence reframed my entire single-feature SaaS strategy. 13 paid subscribers, 4 months, solo

Hey folks,

Quick milestone post from a solo founder still in the scrappy early phase -

  • 13 paid subscribers
  • 165 USD MRR
  • 320 USD total revenue
  • 4 months since launch
  • Solo founder

https://preview.redd.it/foj4netlfp2h1.png?width=2408&format=png&auto=webp&s=b00979b188a7293c002f60a0f34c118a970c7647

https://preview.redd.it/vb8bzftlfp2h1.png?width=1408&format=png&auto=webp&s=fda863c29cef5b33db2f06ca21eab3553d897354

The product is UploadtoURL.com. It does one thing. You send a file, you get a public URL back, it expires after a set time. That is the entire feature list.

Every Twitter thread, every YC piece kept telling me to expand the surface, build a platform, increase ACV. My product does none of that. It does one thing for 11 USD a month, and I had a Notion doc with 40 features I planned to ship "when I had time."

Then a customer emailed me thanking me for the product. I asked him why he picked it over the alternatives. He wrote back one line:

"There was nothing else to learn."

I read that sentence five times before it clicked.

Every other tool in the category wanted him to understand buckets, folders, IAM, retention policies, team permissions, a whole dashboard. He did not want any of that. He had one job, he found one tool that did one job, and the entire absence of additional surface was the reason he paid.

That sentence reframed everything. The 40 features in my Notion doc were not "things I had not built yet." They were things that, if I ever shipped them, would make my product worse for the exact customers I was already winning.

A few things changed in my head after that:

  • Less surface is the moat. I used to think small products got crushed by bigger ones. Actually, small products get chosen specifically because they are not bigger. Once a customer pays for "the simple one," any competitor with more features looks like a tax.
  • Solopreneurs cannot afford to build platforms. A team of 50 can ship 200 features. A solo founder shipping 20 features is already drowning in support, bugs, and docs. A solo founder shipping 1 feature can actually breathe. The constraint is not capital. It is attention.
  • The pitch writes itself. When the product does one thing, the marketing copy is whatever the one thing is. No positioning workshops, no messaging frameworks, no "what is your unique value proposition" exercises. The unique value proposition is the feature list.
  • Support volume stays low. I get maybe one ticket a week. Most are billing or "can you add X." Almost nothing breaks because there is almost nothing that can break. As a solo founder, this is the difference between sustainable and burnout.

I am not competing with the big platforms on breadth. I am competing on the 90 seconds between "I have a file" and "I have a public URL." That is the only fight a solopreneur can actually win against a venture-funded team with 200 services.

If you are a solo founder sitting at 2 or 3 paying customers wondering if your product is too small to be a real business, it probably is not. Talk to the people paying you before you ship the next feature. Most of the time, they are paying you because of what you have not built, not because of what you have.

The boring single-feature SaaS is a real solo business. The hardest part is resisting the reflex to make it bigger.

Happy to answer anything in the comments.

Pricing, the day-to-day of running it solo, how I found the first 13 customers, or what those 40 unbuilt features were.

reddit.com
u/markyonolan — 10 hours ago
▲ 3 r/n8n

[Workflow Included] Complete Instagram carousel automation with GPT-4.1 for prompts, Gemini for images, and the workflow static storage pattern that makes it actually work

Sharing an IG carousel automation I built over the last few weeks.

https://preview.redd.it/n3mplif6so2h1.png?width=2636&format=png&auto=webp&s=a1f8ee83ee3f6e0e28f819239009619700ce7fe3

One row in a Data Table goes in, a multi-image Instagram carousel goes out, the row gets marked as published.

The AI part is the easy bit. The hard part is everything between "I have 5 generated images" and "Instagram accepts them as one carousel." That is where I lost a week and what this post is really about.

The 8 steps:

  1. Pull an unpublished row from a Data Table
  2. GPT-4.1 expands the idea into multiple image prompts plus a caption (structured JSON)
  3. Parse the JSON and loop through each prompt
  4. Gemini generates the image, then it gets uploaded to a public CDN URL
  5. Each URL is appended to workflow static storage with a 15-second rate-limit delay
  6. After the loop, collect all URLs into one array and reset storage for next run
  7. Publish to Instagram as a carousel in one API call
  8. Mark the Data Table row as Published

The 3 problems that actually matter

Instagram rejects almost every "easy" workaround. Carousel posts need an array of public URLs serving images with the correct Content-Type header. Google Drive share links fail. Dropbox links fail. Most free hosts strip the headers. You need a host that explicitly returns image/png or image/jpeg. I used Upload to URL for this. Any host with correct headers will work.

Loop iterations lose state by default. This is the one that took me longest. When you loop and upload one image per iteration, the URL from iteration 1 is gone by iteration 2. Merge nodes do not cleanly solve this. The fix is workflow static storage: a Code node inside the loop appends each URL to a global array, another node outside the loop reads the full array back. Reusable pattern for any fan-out-then-fan-in workflow. Reset the storage after publishing or your next run inherits yesterday's URLs.

Image generation APIs throttle silently. Gemini will work fine for 5 images then fail randomly on the 6th with no clear error. A 15-second delay between iterations dropped failures from roughly 30 percent to almost zero. If you generate more than 10 images per run, increase the delay.

Free workflow template: https://n8n.io/workflows/15284-create-instagram-carousel-posts-using-gpt-41-nano-and-gemini-25-flash/

Nodes used:

  • Data Table
  • AI Agent with OpenAI (GPT-4.1)
  • Gemini
  • Upload to URL Verified Node
  • Loop Over Items
  • Code nodes for static storage
  • Instagram community node

Import the JSON, add your credentials, drop content ideas into the Data Table, run it.

Happy to answer questions.

reddit.com
u/markyonolan — 12 hours ago
▲ 120 r/SaaS

My boring single-feature SaaS hit 13 paid subscribers in 4 months. I am almost embarrassed by how small the product is

Quick milestone post.

  • 13 paid subscribers
  • 4 months since launch
  • solo founder.

The product is UploadtoURL.com

It does one thing. You send a file, you get a public URL back, it expires after a set time. That is the entire feature list.

For the first few months I thought the smallness was a problem. Every Twitter thread, every YC essay, every post on this sub says expand the surface, build a platform, increase ACV. I kept a Notion doc with 40 features to ship "when I have time."

Then I started actually talking to the people paying me. None of them wanted any of those 40 things. They wanted the one feature to keep working and stay cheap. One customer told me he picked my tool specifically because there was nothing else to learn.

Turns out boring is a feature. The pitch fits in one sentence. Onboarding is two steps. Support tickets are rare because there is almost nothing that can go wrong. The smaller the surface, the harder it is to beat me on it.

I am not competing with the giants on storage or scale. I am competing on the 90 seconds between "I have a file" and "I have a public URL." That is the only place a single-feature product can win against a platform with 200 services.

Customers are not comparing me on price. They are comparing me to spending Saturday writing infrastructure config.

Numbers:

  • 13 paid subscribers
  • 165 USD MRR
  • 320 USD total revenue
  • 4 months since launch

If you are sitting at 2 or 3 customers wondering if your product is too small to matter, it probably is not. The boring single-feature SaaS is a real business. You just have to stop apologizing for it.

Happy to answer anything in the comments.

u/markyonolan — 19 hours ago

I doubled from 6 to 12 paid customers in 2 months selling a single-feature SaaS that competes with AWS. From Bengaluru, solo

Hey folks,

Posted here a few months back about hitting my first 6 paid customers. Some of you signed up, one of you sent feedback that I shipped the next week. Thank you for that.

Crossed 12 paid subscribers this week. 165 USD MRR, 309 USD total revenue in 4.5 months. Small numbers, but the doubling in 2 months is what I want to talk about.

The single-feature thing

My product does exactly one thing. You send a file, you get a public URL back, it expires after a set time. That is it. No buckets, no folders, no team accounts, no dashboard.

For the first 3 months I thought this was a weakness. Every Twitter thread says to expand, add features, build a platform. I had a Notion doc of 40 features to build "when I have time."

Then I actually talked to my customers. None of them wanted any of those 40 things. They wanted the one feature to keep working and stay cheap. The smaller the surface, the harder it is to beat me on that surface.

The AWS framing

Calling this David vs Goliath was dramatic. I am not competing with AWS on storage or scale. I am competing on the 90 seconds between "I have a file" and "I have a public URL." That is the only place a single-feature product can beat a platform with 200 services.

My customers are not comparing me to S3 on price. They are comparing me to spending Saturday writing IAM policies.

What is open

Pricing. Average is 14 USD per customer. Probably too low, but I do not want to break trust with the 12 who trusted me first. Leaning toward grandfathering and raising for new signups. Argue me out of it.

Also: all 12 customers are outside India.

If anyone is sitting at 2 or 3 customers wondering if their product is too small to be a real business, it probably is not. Happy to answer anything in comments.

Revenue Screenshots (from DodoPayments)

https://preview.redd.it/brm1p8yzqf2h1.png?width=1426&format=png&auto=webp&s=28f1b03dbbd0a4769ca60bbdff8939039e5903a4

https://preview.redd.it/un7d73u0rf2h1.png?width=954&format=png&auto=webp&s=461324d11adc95d380c3c1e4f44e91e7f53730ab

My tool: https://uploadtourl.com

reddit.com
u/markyonolan — 2 days ago
▲ 6 r/n8n

Hey everyone,

If you’re new to n8n and want to build a truly hands-off social media workflow, getting different AI models to talk to each other can feel overwhelming.

And if you’ve ever tried automating Instagram, you already know the biggest trap: the IG node refuses raw binary files. It strictly demands a public URL. Most tutorials tell you to route your images through an AWS S3 bucket or Google Drive just to get that link, which is way too much infrastructure just to post a graphic.

I put together a complete, closed-loop 7-node workflow that solves this. You just drop a basic topic in a Google Sheet, and the automation handles the rest: writing the caption, prompting the image, generating the visual, bypassing the cloud storage headache, posting to IG, and updating your tracker.

https://preview.redd.it/hdm62ngupyxg1.png?width=1641&format=png&auto=webp&s=f3bb0e4205097154b79b335dcd40ca87a5a6d1da

Here is the exact setup:

  1. Schedule Trigger: Kicks things off automatically (e.g., daily at 1:10 PM). Set it and forget it.
  2. Get-Ideas (Google Sheets): Grabs an unposted topic from your content calendar where the Status is "Ready".
  3. Generate Prompt & Caption: An LLM takes your basic sheet idea and writes a highly detailed image prompt + the final Instagram caption.
  4. Generate Image: Passes the prompt into an image model (like Gemini) to create the actual visual.
  5. Upload to URL: The bypass. Instead of messing with S3, this takes the raw binary image and instantly converts it into a temporary public CDN link.
  6. Publish to Instagram: Feeds that clean temporary URL and the AI caption straight into the IG node.
  7. Update Sheet: Marks the original spreadsheet row as "Completed" so you never double-post.

The best part of this architecture is Step 5. Because the temporary URL auto-expires after a few days, your personal cloud storage doesn't get bloated with hundreds of generated AI graphics over time.

I've attached the workflow JSON below so you don't have to build it from scratch.

Hope this helps some of you get your first end-to-end pipelines running!

Let me know if you hit any block setting it up.

reddit.com
u/markyonolan — 24 days ago