From 0 to 15000+ users in 100 days.

Saeed Ezzati
17 min readDec 26, 2019
Google Analytics Dashboard

When I was thinking about my next project ~4 months ago, the first thing I did was to write down a list of expectations and criteria. There were 3 simple things on my list:

  1. Finish It, and by that, I mean launch it and have actual users using it on a daily basis. Before this project, I had worked on a couple of other projects, most of them I spent too much time on, but every time after I finished building them I slowly forgot about them and started something new. You see, I love building new things. In fact, I think I love it too much. And when it comes to marketing and sales, I try to avoid them at any cost. But this time I wanted to do less building and more marketing. And that was how I came up with the second expectation on my list.
  2. Launch it in 1 week. It actually took me almost 2 weeks to launch the first version of wfh.team. But I was still very happy with the results since I spent somewhere between 6 months to 1 year on each one of my previous projects. Now, some might think I wasted all those times building my previous projects, but in fact, it was mostly because of the previous projects that I was able to launch this one in 2 weeks. I re-used many of the codes/components I created in my latest projects in this one, and I already knew how to do most of the things I needed to launch my MVP.
  3. Don’t quit. 👈 This is where I am right now. I believe as a solo founder, your most important job after launching your project is to Not Quit. There are many times when you feel like you are wasting your time and/or money, or you just want to start working on something new, maybe a better idea.🤷🏼‍♂️ I think this is where the majority of startups die. And this happened to many of my other projects as well. But this time I wanted it to be different. For instance, before I launch I wrote down a list of all the places I wanted to post my projects: Hacker News, Reddit, Product Hunt, Twitter, … and I made a plan to post on each platform with 1–2 days delay in between. I added the delay for two reasons: First, I knew the spike in traffic from these platforms will be temporary, so I wanted to keep the momentum this way. Second, this was going to be the first time actual users were interacting with my website, and since I didn’t spend much time testing it before launch, I knew there will be bugs. So by adding the delay I gave myself some time to fix any unexpected bugs before the next big group of users visit the website.

Note: I understand that having 15k users really isn’t that much compared to many other projects that have had a much more successful launch and are scaling at a faster rate, but it is more than any of my other projects before and I figured sharing how I got here might help someone else to get there too. Here’s a summary of what I did in the last 100 days.

Before I start let me also say that I have a full-time job as a software engineer at apartmentlist.com(we are hiring btw) and everything I did for this project in the last 100 days, was mostly after work or on the weekends. I don’t think to be able to have a successful side project(at least for software projects) you have to necessarily quit your daily job and put all your focus and energy into your side project. Other than the obvious financial benefits, I think this had at least two other main benefits for me:

  1. In my opinion, one of the most important and usually overlooked benefits of having a side project while working a full-time job is that very often, I learn something while I’m working on my side project and I immediately think I can apply that new knowledge to my projects at work, or vice versa. I cannot count the number of times this has happened to me and the benefits each one of my projects has gained as a result of this.
  2. I also think it’s nice to not think about your project all the time. Having a full-time job and interacting with other people at work helped me to take a break from my side project and clear my mind every day. At the same time, my side project had a similar effect on my full-time job.

1) Why WFH? 🤔

My criteria for picking my next project were simple. I wanted something:

  1. That I can implement fast⚡. ️Re-using some of the components from my old projects helped a lot with this.
  2. That is already validated ✅. Meaning there are already other people doing similar projects. Since marketing wasn’t my strongest talent, I didn’t want to invent a new market and make it even harder for myself.
  3. That didn’t need me to create original content for it 🗄. So any listing idea where I collect data from different places and put them all together in one place could be a good candidate. (I need to write something about how the whole internet runs on spreadsheets one day).
  4. That I am passionate about 💖. Being able to work from anywhere I want, is one of my final goals. So I figured by building wfh.team and helping others in the remote community, I will learn a lot about remote working as well.

Remote Job Board checked all the boxes for me. So I started working on it.

2) MVP 🐣

different ways to filter jobs on wfh.team (Dark Mode)

To come up with the list of features for my MVP I looked at some other similar websites. I had a bunch of feature ideas in mind before I start, but I didn’t want to waste time testing every one of those features to find the most promising ones. I figured some of those other websites that were operating longer probably already tested some of those features. So I could get an idea of what worked and what didn’t by doing a quick research and looking at their launch history on Twitter, Indie Hackers, Product Hunt, and other similar websites. Here is the list of features I included in my MVP:

  1. Remote job list(including filters, tags, and pagination)
  2. Remote job detail page
  3. Post a job (including checkout and stripe integration)
  4. User login and profile 👤(Reused this from another project). I needed this for users' favorite jobs feature.
  5. Subscribe box 📬(Even if you don’t have a newsletter at the time of launch, it won’t hurt to collect emails for future)
  6. Feedback form (Twitter should be enough for MVP, but this was easy to implement, so I added it)
  7. Dark mode 🌗(unnecessary but easy to implement 🤷‍♂)
  8. Responsive (You’ll be surprised to know how many people would complain about your website if it doesn’t work perfectly on their phones)

