engineering.hashnode.com
20 posts
How we detected GQL caching issues with an ESLint plugin
Introduction Over the past year at Hashnode, we have been continuously developing GraphQL APIs to enable users to interact with their data and perform various operations. We utilize Stellate as the GQL CDN and take advantage of its Edge Caching capab...
Jul 22, 20244 min readGraphQLGeneral ProgrammingSoftware EngineeringHashnode 🤙🏽 calls your endpoints. Serverless Webhooks with AWS Step Functions
In our last internal hackathon, Jannik Wempe and Sandro Volpicella built one of the most requested enterprise features - Webhooks. The problem. Imagine you host your headless blog on Hashnode. Your frontend consists of statically generated HTML pages...
Jun 3, 20245 min readAWSaws stepfunctionsaws lambdaSetting Up Post Schedules with EventBridge Scheduler & CDK
One key feature of any blogging platform is the ability to schedule posts for future publication. Hashnode introduced this functionality in June 2022. At that time, the entire feature was based on a CRON job. This CRON job managed all various states ...
Jan 16, 20246 min readAWSevent-driven-architectureHashnodeHashnode's Feed Architecture
We previously explained how we calculate the Hashnode Feed and select content and metadata for each user. We found that the feed now displays improved and personalized content. However, we did find two issues in the implementation: Performance: The ...
Dec 7, 20236 min readAWSGeneral ProgrammingarchitectureDeveloping a parameter weightage-based feed
We recently deployed a new discussion feed on hashnode, which comes close to matching our requirements. In this article, we'll discuss how we created it. Before we get into it, just a heads-up that features like feed are developed with many hits and...
Nov 16, 20235 min readAWSbackendscalabilityWhat can I do with Hashnode's Public API?
The read APIs are now publicly available for everyone to use 🎉 Let's see what we can build with them using some example code. Here are six recommendations: 1/ Host your Blog on a subpath I think one of the most requested features on Hashnode os the ...
Oct 24, 20236 min readHashnodeAPIsManaging Breaking Changes in Hashnode GQL Public API
Hey everyone, this article discusses how we manage breaking changes in Hashnode's GQL Public API. We recently announced Public APIs 2.0 and have been rapidly iterating. As a result, we are incorporating feedback and enhancing the APIs. We are thrille...
Oct 19, 20235 min readGraphQLHashnodeStellateHashnode's Overall Architecture
This article gives you an overview of the architecture of Hashnode. The goal of this article is to give you a broad architecture of our involved services. Overall Architecture This is our overall architecture. A request starts on the user's side. It...
Oct 10, 20237 min readStartupsserverlessAWSThe art of feed curating: Our approach to generating personalized feeds that match users' interests
Feeds are an essential part of every social network. The same applies here at Hashnode. Until now, we have used a very basic and generic algorithm to generate feeds mainly based on hot ranking algorithms. Over time, we noticed that users struggle to ...
Sep 5, 202310 min readAWSGeneral ProgrammingHashnodeCI Checks: Ensuring Better Code Quality and Faster Deployment
How can you consistently deliver high-quality code that adheres to established coding guidelines and is free from errors?The solution lies in implementing tests and multiple checks for linting and type errors. This may seem straightforward, but it re...
Aug 10, 20238 min readgithub-actionsci-cdGitHubCrafting Superior APIs with Design Guidelines: Set Up For Success
Building APIs – especially public-facing ones – is hard. There are a lot of decisions to be made, starting with the API concept (GraphQL, REST, etc.) to be used, infrastructure, and much more. But having this is just the foundation of your API, and y...
Jul 20, 20237 min readWeb DevelopmentAPIsGeneral ProgrammingResolving High Disk Space Utilization in MongoDB
Problem We have recently received many alerts about high disk usage on MongoDB Atlas for the past two weeks. According to docs, Disk utilization % on Data Partition occurs if the percentage of time during which requests are being issued to any partit...
Jun 22, 20234 min readMongoDBbackenddebuggingSimple Steps to Include CDK Diffs in GitHub PRs
Hey, everyone! If you've been using AWS, chances are you've come across CDK and building cloud apps with it. As seamless as it is to deploy apps using CDK, it is equally important to monitor changes in infrastructure code and prevent issues. This gui...
Jun 6, 20236 min readAWSaws-cdkaws lambdaKeep parts of your GraphQL Introspection Query hidden
Once you have created your first schema and your GraphQL server is up and running, it makes sense to implement precautions to prevent it from being compromised by bad actors. In the context of Hashnode, our GraphQL API serves our website and blogs. T...
May 24, 202313 min readGraphQLTypeScriptApollo GraphQLHow Hashnode is using Rate Limits on Stellate
Rate Limits are a vital part of every API. Especially, since we operate quite a lot of public and unprotected APIs we need to rate limit them. Implementing Rate limits based on IP addresses is fairly easy, especially with Amazon API Gateway and Amazo...
May 10, 20236 min readGraphQLCloudSecurityCustom Metrics Made Easy: A Comprehensive Guide to SST and CloudWatch Integration
Monitoring and managing resources is an important part of making sure your serverless application is working as expected and troubleshooting when issues arise. Amazon Web Services (AWS) provides a wide range of services to monitor and track the perfo...
Apr 19, 20237 min readAWSaws-cdkserverlessstackFrom Chaos to Clarity: Understanding GraphQL Error Codes with Stellate, AWS Lambda, API Gateway, and Apollo
GraphQL handles error codes a bit differently compared to REST Apis. While we still get HTTP response codes like 200 OK 400 Bad Request 500 Server Error It often happens that an error happened even if we received a 200 status code. This blog pos...
Feb 21, 20239 min readAWSGraphQLApollo GraphQLIntroducing Amazon EventBridge: Building Serverless Event-Driven Architectures with AWS
This is part 3 of our series: How we build EDA at Hashnode on AWS. In part 2 we decided to use Amazon EventBridge as our main service to build the Event-Driven Architecture (EDA). Part 3 covers the basic functionality of EventBridge. What is EventBri...
Dec 14, 20225 min readAWSCloudDeveloperUsing Vercel edge functions to power Hashnode's OG images
Today, we started using @vercel/og to automatically make OG images for the home page and post pages of our blogs. We used to make these images with a tool from a third party, but it was very limited because: We had to make an extra API request to ge...
Oct 21, 20222 min readVercelNext.jsReactHow to Display Math Equations in React Native
One of the most fantastic features of Hashnode is that it allows you to display and highlight your content in various ways. One of my personal favorites is the support for Latex expressions. Why is that? Math expressions are an essential part of i...
Oct 18, 20225 min readrender-htmlMathJaxReact Native



















