First $5k Month as a Solopreneur (May 2022 Retro)


This post contains affiliate links, and I may earn a commission or credit if you buy those products. You might get a discount, or an extended free trial. I only share products I use myself and genuinely believe in. Thank you for supporting me!

May is the first month since quitting my job in late October 2021 that my revenue as a solo entrepreneur passed $5k.

Currently, I have two sources of income: Ruby on Mac, and a 2-year fixed-price contract for maintaining a Rails application. I only get $1050/month from the latter, so the bulk of my income is from Ruby on Mac.

Quitting my job was a carefully planned decision. I made sure my wife and I had enough money saved to allow me to grow the business slowly. I wanted this new life to be sustainable and calm. For me, this means having time to do the following things without without feeling guilty or stressed: exercise (at home and walking with my wife outside), meditate, cook, attend my kids’ school events, go on vacation on our own schedule, and get enough sleep.

For this lifestyle to be possible, I have to make $24k with Ruby on Mac (and other products) in 2022, then $50k in 2023, and $100k in 2024. I launched Ruby on Mac on February 6, and I’m already over $13k. If sales continue at the same pace, I should reach my goal by the end of August!

Back in February, I pledged to donate a portion of my revenue to open source projects if I exceed my goal:

I still stand by that, and I’m going to define “a portion” today as 5% of anything above $24k. If I reach $40k, I’ll also buy someone’s ticket to next year’s RailsConf.

This is inspired by Andrew Mason who was able to get a bunch of folks to sponsor people for the Home Edition of RailsConf this year. After passing $10k in the beginning of May, I decided to participate, and want to be able to do it next year.

Here are the high-level updates for May:

Read more for the full details.

Income Report for May 2022

Net Profit: $3993

$5106 (revenue) - $1113 (expenses) = $3993 profit

This is before taxes.

Total Revenue: $5106

May was the first month Ruby on Mac revenue crossed $4k. Here is the progress since launching on February 6:

Expenses: -$1113

This month’s expenses were higher than normal due to the livestreaming gear I got, and switching to ConvertKit’s annual plan, which gets me 2 months free. I’ve been using ConvertKit since January 2021, but I just remembered to switch to annual pricing.

What happened in May

Landing page improvements

Between April 26 and May 3, I made several changes to the landing page that may or may not have had an impact on the increased revenue. I didn’t do A/B testing so I don’t know for sure.

Ruby on Mac only received an extra 150 visitors in May, and I ended up getting the exact same amount of orders than in April. However, a lot more people ordered Prime in May, which is what increased the revenue by about $400.

Here are the distribution numbers:

With the magic of Git, I can go back in time and show you the site before the changes. One of the changes I made was to the tagline and first testimonial.

Here’s the before:

top of landing page - before

And the after:

top of landing page - after

The problem with the previous tagline is that it didn’t focus enough on the pain, and was trying to target multiple audiences: those struggling to install Ruby gems, and those setting up a new Mac.

Most people that visit Ruby on Mac are trying to start a new Ruby project, or get an existing one up and running. So I changed the message to only speak to those people. And I emphasized the fact that most people get stuck for days.

I also changed the first testimonial that people see to one that reiterates the message of being stuck and the relief after Ruby on Mac solves their problem right away. I want people to realize that others like them kept wasting time trying to figure things out on their own, only to come back to Ruby on Mac.

I also chose that testimonial because it doesn’t mention any specific gem. It’s generic enough that anyone can relate to it, whether they’re trying to use Rails, Jekyll, Cocoapods, or something else.

That testimonial came to me because Paul emailed me to report a bug, and I asked him how he found Ruby on Mac. In fact, most of the testimonials came from me emailing my early customers.

Another change I made was to the middle of the page, between the company logos and the pricing section. Before, I had a call to action (CTA) in between 2 testimonials:

middle of landing page - before

I removed the CTA and replaced the second testimonial with the “wall of love” embed from (get 15% off your first year):

middle of landing page - after

Next, I changed the wording in the pricing section from “use it forever” to “save time over and over”. I also put the Prime version first. I didn’t A/B test this either, but it was based on what I learned about behavioral science from books like Daniel Kahneman’s Thinking, Fast and Slow and Dan Ariely’s Predictably Irrational.

Here’s the before:

landing page pricing - before

And after:

landing page pricing - after

The concept I used is loss aversion. I thought that by showing the Prime version first, people would be attracted to all the great benefits and time-saving features. Then when they see that they would lose all of those benefits in the Basic version, it would make Prime more appealing.

By starting with Basic, they would see the Prime benefits as things you gain. Behavioral science teaches us that the pain from a loss is greater than the pleasure of an equivalent gain.

As mentioned earlier, I got a lot more Prime orders in May, but whether or not that was due to the reordering of the pricing section, I can’t say for sure.

Sometimes, I get over a hundred visits to the site, and no orders. Other times, I get around half the visits, but a lot more orders. I think it depends on who is visiting, which is why I don’t think the pricing changes caused the higher Prime orders.