This 👆 might look like a long list for MVP, but considering the amount of code I re-used from my previous projects and also using the react components from the Material UI library, it wasn’t too hard to finish the items on this list in 2 weeks.

Checkout Page(Light mode)

Here’s a list of the main libraries, framework, and services I used for this project:

  • React + Redux for client-side
  • Material UI for my react component(highly recommended even for larger teams)
  • React Helmet for SEO
  • React Router
  • React Lazy Load
  • Webpack
  • Django + Django Rest Framework (DRF) for Server-side and API
  • PostgreSQL for database
  • Stripe for Payment Processing(Easy setup and best documentation I’ve ever seen)
  • AWS for hosting

AWS is a great product. There is basically an AWS service for anything you need from hosting your website to sending your newsletter and updating your database when an email bounces. Here is the list of main AWS services I used for this project.

  • Elastic Beanstalk + EC2 for serving the backend
  • S3 for serving the frontend and static files
  • RDS for hosting my database
  • Lambda for some email functionalities and performance optimization
  • Cloud Front for caching
  • Cloud Watch for logging
  • Simple Email Server for sending the newsletter and other email communications
  • Route 53 for DNS settings

AWS is my main (only!?) cost at this point. My AWS bills run somewhere around $50 a month which I’m paying for with some credits I received last year after being accepted into the YC Startup School program. So technically, my cost at this point is $0 🎉, but my credit is about to end and I have to start paying out of pocket soon.

Other tools I use on a daily basis include Google Analytics and Google Search Console. I also had Facebook and Twitter pixel tracking enabled on my website, but later I realized Google Analytics is enough for my use case and removed the other trackings to improve site performance. I recommend only add them if you need them. Keep your website fast and clean.

Hotjar is another tool I used to see how my users interact with the website. I even found a bug on my website in the signup flow after watching some of the recordings on Hotjar. I think it’s a great tool and I highly recommend it. They also have a great free package for personal use. Fun fact about Hotjar is that their HQ is in Sliema, a resort town on the east coast of the Mediterranean island of Malta 🏖 and guess what? They are 100% remote. I even posted a remote Product Designer job at Hotjar on WFH.

3) Launch 🚀

As I mentioned before I made a plan to announce my launch on some websites with some delay in between. I came up with a catchy title and made my first post on Hacker News a little after midnight.

Hacker News Launch Announcement

I went to bed and woke up around 8:00 in the morning hoping I would see some active users on my website on Google Analytics. But there was nothing! So I forgot about it. 2 hours later I checked again and Voila 🎉. ~900 new users visited my website. It was very exciting. I kept checking the number during the day and tried to answer all the comments on my post. Around 3000 people visited my website that day.

So I repeated the same process. This time on Product Hunt. To my surprise, I only got a few upvotes. It was very strange. It felt like people aren’t even seeing my post. Later I realized one of the most important things when you launch on Product Hunt is who Hunts your product. My mistake was I didn’t ask someone else with more credit in the community to hunt it for me and I just posted it myself. But now I know!

I did the same thing on Reddit (r/SideProject) and Indie Hackers. Reddit result was similar to Hacker News. Around 2000 people visited my website coming from Reddit. Indie Hacker, on the other hand, was similar to Product Hunt. No significant traffic. I still haven’t figured out why 🤔

Reddit Launch Announcement

One thing to remember though is that the majority of traffic from these websites is just a spike and it’s usually not sustainable. So you need to figure out a different way to send traffics to your website. Enters Twitter! 🐣

4) Automation 🤖

I knew from day one that if I only want to pick one social platform for posting Remote Jobs, it would be Twitter. I don’t exactly know why but for some reason Twitter feels like home for most Remote workers.

So I added an optional field in the Job Posting form for the company twitter account. I figured I don’t have many followers now, but most of the companies I post their job have many followers. So if I post their job on WFH Twitter account and tag them in it, I can gain some tweet impressions and profile visits as well. And it worked.

Twitter Analytics Tool. @wfh_team (Oct-2019)

I think so far I’ve only touched the surface of Twitter, and it still has lots of potentials to be unlocked.

