4 minutes
The Front Page of Hacker News
Intro
I wrote a blog post in February 2023. It became by far the most popular content I’ve personally put on the internet. I love when others share this stuff so I’ve included some background on what happened before, during, and after.
Highlights
- 80,000 pageviews in first 16 hours.
- Averaged 1+ request per second in each of 14 consecutive hours: 11:00AM PT 2/20 until 1:00 AM PT 2/21.
- On the Hacker News frontpage for 12 straight hours.
- Peaked at HN #5 slot.
- HN: 307 upvotes, 121 comments.
Charts
Pageviews Overview
Pageviews Zoomed
Hacker News Ranking
Pct of Traffic By Country
(from Cloudflare, First 48 Hours)
Country | % of Traffic |
---|---|
United States | 62.80% |
Germany | 7.71% |
United Kingdom | 6.52% |
Canada | 5.12% |
Australia | 4.06% |
All Others Combined | 13.79% |
Timeline
- 2/20/2023
- 17:30 UTC - Published blog post
- 17:45 UTC - Submitted the link on HN
- 19:20 UTC - Post entered Hacker News front page
- 2/21
- 03:00 UTC - When I realized what was happening
- 09:20 UTC - Post exited HN front page
- 09:30 UTC - 80,000 cumulative pageviews reached
- 2/24
- 20:00 UTC - 100,000 cumulative pageviews reached
As shown in the timeline, I had no idea this was happening until hours after it started. I hit publish and then went on with my day. Once I did, I was too scared to read the comment threads for about 24 hours - I was sure everyone would tear me apart. In the end the community was very supportive and I took great joy in reading everyones' thoughts!
There is no question this exposure radiated outward to a number of my other posts, projects, websites, github repos, etc.
Technical Details
My blog is a static website built with Hugo, hosted on Cloudflare Pages (Way #1), augmented with a Cloudflare Worker (Way #2). The worker intercepts each request, sends the request to its original destination, sends analytics data to Honeycomb, and sets two security headers on the response.
The tools available on Honeycomb’s generous free tier are what unlocked the analysis in this post. Coarse grained data was available on Cloudflare but not sufficient to do everything.
Regrets
- I wish I didn’t link my fork of the nomie repo as the post drove a handful of Github stars to my fork. I’m not doing development on the fork and I’m afraid it will create confusion for people who discover the project going forward.
- I would have created more specificity around option #3, the Linux VM singleton. This was an intentional choice. Some comments seemed to think I meant one or more linux servers. No, I meant precisely one linux VM with a SQLite database file sitting on the local filesystem.
Appendix
Hourly
60 minutes starting | req / second | http request count | cumulative total |
---|---|---|---|
2/20/2023 9:00am -0800 | 0.01 | 39 | 39 |
10:00am -0800 | 0.05 | 171 | 210 |
11:00am -0800 | 1.30 | 4,681 | 4,891 |
12:00pm -0800 | 1.62 | 5,819 | 10,710 |
1:00pm -0800 | 1.71 | 6,166 | 16,876 |
2:00pm -0800 | 1.34 | 4,820 | 21,696 |
3:00pm -0800 | 1.16 | 4,177 | 25,873 |
4:00pm -0800 | 1.10 | 3,962 | 29,835 |
5:00pm -0800 | 1.12 | 4,047 | 33,882 |
6:00pm -0800 | 1.23 | 4,427 | 38,309 |
7:00pm -0800 | 1.23 | 4,412 | 42,721 |
8:00pm -0800 | 1.11 | 3,998 | 46,719 |
9:00pm -0800 | 1.09 | 3,923 | 50,642 |
10:00pm -0800 | 1.00 | 3,615 | 54,257 |
11:00pm -0800 | 1.01 | 3,645 | 57,902 |
2/21/2023 12:00am -0800 | 1.09 | 3,927 | 61,829 |
1:00am -0800 | 0.61 | 2,187 | 64,016 |
2:00am -0800 | 0.38 | 1,380 | 65,396 |
3:00am -0800 | 0.39 | 1,393 | 66,789 |
4:00am -0800 | 0.65 | 2,351 | 69,140 |
5:00am -0800 | 0.79 | 2,848 | 71,988 |
6:00am -0800 | 0.81 | 2,920 | 74,908 |
7:00am -0800 | 0.73 | 2,618 | 77,526 |
8:00am -0800 | 0.50 | 1,788 | 79,314 |
9:00am -0800 | 0.38 | 1,350 | 80,664 |
Daily
24 hours starting | requests / minute | http request count | cumulative total |
---|---|---|---|
2/19/2023 16:00 -0800 | 17.967 | 25,873 | 25,873 |
2/20 16:00 -0800 | 41.806 | 60,201 | 86,074 |
2/21 16:00 -0800 | 6.187 | 8,909 | 94,983 |
2/22 16:00 -0800 | 2.863 | 4,122 | 99,105 |
2/23 16:00 -0800 | 0.995 | 1,433 | 100,538 |
2/24 16:00 -0800 | 0.649 | 935 | 101,473 |
2/25 16:00 -0800 | 1.021 | 1,470 | 102,943 |
2/26 16:00 -0800 | 1.023 | 1,473 | 104,416 |
2/27 16:00 -0800 | 0.549 | 791 | 105,207 |
2/28 16:00 -0800 | 0.359 | 517 | 105,724 |
3/1 16:00 -0800 | 0.306 | 440 | 106,164 |
3/2 16:00 -0800 | 0.259 | 373 | 106,537 |
3/3 16:00 -0800 | 0.242 | 349 | 106,886 |