Strapi Cron Running Multiple Times? Here’s How to Fix It 13th Apr, 2026 Table of contents 1. Problem: Cron runs multiple times in production 2. Solution: distributed locking 2.1. Where can we maintain a distributed lock 2.2. Choosing database-native locking 2.3. Implementation 2.3.1. MySQL 2.3.2. Postgres 2.3.3. Usage with Strapi cron 2.4. What happens at runtime 3. Practical considerations…
‘use client’ in Next.js: What It Does, What It Costs, and When to Use It body.content :not(pre):not(h1):not(h2):not(h3) code { color: #332F37; background: #f4eef0; } body.content h1 code, h2 code, h3 code { background: transparent !important; } 28th Mar, 2026 Featured in: React Digest #554, NextJSWeekly #125 Table of contents 1. Example code repositories for this post 1.1. Server…
Vercel vs Netlify vs Cloudflare: Serverless Cold Starts Compared 17th Jan, 2026 Featured in: JavaScript weekly #770, NextJSWeekly #114 Table of contents 1. Why cold start delays need to be measured 2. How I measured the cold-start delays 2.1. The Nextjs project that was benchmarked 2.2. Cold start detection mechanism 2.3. The script to measure cold start delays 2.4. Running the benchmarks 3.
Payload CMS vs Strapi : Choosing the Right Headless CMS 23rd Oct, 2025 Table of contents 1. Core difference 1.1. Developer-first framework vs Editor-friendly platform 1.2. Next.js-integrated backend vs standalone headless CMS 2. Comparing the content management features 2.1. Content versioning 2.2. Media uploads 2.3. Components / Group Fields 2.4. Dynamic Zone / Blocks Field 2.5. Live Preview 2.6.…
Think Cloudflare Always Speeds You Up? Not in India 15th Sep, 2025 Table of contents 1. The initial issue I observed 2. Initial experiments: measuring latency 2.1. Baseline - no CDN 2.2. Cloudflare Free plan 2.3. Cloudflare Pro plan 2.4. Cloudflare Pro plan with Argo routing 3. More checks: decoding Cloudflare routing 3.1. Cloudflare routing for other Indian ISPs 3.2. Routing for other sites on…
Vercel Hosting: When to Use It and Alternatives to Compare 1st Sep, 2025 Table of contents 1. Three core Vercel capabilities to know first 1.1. Understanding Vercel’s serverless model 1.2. How deployments work on Vercel 1.3. Vercel’s deep Next.js integration 2. Factors to consider 2.1. Hosting Cost 2.2 Cold start delays 2.3. Scalability during traffic spikes 2.4. Limits on long running tasks 2.
Headless CMS vs WordPress: Which Is Better & When to Use Each 15th Aug, 2025 Table of contents 1. Fundamental Difference 2. Factors to Consider 2.1 Website Flexibility 2.2. Leveraging Modern Standards and Tooling 2.3. Tech Skills and Resources 2.4. Time, Effort and Budget 2.5. Website Performance 2.6. SEO Compliance 2.7. CMS Setup Security 2.8. WYSIWYG Content Publishing 2.9. Plugin Ecosystem 3.
MCP with Postgres - Querying my data in plain English 2nd July, 2026 When coding, most of us have become comfortable using LLMs with our codebases to write features, fix bugs, understand logic flows, and examine code architecture. This has improved both our efficiency and the quality of our work. I have found that LLMs can offer similar benefits when working with data. For about a year, I have…
How I’m using Gen AI for my software development tasks 19th Apr, 2025 TL;DR - Take me to the first screencast. First things first - given how much my Gen AI usage has evolved in the last few months, I expect myself to feel embarrassed reading this post in a year or two from now. 😊 Beginning 2025, I decided to temporarily reduce my project workload to dive deeper into using Gen AI.
My experience with upgrading Strapi v4 to v5 11th Jan, 2025 Note 1: The above screencast is of an example Strapi project. The actual Strapi setup that we upgraded contains about a hundred collections with thousands of rows of data. If you are looking for Strapi v3 → v4 migration, please check out this post. 1. About our setup With the release of version 5, Strapi introduced some major changes:
How we built observability with Google Cloud services 30th Dec, 2024 A common approach to addressing a production issue is to try to reproduce it in a non-production environment. Once reproduced, the fix can be coded and tested in the non-production environment before applying to production. While this approach worked well for most of our issues, it left two vital gaps: There were always some…
Common NewRelic RUM queries for web performance optimization 16th Sep, 2024 Every time I have to sift through NewRelic RUM data when optimizing a website’s speed, I have to go through past notes, reports and messages. I want to use this blog post to collect the most common queries & other information I use as a starting point for RUM data analysis. Major NewRelic RUM tables and the data they…
Customizing the Strapi Admin panel 16th Jul, 2024 1. Introduction Strapi enables various kinds of changes to the Strapi Admin panel. Some changes like modifying the favicons or the default theme tone are straight forward. However, when it comes to overriding the behavior of the Strapi Admin panel out of the box, it requires complicated handling. This post details these steps (for Strapi v5 as well…
How we invalidate cache for resource-heavy & long-running requests 28th June, 2024 What problem did we encounter Before I detail our cache invalidation strategy, let’s look at the problem we had at hand: We cache some of our API responses on Redis (AWS Elasticache) These API responses are cached with a fixed TTL expiry duration (this expiry duration varies from one API to another depending…
How we prevented CDN bandwidth abuse & mitigated AWS billing spike 16th March, 2024 body.content pre code { white-space: pre-wrap; overflow-x: scroll; font-size: 14px; } A few weeks ago, at one of my clients, our AWS billing showed a 20% rise for the previous day as compared to the earlier days in the week. Having experienced a few AWS billing nightmares in the past, we actively watch for any…
How we setup our Strapi API test automation using Jest 23rd Feb, 2024 One early morning of July 2023, I received an SOS call from a colleague. Some of our Strapi based Rest APIs were serving our website users with data that should not be served to them. Say, users were seeing not only their own orders, but also other users' orders! I panicked. But, I was also puzzled.
Directus vs Strapi : Choosing the Right Headless CMS 7th Jul, 2025 Table of contents 1. Key difference in approach 1.1. Data engine vs. code-driven headless CMS 1.2. Dealing with the database 2. Comparing the features 2.1. Versioning the content changes made via the Admin UI 2.2. Draft and Publish mode for Content 2.3. File uploads 2.4. Single Sign-on 2.5. Dynamic Zones / M2A Relationships 2.
My experience with Gatsby v5 to Next v13 frontend migration 1st Jan, 2024 Our Gatsby based statically generated frontend had been serving us well in production for 3+ years. But, after living with some major content publishing pain-points (detailed below) for long, we decided to move to Next.js to permanently resolve them. Also, to remain future-ready, we moved to the Next.js App router instead of…
Headless Node.js CMS comparison by popularity 10th Oct, 2025 The most reliable way to identify the right CMS framework for your needs is to list your requirements in detail and then look for the CMS with features that match those requirements. But, often not all the requirements are clear at the outset. In such cases, a common approach is to resort to the wisdom of the crowd.
My experience with migrating Strapi v3 to v4 16th Aug, 2023 Update (Jan, 2025) : If you are looking for Strapi v4 ⇒ v5 upgrade, please check out this post. Because of the large number of breaking changes introduced with Strapi v4, upgrading a Strapi setup from v3 ⇒ v4 is tricky in general. It didn’t help that our Strapi v3 setup (in production since 2019) consisted of many collections with…
How we setup custom input validations for components in Strapi 6th July, 2023 Update [Feb, 2025] :The approach detailed in this blog post works for Strapi v4 (except for certain Strapi v4 versions due to this Strapi v4 bug) and v5. It does not work with Strapi v3. Note : If you are just interested in the code changes to make this customization happen, please check out this github repo.
Executing stress free Strapi version upgrades : My experiences & attempts 26th June, 2023 Note: This post is specifically about minor version upgrades with Strapi v4 (eg: 4.2 ⇒ 4.5) and not Strapi v3 - Strapi v4 upgrade. That's a different beast altogether. 😊 Upgrading the Strapi version for a setup is necessary not only to bring the latest Strapi features to it, but also to keep the setup secure…
How to integrate Elasticsearch with Strapi 22nd May, 2023 Update [18th Sep, 2023] : Based on the feedback received from the readers of this blog post, I have created a plugin for Strapi-Elasticsearch integration (here). Note: If you are just interested in the code changes to make this customization happen, please check out this github repo. 1. Goal The goal of this post is to provide the…
Mitigating serverless cold start delays : My experiments & observations 1st Mar, 2023 Additional Context : Serverless is a vast area. This post specifically evaluates if frequently pinging one or more Urls is a reliable approach to mitigate cold start delays for websites hosted on Node based serverless platforms like Vercel or Netlify. Update (Jan, 2026) : I have undertaken a thorough comparison…
Customizing the Strapi upload plugin 15th Dec, 2022 [Update : 15th Jul, 2024] If you are trying to customize the Strapi upload plugin for Strapi v4.15.1 or later (including Strapi v5), please also refer to this post. Note: To directly look at the code changes to make this customization work, please check out this github repo. 1. Goal My goal with this post is to describe how Strapi’s upload…
How we made Sentry work to swiftly identify production issues 30th June, 2022 body.content pre code { white-space: pre-wrap; overflow-x: scroll; font-size: 14px; } Why are some production issues as difficult to uncover as the camouflaging chameleons! Back in April 2022, one of my clients identified the need to check if our website code had issues in production that were not known to our team.
My experiences with customizing the Strapi CMS Last Updated : 26th Jan, 2023 (First published : 8th April, 2022) Update: The original post was written based on customizations performed on Strapi 3.6.6. We have, since then, upgraded to Strapi 4.x. I have updated the post to reflect the customizations for Strapi 4.x A CMS solution that is built in-house from the ground-up offers maximum flexibility.…
My Experiences with Optimizing CSS for React Frontends 3rd Feb, 2022 Haircut mishaps and CSS optimization - what do they have in common? Between the start of 2021 and now, I got opportunities to optimize CSS loading for three different React Server Side Rendered (SSR) websites. Each of these websites was delivering 500+ KBytes of CSS before their pages could render anything. And, in each of these…
Zero runtime CSS-in-JS : Is this where great DX meets top-notch Web Performance? 19th Nov, 2021 A few weeks ago, a client team asked for my inputs on the performance impact of the styled-components library. They were already using styled-components for one of their website frontends. But, as they were about to build a different frontend (for a different website), they wanted to evaluate if…