For the first few job posts, I was posting on Twitter manually, but I realized that’s taking too much time and isn’t sustainable. So I wrote a bot 🤖 to do that for me. And I didn’t stop there. Later I added similar bots for Linkedin, Facebook, Reddit, and Telegram as well. This means every time someone posts a job on wfh.team, It will automatically be posted on all of these 👆 social media for free 🤑.

Adding these bots was one of the best things I did. It wasn’t easy since I had never done this part before. But I figured it out eventually. Now that I know how to do it, it will be easier and faster for my next projects.

Out of all the other platforms, I think Linkedin was the second most valuable for the purpose of this application. It also has a nice and simple Analytic 📈 section where you can learn more information about your visitors' demographics such as their industry or job function.

Linkedin Page Views

I still think there is so much more I can do with automation and bots. One thing to remember though is that even if you have everything automated, you still need some type of supervision to guarantee the quality of the content. I’m not willing to sacrifice quality for quantity. That’s one reason I don’t scrape other job posting websites to post jobs on my website. I like to verify the quality of every job post, or at least know it was posted by another human. Overall I think automation can be great if done right. The more high-quality content you create, the better the effect of automation.

5) Performance and Accessibility ⚡️

Accessibility and Performance have always been two of my top priorities when building a new project. I think about performance all the time. Whether it’s adding a new page to the website, the amount of data on the API response payload, lazy loading images or fonts, or even the size of SVG files. I have done lots of work in that area in the past both on my side projects and at work and I keep learning new things about how to improve performance every day mostly thanks to web.dev, JavaScript community on Twitter, and great work by people like Addy Osmani. 🙏

The main tool I use to keep track of my performance improvement after every change is Lighthouse. When I first launched my website, my performance score on Lighthouse was somewhere around 50/100. Today it’s at 78/100. I will continue to make changes until I reach 100/100 for every page.

Lighthouse Score for https://wfh.team Homepage

Here are some of the things I did to get to this score:

  1. Use Brotli compression instead of GZip when possible
  2. Lazy load images that are not on the screen(Chrome now has a native <img> lazy-loading 👇)
  3. Lazy load fonts using font-display
  4. Convert all images to a fixed 100*100px before I save them on the server
  5. Reduce the API payload to the minimum required data for the page to load
  6. Reduce the number of API requests
  7. Enable text compression on API response
  8. Preconnect to required origins
  9. Use WebP images when possible(Not enabled yet)
  10. Reduce the DOM size as much as possible
Native Lazy Loading coming to Chrome

I also try to upgrade all the packages and libraries regularly and stay up to date to get the latest features. I personally like to do this manually every couple of weeks and often read the release notes to make sure there are no breaking changes. If you prefer to automate this part there is a great tool called Dependabot. It will automatically create pull requests to keep your dependencies secure and up-to-date. Dependabot got acquired by Github recently and is now free of charge. 💰

For accessibility, I use this chrome extension from Deque called Axe. It’s a great tool. It helps you find all the accessibility issues on your website and then it tells you how to fix them. They also have a Pro version that includes some extra features and is currently free for a limited time. 💸

6) SEO 📈

One of my concerns, when I was deciding which framework to use for this project, was SEO. It turned out there are multiple solutions for that:

  1. Server-Side Rendering
  2. Pre-Rendering
  3. Dynamic Rendering

Out of the 3 options above, SSR is the most effective but also most complicated to implement. There are also many tutorials about how to implement SSR with React and even good frameworks such as Next.js and Gatsby that support SSR out of the box.

Pre-Rendering, in my opinion, is the second most effective technique for SEO since you will still create a static version of your website at the time of deploy, but it’s not scalable. I tried pre-rendering using React-Snap for a little, but it didn’t work as I expected, so I stopped using it.

The last option was Dynamic Rendering. It basically means you update the meta tags after the page renders JavaScript. For this, I used the React Helmet package. It is easy to implement, but it requires the crawler to render JavaScript to work effectively. Since 2014, Google has claimed that they are pretty good at rendering JavaScript. But they recently announced that they finally updated their Web Rendering Service. It is now based on the most recent version of Chromium and supports many modern JavaScript features. At first, I was a little hesitant about this option, but after reading some articles and implementing React Helmet and testing it myself using Google Search Console, I realized that it actually works. So I continued to use this option.

Keep in mind though Google Crawler is the only one (AFAIK) that supports rendering JavaScript at this time. For example, Facebook and Twitter don’t support rendering JavaScript when sharing a link, and because of that, you still can’t use the full power of social sharing when using dynamic rendering. But I believe this will change over the next few years and sooner or later all the other crawlers will start rendering JavaScript.

