Inside a viral website

Peeling back the curtain of running a viral meme website for 5 days. More details than you could ever hope for.

As anyone reading this knows, the Ever Given was stuck in the Suez Canal for just over 6 days. It blocked a route that normally carried ~10% of the world’s trade. More importantly (at least for this post), it also generated more than 10% of the world’s memes.

This is an account of running


The website received around 50 million views in a 5 day period. That puts it roughly on par with the New York Times, though all the visitors to were seeing exactly the same page. At its peak, there were 8,404 requests to the site per second:

It received over 190,000 likes, comments and shares on Facebook.

It became the top result on Google search for “is the ship still stuck” (ahead of all the world’s newspapers) and as a result received over 400,000 clicks.

Personally, I went from having 208 Twitter followers to over 3,000 and my own Tweets were seen over 1 million times, which has definitely never happened before — previously no more than 15,000 people have seen my Tweets in any given month.

Running the site was incredibly fun, at times pretty damn stressful, and ultimately insanely addictive. It sort of felt like the nerdiest possible weekend-long rager. Writing this post is basically my post-night-out debrief.


I was supposed to be taking a day off. Because we’re still in lockdown in the UK, I spent most of it just wasting time on the internet. At one point, I googled “Is the ship still stuck?” and found it surprisingly hard to find the answer. A quick domain search later (I generally use or and a fairly obvious idea popped into my head.

I should point out that I wasn’t actually the first to do this. This one was:

Setting up the site technically

In my day job, we use Next.js for almost everything we build. It’s a framework built on top of React that just strips out almost all the complexity of building fairly complicated websites. Obviously, this wasn’t a complicated website, but I went with what I’m most familiar with.

The first version of the site had a headline: “Is that ship still stuck?”, an answer “Yes.” and 3 recent articles from the New York Times. I wanted the articles to update automatically whenever something new was published, so I used the New York Times Article Search API which was really easy to get started with (and free). I set this up in just over an hour and hit deploy. (Well actually I didn’t, I set up a Github integration with Vercel so that every time I pushed to main the site automatically updated)

I shared it in our #devs channel at Time to Spare. Reuben suggested I should add a sea-shanty, so I added a hidden link to that viral TikTok if you clicked on “Yes.” Reda pointed out that I needed to improve the <meta> tags for the social media previews of the site (I hope you enjoyed what I went with). So with another 20 minutes for those fixes, I posted the link on my Twitter.

The other things that made it onto the page came from feature requests on Twitter:

Early stats of a viral tweet

I have technically been on Twitter since 2011. I don’t post particularly often and I didn’t have many followers (I’m fairly sure half the ones I did have were either bots or inactive). Most of the things I’ve posted are liked exclusively by my colleagues, my Mum and my ex-flatmate. It’s screaming into the void.

This one felt different, and it was noticeable very early on. I did a quick Google for “what is a good twitter engagement rate” and got an article from Hubspot talking about an average of 0.8%. My Tweet was running at 25% (admittedly with a pretty small sample size). I had a bit of a hunch this was going to be fun.

Interestingly, that engagement rate dropped pretty slowly. It stayed above 20% for a long time. Also fairly consistently, around 20% of the people who liked the Tweet decided to follow me. I have no idea if these stats are representative of Twitter normally.

A couple of people have asked me what I did to promote the site early on. The answer is absolutely nothing. I sent out 1 tweet. I didn’t post it to my Facebook, LinkedIn or anywhere else. Twitter’s strange algorithms and the ridiculous scale of the Internet did everything.

At some point later that day, someone posted it onto HackerNews. It went to 2nd on the home page and received a over a 1000 comments. Most of the comments were (unsurprisingly) software engineers speculating on how they would unstuck the ship. Someone should do a text analysis of how many started with some variation of “Couldn’t they just…”. For a self-taught software programmer, this was definitely something of a career highlight.

From there, it really took off. I particular enjoyed this tweet from the founder of Flexport:


Now there were lots of people coming to the site, I was determined to have as much fun as possible.

I also started to get a bit worried about how much hosting was going to cost me. I’m still on a legacy plan with Vercel, so I didn’t have any transparency on what the final number was going to be. I’d done some back of the envelope calculations that suggested it would come out at around ~$450 but my biggest worry was that I could be an entire order of magnitude out. As a result, I wanted to try out some “monetisation” options to try and cover my potential costs.

In the end, I needn’t have worried. I contacted Vercel support and they told me the hosting cost only came to $70 and that they were going to cover it because they thought it was fun. Honestly, great company. So I’ll be donating anything I’ve earned to


You’ll notice that the site didn’t have any normal ads. This was for 3 main reasons (in ascending order of importance):

  1. I don’t like ads

  2. Cookies

  3. Approval processes

Not liking ads is fairly obvious. I thought it would be tacky and boring.

Cookies are also obviously annoying. In my mind, I couldn’t quite imagine anything more irritating than loading a single-purpose website and then needing to click through a horrendously intrusive cookie banner to actually see the answer.

Finally, all the ad networks I found with a quick search required a potentially multiple day manual approval process. I had more faith in the salvage operation than that.


Instead of ads, I thought I would try and sell an NFT of the page. I’d read a fair amount about NFTs (both good and bad), and I was a mix of sceptical and curious. I thought this would be an interesting and weird opportunity to try it out myself. Added to this, it could be a fun meta-meme. I thought it would be fun to be the first meme website to sell itself as an NFT. Also to be completely honest, I thought it might make it into Matt Levine’s Money Stuff. Essentially, I was “doing it for the gram”.

In the end it was successful, selling for just over $200:

However, that is very much far from the whole story. The whole process was riddled with opaque transaction fees. Here’s the full details on selling an NFT (for someone not already in the crypto ecosystem):

  1. Download MetaMask (a crypto wallet). This bit is free.

  2. Set up an OpenSea account. Also still free.

  3. Once you’ve created a listing, you need to connect your wallet to OpenSea if you want to sell anything. For this, you have to pay “gas” on an Ethereum contract. Apparently this price varies day to day (helpfully), but it cost me $65.

  4. If you don’t have any Ethereum in your wallet (as I obviously didn’t), you need to change your normal money into crypto before you can pay the cost to list something. With a service like Wyre, this comes with another ~10% transaction fees.

  5. You need to accept some other contract that allows you to work with Wrapped Ether instead of normal Ether. Honestly I got a bit lost at this point and can’t even remember if it charged me.

So before I got to the stage of trying to sell this thing, the process had already cost me 4 hours of my time and $70+. Still, maybe the joke would be worth it. I added a link to the top of the website and waited for things to get interesting.

It didn’t really get interesting.

I got a few bids on it. My Dad found it amusing. But ultimately it wasn’t really much fun. The bidders were anonymous. There were apparently thousands of people viewing this NFT (it became one of the top 8 most viewed out of over 15 million NFTs on the platform), but not much happened. What’s more, by replacing the “follow me” button with a link to the NFT, it made my day a lot less fun as fewer people were dropping by for chats on Twitter. Though obviously, if Elon Musk or someone had put on an outrageous bid I probably would have changed my mind…

After my 5-day safari into the “creator economy”, in my view, if this is to be the future, the platforms need a lot of work. At a minimum, there should be a comment section on the listings. There should also be an easier way to buy these things if you’re not already bought into crypto. As it was, I think I directed ~20,000 people to a link where they couldn’t engage even if they wanted to.

Still, I got a bid that I thought was worth accepting. Except, because it didn’t clear the minimum reserve price (1 Ether / $1800), I had to pay some more transaction fees to accept the offer. This was another $70. Now, having spent 140 actual dollars, I am the proud (?) owner of $200 worth (OpenSea took a cut too) of Wrapped Ether. Except, I can’t spend Wrapped Ether on anything useful. I’ll need to spend a bunch of transaction fees to change it into Ethereum and then back into fiat (if I want to use it to buy lunch). At this point, I have given up.

Currently on OpenSea there are 17 million items offered for sale. The vast vast majority have had no offers. For all I’ve seen on the internet about how NFTs are a scam for people buying them, I’m not sure I agree. I think the buyers know what they’re getting into — they basically have to be OG crypto enthusiasts to actually buy NFTs. For the sellers though? Especially for artists looking for a way to finally make money from their art on the internet (I am 100% not putting myself in this category), it seems very pay-to-play with very low likelihood of success.

Anyway, back to the fun.

Affiliate marketing

So having been bored by NFTs, I thought I would give affiliate marketing a try. The logic here was simple: I like reading books and I like recommending other people read books.

Getting set up with Amazon’s affiliate scheme was a breeze (though you do have to do it separately for each country). There’s no delays getting authorised, you just fill out a couple of forms and you’re away.

For a data nerd, it is also extremely fun. You get live reports of all the products people using your links have bought. These reports aren’t just limited to the products you recommend — if someone buys anything within a 24 hour period of clicking your link, you can see, and you get commission. It’s wild.

So yeah, I got commission for these:

Almost as much fun as seeing the full breadth of the Amazon product catalogue was seeing which book recommendations were the most popular. If you kept coming back to the site, you might have noticed that the book recommendations were changing. That was because I could immediately see which ones people were buying. In the final reckoning, this was the league table of the books bought (from the US):

  1. Prisoners of Geography — 127

  2. The Box — 111

  3. The Invisible Hook — 16

  4. The Silk Roads — 13

  5. A Splendid Exchange — 10

  6. 90% of everything — 6

  7. The Ocean of Life — 1

That’s also probably roughly the order in which I would rank those books, so well done everyone.

Prisoners of Geography coming top of that list also had 1 particularly fun side effect:

I’m still awaiting the final reckoning of how much I earned from these links (you only get paid commission when the item is shipped, not when it’s ordered), but so far it’s been less than $500 across 3 days. Considering that in those 3 days the website had 2.7 million page views, I think it’s fair to say you’re not going to make your fortune from affiliate marketing links to books. It is good fun though and some people on Twitter thought it was nice.

Tech twitter beef

However, while I was messing around with the site, some people on Twitter were getting a bit annoyed:

Twitter avatar for @holmanZach Holman @holman is such a great example of a page in 2021: capitalizes on current events, is a clear candidate to be a simple static site, loads the HTML immediately but spends the next minute running next.js before it loads anything on-page, and you can buy it as an NFTIs this ship still stuck?You know that ship, the one possibly still stuck in the canal. Is it still there? Find out that, and really only that, at this

As much as I enjoyed the old-man-yells-at cloud style criticism of the modern web development stack, it wasn’t exactly accurate. As was pointed out in a quote tweet by the Vercel CEO, the problem wasn’t Next.js at all, but the Vesselfinder embedded map taking a while to load (because everyone wanted to check the Ever Given’s status):

Twitter avatar for @rauchgGuillermo Rauch @rauchg is such a great example of a page in 2021. Let's look into the actual facts of this tweet, which is a great example of a tweet in 2021.

Zach Holman @holman is such a great example of a page in 2021: capitalizes on current events, is a clear candidate to be a simple static site, loads the HTML immediately but spends the next minute running next.js before it loads anything on-page, and you can buy it as an NFT

I found this exchange very fun.

I also particularly liked ignoring this terrible suggestion:

I’m not bringing this up just to dunk on people. It’s worth pointing out that for all the criticism, the Next.js + Vercel combination meant that I didn’t have to worry about scaling the site at any point. There were millions of hits, and sometimes thousands per second, and it all just worked. The basic page continued to load in less than half a second under all that load. It was remarkable.

Finally, this Tweet gives me an excuse to point out that I discovered Simple Analytics. I couldn’t stand the idea of needing a cookie consent banner obscuring the page, but I did want to have some analytics to stare at slack-jawed. Not only was Simple Analytics incredibly quick to set up, didn’t require any cookie nonsense, it also had a very fun public dashboard so everyone else could also waste their weekend. My only wish was that I’d used it from the start.

Unrealised dreams

I did have a couple of ideas that I didn’t get time to finish implementing.

First was a Wacky Races style game of “drive your ship through the canal without crashing into the other boats”. Fortunately, CNN basically did that.

Second was a Cameo appearance. I wanted to see if I could pay a few minor celebrities to discuss how they would free the ship. For British readers, I really wanted Paul Chuckle to do a commentary on the whole operation.

Alas, events intervened.

The main event.

At 4:30am UK time, my phone started buzzing. Fortunately, I woke up. Someone had alerted me that the ship was “freed”. All the major news sites were reporting that the situation had been resolved. But it didn’t actually seem to be moving? I was frantically searching for more details of what had happened. Eventually, I settled on “Sort of?”:

This led to a series of ridiculous Twitter exchanges. People were responding to actual news accounts with “Are you sure? doesn’t seem to agree”. Other actual journalists were tweeting out the website as some kind of semi-authoritative source. It was weird. And stressful. Eventually, in another ludicrous turn of events, the New York Times Cairo Head vindicated my decision:

Twitter avatar for @VivianHYeeVivian Yee @VivianHYee
Can confirm’s assessment: “Sort of?” The ship is now edging nearly parallel to the canal, and tugs will keep pulling it for the next 1.5 hours as the tide rises, until it can move north and get out of the other ships’ way

The rest of the day continued confusingly. The world’s newspapers caught onto the fact that the ship wasn’t really free and started describing it as “partially refloated”.

Things then got even stranger. The Egyptian President announced on Twitter that they had “ended the crisis of the stuck ship”. A fair few news sites again picked up the news. But it wasn’t free!

To try and get to the bottom of it, I found my way onto an obscure Egyptian news broadcast live stream. It was all in Arabic, but there was a nice guy called Ahmed translating everything in the comments section. The Egyptian President had obviously jumped the gun.

So the Suez Canal Authority started killing time. They were giving every presentation they could think of to distract from the fact the ship was still very much stuck. They talked about their rigourous ship-driver training school. They described how they would react to an oil spill, if there was one. They even started talking about their digital transformation and how they were soon going paperless. It was farcical. And hilarious.

But then the ship did actually move. And so with Reda from our team at Time to Spare, we had some fun…

A stealth Rickroll victory lap

Some people noticed pretty quickly what we’d done:

But after some digging, we found something far more fun. The Rickroll of no known origin:

All in all, well worth the effort.

What was I most pleased with?

It was pretty cool to run a massively popular viral website.

I’m pretty pleased with traffic stats.

Was delighted by real journalists using it as a source:

Quite pleased with rick-rolling ~250,000 people.

But let’s be honest, most proud of this:

Looking for one last hit

I’ve never really been that addicted to social media previously (if you exclude MSN messenger), but this was very different. I barely slept. It was addictive as hell. So in the vein of looking for one last hit:

  • Most people got Rickrolled, did anyone get the alternative?

  • Did people find the foghorn button?

  • Were the XKCD jokes too obscure?

  • Did anyone end up playing Transport Tycoon?