Now that we're a few days into 2020, it's time to take a few steps back and reflect on some of our accomplishments from 2019. First of all, I'd like to thank the community and our team for not only surviving 2019, but continuing to build momentum into the new decade. Let's celebrate our accomplishments and keep the delivery train rolling! 🚂🎉
We started with no product and finished with a publishing platform.
Not so long ago, we were appreciating how Medium helped us bootstrap a company without investing in all of the usual things early stage startups need, like a dev team. At the same time, we had outgrown our cocoon and were no longer willing to be beholden to changing house rules.
We explored alternatives, but decided to build our own publishing platform. The first half of the year was spent building our new platform with the help of a $100k grant from the Google Cloud Platform. The second half of the year was spent exploring functionality gaps, fixing bugs, iterating, iterating, and iterating.
We built an app for writers, readers, editors, sponsors and admins to collaborate.
Functionality for Writers:
Functionality for Readers:
Functionality for Editors:
Functionality for Sponsors:
Functionality for Admin:
We integrated with Slate.js for editing stories.
I've never really been a fan of traditional WYSIWYG editors because they inundate you with features. The entire time you're writing, you see a Microsoft Word-like interface for every possible feature.
A writing interface should get out of our way and just allows you to type. Additional options reveal themselves on demand when you want to highlight a bit of text, insert an image, or start a new paragraph.
We've still got a long way to go to build the story editor of our dreams for technologists. But v1 is live and it gets the job done.
We built stats for writers
Initially, we built our own infrastructure to track reading time and impressions. After releasing stats v1 using our own analytics, we decided it just wasn't worth the effort to continue building and iterating on our internal analytics at this stage. We just had too many competing priorities and had to invest time on other projects.
So we integrated with Google Analytics to power our writer analytics for now. Eventually we'll likely just use GA to track reading time and build out our own analytics for other stats. Props to Austin for taking on the majority of the work to get our stats up and running. Here is a post explaining our move to GA.
We integrated with Filestack for uploading images.
I'm a big fan of using Filestack as a basic file uploading tool. Their interface is nice, functionality is configurable, and they integrate with your CDN. They also have pretty reasonable pricing and solid dev documentation. No major complaints. Solid tool.
Hackernoon.com content is powered by the Google Cloud CDN.
One of my concerns going into 2019 was delivering our content in a way that is stable, cost effective, and fast loading. I've previously worked with other blogging platforms with content delivered from a database, like MySQL powering a Wordpress blog. Databases are great but you quickly run into scaling issues with far less traffic than Hacker Noon (4M+ readers per month).
It can be a constant struggle to go back and forth scaling servers and databases. So we decided to deliver our content as HTML files powered by a CDN to side step scaling challenges to allow us to invest more time iterating on the product.
Whenever a story is created, updated or deleted in our database, we trigger a cloud function that regenerates all of the associated HTML files on our CDN. So far it works pretty well keeping things cheap, fast and stable. But we can certainly make a lot of improvements in 2020.
Not only does this forum give readers a space to talk to editors and the people behind Hacker Noon, it also currently powers our commenting system for Hacker Noon stories. Discourse is a pretty fantastic piece of software. I'm blown away by how robust it is compared to the old forums I powered by phpBB and other related OS tools.
The biggest challenge we ran into with Discourse is making authentication work with our main app so users can create a single account and log in either the writer app or the community. We are also thinking about rebuilding our commenting system to be more inline. But any complaint I have with Discourse is more about how we chose to use it, not the tool itself.
We build an API & Authentication server.
Unfortunately we couldn't use Google's Authentication tool out of the box because we wanted our auth to be compatible with Discourse. Thinking back, I'm not convinced this was worth the effort.
But this server has given us some nice wins over the drawbacks of a purely serverless backend. In particular, cold starts in cloud functions can be tricky to deal with in cases where users are requesting information from the backend. If a cloud function has to do a cold start, this can take up to 10s for a user to get a response. So it's nice to have the option to make requests to an actual server when response times are important.
We integrated with Unsplash.
Having access to a huge library of images is incredibly valuable as a writer. So we integrated with one of the biggest and best sources for high quality free images. Writers can now search and embed Unsplash images directly from the Hacker Noon story editor.
We migrated our library to our new infrastructure
This turned out to be a far bigger and more problematic task than I ever imagined going into 2019. Thankfully we had help from CosmicJS but we still made a lot of mistakes in the process and had to spend a ton of time fixing bugs. Some of these bugs even caused us to lose writers along the way. I'm glad that work is mostly behind us.
We've started integrating with GUN for Annotations.
I really believe that technical content often requires a lot of context building to help readers get a footing to help them understand the material. Context building can be in the form of links to external resources. But that reading flow isn't great. Ideally the context is inline and unobtrusive. So we're pretty excited to be launching an annotations tool in the coming weeks.
Writers will be able to highlight and annotate technical terms for readers. And readers will be able to submit inline comments.
We integrated with Algolia.
Nobody does search better than Algolia. We could have spent the entire year building a far inferior search tool. Currently Algolia powers search on Hackernoon.com and search for editors to manage story submissions. Soon Algolia will also power tag pages, story build infrastructure, pagination, a better tag suggestion tool.
We launched the Noonies!
This was one of our bigger side projects in 2019. We were the tech industry's greenest awards and some categories received over 20k votes. Thanks to Storm, Natasha, Kien and the team for making that happen.
We even added a dark mode.
I'm kind of surprised at how many readers wanted dark mode. I guess the stereotype of hackers, hacking away in dark has some truth to it. So we launched v1 of our dark mode in late 2019 and will likely iterate on some of the colors/design in early 2020.
It was a good year at Hacker Noon. We accomplished a lot as a small and scrappy team. But there is still a ton of work ahead of us. Now that we have some of the basic building blocks in place, we're more free to iterate and make some bold product moves. Stay tuned for an even better 2020.