7) What’s next? ✨

I think I’m at a place now that I can slowly increase my focus on adding new features while still adding new content to the website. There are currently more than 360 Remote jobs listed on wfh.team, all verified by myself, and I will continue to add more every day.

I currently have around ~4000 monthly active users, and that number is growing as well. But what I’m most excited about is the number of subscribers I have on my mailing list:

Number of subscribers on WFH mailing list as of Dec 25, 2019

🎉 2814 🎉 and growing. I think there is great potential in the newsletter and I’m planning to invest more time in it in the near future.

An example of WFH Job Alert email

I use Amazon Simple Email Server (SES) to send all my emails to my users. I think the effort to set it up is actually not too bad compared to other platforms such as Mail Chimp or Send Grid, but the price is so much better, and it is more adjustable based on your specific needs.

Currently, I only have one type of weekly email I sent to my subscriber and it’s in the form of job alerts. I only include some of the most recent jobs posted on the website, and I send the same list to everyone.

My plan is to make the newsletter more personalized toward the interest of each subscriber to increase CTR. I also like to add more newsletters in various other formats such as introducing remote companies or featuring new tools for remote workers and make it optional for people to opt-in in each type of newsletter based on their interests.

I haven’t thought much about accepting sponsors for the newsletter yet, but I think once I pass the 5000 subscriber mark I’ll be ready to accept sponsors in the form of featured company, featured remote job, or featured tool for remote workers.

Here is the list of other things I like to work on soon:

  • Website Redesign: 💄 I have received both negative and positive feedback about the design of the website. I totally agree that I need to make some UI/UX changes on the website, starting with changing the theme and designing a real logo!
  • Public User Profile: 👤 I like to make the website more useful for companies and recruiters and also make it easier for remote workers to receive interview requests from recruiters.
  • Social Login: Removing barriers for users to signup is a great way to grow my business. Adding the Login with Linkedin/Twitter would be the first step toward this goal.
  • Blog: 📓 I’m not a great blogger, but I truly believe in the power of creating original content in increasing traffic.
  • Other features that I like to include at some point but might need a larger effort include resume review, direct apply for jobs on WFH, chat between recruiters and remote workers, calendar for scheduling interviews, community interviews/podcasts, and a section for featuring remote workers.

In the meantime, I have been working on adding two new sections to the website. Companies and Resources.

The Companies page is going to be a directory of all the companies with remote positions, links to their website and social media, a description of what they do, and other information such as their benefits/perks. This section is currently live and has a full list of more than 1000 companies with remote positions, but it is still missing some of the data which I’m slowly adding myself. It would be great if these remote companies can start adding their information to make this list more useful, faster. The list is currently only editable by myself, but if I see any interest in the community to help add information to the list I’ll make it editable by the public.

Companies section on wfh.team

The Resources section is supposed to be a similar page but instead of companies, it will be a list of all the tools 🔨 that can be useful for remote workers along with some detail about them and maybe special offers. This section is currently in development and will be launched soon.

Final Thoughts

As I said at the beginning of this post, I’m now at the Don’t Quit phase. I will continue to build tools to maximize engagement on wfh.team by listening to the community and expanding upon my own ideas. I don’t know if wfh.team will ever reach a point where I can confidently say “it’s done”, but I will do my best to not quit, as long as I have ideas on how to make it better.

I’ve seen so many great products go defunct after only a couple of months just because their creator(s) either got bored of them or felt that it just wasn’t worth their time or money. Activity on wfh.team dwindles from time to time, but it’s definitely not something worth quitting over.

If you are thinking about building a side project but you don’t know where to start, there are many resources out there to help you hit the ground running. I recommend checking out Free For Dev. It has a list of many great products you can start using today for free. Remember, the only thing you absolutely need to spend to make your MVP is time. If you’re willing to spend the time and listen to your users, your product will grow naturally. It just takes some time and a lot of effort on your side.

Good Luck!

P.S. I didn’t expect this to be so long, but if you read it all and you are here now, I want to thank you 🙏 If you register using this link you’ll get 1 free credit to post a remote job.

If you have any suggestions, questions, or just want to say hi 👋 , feel free to message me on Twitter via @eeeziii

📝 Save this story in Journal.

👩‍💻 Wake up every Sunday morning to the week’s most noteworthy stories in Tech waiting in your inbox. Read the Noteworthy in Tech newsletter.

--

--

Saeed Ezzati

Creator of Superpower ChatGPT extension | Sharing daily news and handpicked list of best AI tools in http://SuperpowerDaily.com