For example, so far in June, it’s only 62% Prime. I’ll let you know how it ends in next month’s income report. Subscribe to my newsletter and/or follow me on Twitter to find out when it’s ready.

Next, I added photos to testimonials (to increase credibility), and featured more powerful ones. Here’s the before:

landing page testimonials - before

And after:

landing page testimonials - after

The screenshot above only shows some of them. Visit Ruby on Mac to see more.

I also updated the individual reviews page that shows all the testimonials. I added photos there too, rearranged the order, made the font size bigger, and updated where the customer name shows up.

Here’s before:

testimonials page - before

And after:

testimonials page - after

Next, I updated the FAQ. I removed this question/answer that wasn’t providing much value:

landing page faq - before

And replaced it with this one:

landing page faq - after

Another small change I made was to add this paragraph in the “Who created Ruby on Mac?” section:

new paragraph added to landing page story section

I figured it can’t hurt to showcase my experience and skills.

Finally, I updated the CTA at the bottom of the landing page. Here’s the before:

landing page cta - before

And after:

landing page faq - after

Credit where credit is due: I got that line (“who has time…”) from Dave Ceddia’s Recut. Dave and I are alumni of the 30x500 Academy.

Livestream setup

To keep track of what I did and learned, I write notes daily in Obsidian, and I use the Timing app, which is also available via Setapp (get a free month with these links).

Looking over the data, it looks like I spent most of May researching and putting together my livestream setup. Here’s what it looks like (click on the photos to see a higher resolution image):

livestream studio setup

And here’s the camera view:

camera view

The first part was finding the desk arrangement with the best background. Previously, my desk was parallel to the record shelves behind me, which made for a bland background. So I angled it to see more interesting things on top of the shelves, like the books, mixer, my Code for America frame, and the plant with some natural light.

I’ll be writing a separate post about all of my gear, software, and how everything is set up. In the meantime, you can get more details on my thought process, issues I ran into, and the resources I used by reading my daily notes for May 5, May 6, May 7, May 11, May 26, May 27, and May 31.

Automation talk

One of the ways I wanted to promote Ruby on Mac and network with others was to attend conferences as a speaker (until I meet my $24k goal, I want to keep my costs as low as possible).

Since Ruby on Mac is all about automation and saving time, I thought that would be the perfect topic to pitch. Luckily, I had already written about it in an email to my newsletter subscribers (I’ll also publish it on this site soon), so I was able to use that as a starting point.

I submitted the talk proposal to four events. Two rejected it (RailsConf and Brighton Ruby), one I’m still waiting to hear back from (LeadDev), and one accepted it: CodeMentor Events.

The title of the talk is “Saving 1000 Hours through Relentless Automation”, and it goes over specific examples and techniques I used to save time and money during my years in Civic Tech.

I’ll be hosting the event myself as a livestream on YouTube, but I don’t have a specific date yet. I wanted to make sure my livestream setup was good to go first, then give myself enough time to rehearse the talk. I’m hoping to be ready in July. Sign up for my newsletter and/or follow me on Twitter if you want to attend.

Ruby on Mac Ultimate

On March 21, 2019, my laptop’s hard drive suddenly died. It was 7 years old, so I didn’t feel too bad about having to get a new computer. However, what was painful was setting up the new laptop.

I wanted to start fresh, so I spent a whole day setting up my new Rose Gold MacBook Air and putting together a checklist of everything I did. I was determined to automate as much as possible so that I would never have to waste time like this again.

In addition to a complete Ruby web dev setup, I also automated the installation of all my Mac apps, cloning all the GitHub repos I work on, and setting my macOS preferences. This was well worth the effort because I ended up setting up 3 other Macs since then (for work before I quit my job, and personal use), and I’ll continue to save 8 hours for each new Mac I get in the future.

And now, you too can set up your new Mac in minutes without having to spend 100+ hours trying to automate it yourself!

In the Ultimate version of Ruby on Mac, I’m introducing improved and much easier to use versions of my Git, repos, and macOS preferences scripts.

Git config setup

You’ll get a .gitconfig with common settings and helpful shortcuts, a .gitignore_global with common files you’d want to exclude from all repos, and a gitconfig.yaml to customize your Git name, email, and editor. It looks like this:

  name: "Rosie Revere"
  email: ""

# possible values are: atom, emacs, sublime, vim, vscode
editor: "sublime"

Clone GitHub repos

When I set up a new Mac, I want to have certain projects on it. Before, I used to clone them manually, but now, it’s all automated. All I have to do is fill in the YAML config, and Ruby on Mac clones all the repos in the right place.

# For each repo you want to clone from GitHub, specify the path and the 
# repo name. Include both the GitHub username or org name and the repo name, 
# separated by a slash.
# For example:
# - path: ~/projects/monfresh
#   name: monfresh/Keyboard-Maestro-Macros

