Alex Moskovski


How I built a profitable SaaS web app: from idea to first sales

Okay, I promised to explain how a regular developer can built something profitable from scratch and it’s time to deliver on that promise. As in my previous articles, we’re not gonna build the next Google this time. And I don’t feel Vitalik Buterin-ish enough (and, frankly, am not that smart) to create something as awesome as Ethereum. Instead, let’s try and dive into a fun, beautiful, and modestly profitable niche. Which one and how? Well, here the story begins. Radical transparency mode ON.

Finding an idea

I’ve always been a proponent of the principle that sourcing business ideas shouldn’t be a serendipity. It’s a skill that can be developed and improved just like any other ability. One day I tweeted this:

So let’s try our own medicine and sift through Fiverr’s gigs. But I have a thing for social media marketing and image generation, so let’s explore what Fiverr has to offer here first. Oh, and we’re not going to logo making section; the niche is too competitive.

Social Content gigs on Fiverr

See those grey numbers in parentheses at the right of the rating’s stars? That’s how often people order a particular gig. So we have a clear opportunity here; a business offer that could be automatized thus disrupting this niche. Yes, I’m talking about making quote images for small businesses.

The quick research showed that quotes is one of the most popular content formats for social media. And not without a reason: it can be produced fast, its components usually not protected by any copyright, and most people love it.

Why does this format matter? Because it’s ever-green. That means quote images as a format will still be here for a long time.

It also fits into a pretty standard pricing table of a SaaS:

The pricing of the most popular image quote content gig on Fiverr

All this research makes it possible to formulate a mission and a proposal of our SaaS: sell packages of unique quote image content with the client’s branding, tailored for a particular social network. It has a clear value for a user as they would solve their content sourcing problem at once and also promote their brand by having their logo on the content.

Let’s get to work.

Building an MVP

To make a good quote image we need four things:

  • Text quote itself;
  • Royalty-free background;
  • Some pretty font;
  • Code to glue it all together.

Quotes can be collected on quote websites; services like Unsplash provides free photos for backgrounds; there are tons of beautiful typefaces available as well. So let’s focus on the crucial part of our web service, the image generator.

If you’ve read my previous articles, perhaps, you are aware that I’m not a big fan of hip complicated tools, so for the job of images generating we will use PHP and ImageMagick. These tools are robust, fast enough, and simple.

Let’s not go too deep into the code itself, it’s too specific and, probably, plain boring. Here is what I had after a week of coding:

Looks good, huh? After having this I decided to take it a little further and make animated GIF and videos as well by combining single images into a sequence and packing it into a GIF or MP4 file. For the latter I used the FFmpeg library. Eventually I could make such content in bulk:

That looked cool but it still wasn’t a product. To make it an MVP I had to add the following entities.

Website itself. I decided to build it on Laravel — a popular and well-tested PHP framework — and it turned out to be a great decision. Despite having some issues…

…eventually I figured it out and the framework ceased to be a liability and become an asset.

Here is what I came up with as the order editor:

Payment processing. In order to be a SaaS we should get paid, right? Perhaps, if I were incorporated in a first-world country I’d use Stripe. But here in Russia it’s not available yet. Besides, I like taxation of this country (6% income tax, pretty lax, if you ask me). So the only good option available was Paypal. Despite their long audit they’re pretty convenient, by the way.

Making images in bulk. Our users are interested in packages, not single images, remember? Fortunately, Laravel has a good queue processor which I used to make images one-by-one and packing it into a single zip archive afterwards.

Collection of text quotes and backgrounds. To produce unique quote image content we need enough quotes and images to form random matches. That means that any quote should match with any background perfectly. I’d added 500 quotes and images, made a simple generator to make thousands of random matches, and carefully reviewed all of them. Backgrounds that weren’t perfect matches 100% of the time had been removed.

Landing page. There are Lao Tzu’s treatise-sized volumes written on that subject, so I don’t feel in position to explain how to make a perfect LP. However, here are some quick check list:

Stats and logging. I can’t emphasize enough the importance of in-depth statistics. Anything that can be accounted should be accounted. It’s not necessarily to be a complex system with polished charts. Just a SQL table would suffice as long as it’s thorough enough.

An early-stage stats table of our SaaS

By the way, if you for some reason can’t implement such stats, at the very least, use something on the frontend. Your decisions ought to be data-driven, so you need some data to drive them (okay, okay, a bad pun).

Server. Image generation is a costly process, so I decided to rent out a server from Hetzner. They offer the best bang for the buck and that allowed me to postpone having fun with deploying my app to several servers. I know, it’s a bad practice to have a web server and a queue worker on the same machine but in the beginning it’s fine.

It took me two months to get everything ready to launch. So, let’s see where it takes us?


If there is a perfect place to launch new products, it’s ProductHunt. I didn’t even bother to look for a hunter with a lot of followers this time. All I did was just hunting it myself and having a royal full-night sleep.

This launch has brought me not only great feedback but also some paying customers.

Here is what a ProductHunt induced traffic spike looked like. QuoteBooth took something like 25th place on the main page.

What’s more important than this validation is that one client has ordered MP4 files instead of plain images without any nudging. That means animated quotes can sell themselves pretty well.

Now, when we got our first sales what should we do next? Right, let’s make an incremental improvement iteration.


Motivational quotes are pretty much universal format which fits many verticals, since most people love their pep up effect.

However we can achieve much more market coverage by offering vertical-specific quote images. That may sound difficult but in reality what I did was just ordering to collect quotes and backgrounds on Upwork.

I decided to test two specific verticals and one general: travel, fashion, and love.

There were one more thing that my clients asked me about all the time, a tool for making their own design templates for quotes. So I’d built it in too:

There are a lot of room for improvement but that should be enough to keep me busy for a while.

What’s next

The most obvious steps could be:

  • Buying ads in Google Adwords, Facebook, and LinkedIn.
  • Creating an affiliate program
  • Making tons of funny satellite apps, launching on PH and having some free traffic
  • Partnering up with freelances on Fiverr, Upwork, etc…

From my estimations QuoteBooth can easily hit $10000/mo in revenue, and I already have ideas derived from this project.

Thanks for reading, I hope it was useful.

PS: if you have some suggestions or ideas you can hit me on twitter.

More by Alex Moskovski

Topics of interest

More Related Stories