Last week I decided to release Random Hunt to the world, and the response has been phenomenal. Well, at least I think so... I've never done anything like this, and had no real expectations for the site.
Here's the post on Product Hunt.
A little background
I built Random Hunt because I found myself wanting to explore Product Hunt's back catalog. But the problem is that my own immagination was getting in the way. Sometimes just seeing the name or even the tag line wasn't enough to get me to click. Having the site presented to me though, would encourage me to scroll, skim and investigate a bit more... Which is why even I tend to click past those that disallow iFraming.
Another reason I love using Random Hunt is that I can find things from any day without having to know what I'm looking for. Sometimes I just want to see something cool. Sure it might not be new anymore, but it certainly might be new to me. I also was an early StumbleUpon user, and I thought a curated data source would make for a great experience.
I sent a link and short description into the Product Hunt team at 7:57 AM on 3/2/15, I knew they liked to see things built using their API, and I thought this was pretty cool. The day went by, I worked, browsed the web and played with my new site. I figured I'd see if they had any feedback before actually submitting to Product Hunt. Then at 5:05 PM I got a tweet from Ryan Hoover himself complimenting it (well he said "Nice") and asking me to submit it for the front page the following day. I did, albeit with a less obvious tag line... I was trying to avoid the "X for Y"cliché, but that didn't really work so well. The tag line ended up as "StumbleUpon for Product Hunt" and it certainly does fit. i added a brief comment to the post and went on with my night.
Google Analytics
I woke up to find my little site on the front page of a listing I respect highly, and was so excited. It had a few Upvotes and I went over to Google Analytics to see how many visitors I'd received. It wasn't a ton, around 100. But it was still early, before 6 AM pacific. I tweeted about it and shared it on FaceBook and Google+.
I went through my morning routine with one slight adjustment... I kept the real-time Google Analytics window open, which is a lot of fun to watch. Simultaneous visitors never got super high, but what was crazy was watching all the locations people were connecting from. I loved watching the little map add orange dots all over the world.
One of the most important things I did was add some event tracking to Random Hunt. I didn't really care how many people visited, I wanted to know how many times the random button was clicked. By 7:30 AM, this number passed 1,100. I was very shocked, not only at Product Hunt's ability to drive traffic, but at the use my little project was getting. Below is the graph for the Random button click event for 3/3/15.
By the end of the day, there were 5,671 clicks for 1,413 sessions. Since a random product loads at first, a total of 7,084 products were presented to visitors. I thought maybe a few hundred people would show up and click a couple times. I was floored.
Throughout the day though, I watched the analytics continue to grow and eventually level off, Product Hunt actually tweeted about it not once but twice!
By now, traffic has leveled off a bit, I still go to Random Hunt every day after I go through what I think I'll like on Product Hunt itself. But other people continue to go as well, which is awesome.
As of 8:00 AM on 3/12/15 Random Hunt has had nearly 12,000 event clicks from 2,400 visitors.
If I could've...
I've learned a bit through this experience. None of them are that major, most relate to my own curiosity. I might've logged which products were being presented. I considered putting in a counter and sending GA the details on each successive click. I might have prettied it up a bit. I might've enabled the back button and pushed IDs to history... But I didn't. I wanted to share what I made. So I did.
How it works
I've been asked a few times how I made Product Hunt work... So here's a general overview:
There are 3 crawlers running, grabbing data and putting it into my DataBase:
- One runs every minute, and retrieves the list of today's products with their vote counts, tag lines, URLs etc...
- One runs every 5 minutes and retrieves the last 3 days' worth of products.
- One runs every 30 minutes and retrieves all the products in the history Product Hunt.
The purpose of these is primarily to cut down on API calls to Product Hunt and increase speed. The crawlers have been designed in such a way to accommodate the rate limiting Product Hunt enforces.
When the page loads (and the random button is clicked), there is a simple call to the DB to randomly select a product and return it to the client. At the same time, while the iFrame attempts to load, there is a separate function which retirees the response header for the page attempting to be iFramed. If it returns with X-Frame-Options that prevent iFraming, it will show the message and offer to open the product in a new window. This saves the user from not knowing whether or not the page is loading.
I considered storing this info in the DB and avoiding them... but I wanted to stay away from anything that would reduce the randomness.
The Product Hunt API is pretty great to work with, and I have some other ideas of what I'd like to do, but for now, go enjoy randomhunt.com