- path: ~/projects/codeforamerica
  name: codeforamerica/ohana-api

- path: ~/projects/rubyonmac
  name: rubyonmac/rubyonmac-pro

macOS prefs

This one is my favorite. Whenever I set up a new Mac, I always make several changes to the default macOS prefs. And for the longest time, I didn’t have a checklist, so I wasted a lot of time trying to remember which settings I needed to change and where to find them.

For example, I turn on tap to click and tap to drag, I disable autocorrect, I turn on the Developer Settings in Safari, I switch to DuckDuckGo for search, I set the Dock to autohide, and a bunch more.

Luckily, Apple gives access to most macOS prefs via the command line, which means we can automate the process. The bad news is that there’s no official documentation that I know of. I spent over 50 hours figuring out the right commands and testing them on various macOS versions.

But wait, it gets better! I made it super easy to customize the preferences. Rather than making you deal with complicated and hard-to-read commands, all you have to do is fill out a YAML file with easy-to-understand settings. Here’s a small sample:

  autohide: true
  # possible values for orientation: bottom, left, right
  orientation: "bottom"
  rearrange_spaces_in_mission_control: false

# might require logging out and back in
  tap_to_click: true
  tap_to_drag: true

Below are more features that will only be available in the Ultimate version.

These are available now:

These I’m still working on:

You can get Ultimate today at the early bird pricing of only $79! The price will then increase to at least $99.

If you’re an existing customer that wants to upgrade to Ultimate, email me at moncef at rubyonmac dot dev, and I’ll send you a discount code based on what you already paid.

As I add more features to the Ultimate version, the price for new customers will increase, but today you can lock in these future updates for only $79! For example, I’m planning on creating templates for Jekyll and Bridgetown ready to go with SEO plugins, Tailwind, analytics, and syntax highlighting.

That link to Ruby on Mac Ultimate is to a preliminary landing page in the spirit of continuous shipping. I was able to put it together quickly thanks to Tailwind UI. I’ll be adding more details and a video demo soon.

Heroku security incident

On the night of May 17, Heroku sent an email saying a threat actor got hold of config vars for Review Apps. I had a few Review Apps with config vars, so I spent the next day rotating sensitive secrets. You can read all about it in my daily notes for May 18.

Surprise trip for my wife’s birthday

I love planning fun surprises to celebrate my wife’s birthday. Past examples include a trip to Portugal, and hiring a professional chef to cook for us at home.

This time, I looked for a weekend getaway for the whole family not too far from our home in northern Virginia. I ended up finding a great rental in Basye, VA next to Bryce Resort. We all had a great time.

Here’s a photo of Lake Laura, from our paddle boat:

lake laura in basye virginia

Pool opening

Late April/early May is when we usually open our pool. When we first moved into this house 5 years ago, I didn’t know anything about pool maintenance. I made many mistakes and wasted a lot of time. Now I’m an expert in pool science, and most of it is automated thanks to a saltwater chlorine generator, a pool vacuum, and timers. The bulk of the work is balancing the chemistry during the first week.

The one thing I don’t want to do myself is opening and closing the pool, so I hire the same company to do it every year. Here’s what the pool looked like when we opened it:

dirty pool revealed during opening

And here’s what it looks like now:

clean pool

What’s planned in June

Beach vacation

We’re finally going on our first week-long vacation of the year! We go to Bethany Beach in Delaware every year. We found a great rental two years ago, and we’ve been sticking with it ever since.

Start livestreaming

Now that my livestream setup is ready, I hope to actually start livestreaming in June. This is a way for me to build in public and share what I’m working on and my thought process. The other reason for doing this is to keep me motivated and to hold me accountable.

I’m thinking of doing this every weekday from 1-2:30pm ET. If you want to look over the shoulder of a dev solopreneur, subscribe to my newsletter and/or follow me on Twitter to find out when I go live.

Start an automation newsletter

Over the past few years, I’ve been mostly writing Ruby tutorials for beginners as well as more experienced people. While my posts solved real problems lots of people run into, I didn’t feel there was a cohesive theme.

When I quit my job to focus on Ruby on Mac, I realized that my superpower is saving people time through automation. From the 1000+ hours I saved when I worked in Civic Tech, to the many shortcuts and automated workflows I use every day, I have lots of great productivity tips to share. I’ve already compiled a list of 40 automation tutorial ideas.

I’m hoping to send out an automation guide every Sunday, but I probably won’t start until the end of June. Subscribe to my newsletter to get the first issue as soon as it comes out.

That’s a wrap!

Wow, it took me a lot longer to write this report than I expected. According to Timing, I spent 16 and a half hours on it! If you got any value out of it, please share it with a friend. It only takes a few seconds.

If you want to see what I’m up to between now and the next income report, you can find me on Twitter @monfresh.

I also wanted to mention that although she doesn’t do them anymore, Monica Lent inspired me to start writing these income reports.