Work that reaches developers where they search

Implementation-first tutorials published on the platforms developers and AI tools trust; built from real developer workflows, not feature checklists.

Bylined work

Every piece below is published under my name. Each one was built from a real implementation: I used the tool, found the friction points, and wrote from there.

How to Build a Custom PDF Text Extractor with Node.js and TypeScript preview
FreeCodeCampRanking #1 on Google • Appears in AI search results

How to Build a Custom PDF Text Extractor with Node.js and TypeScript

Most tutorials on PDF text extraction point you to a library and show you the happy path. This one starts from a different problem: what do you do when none of the available libraries fit your use case and you have to build your own? Written because the solution didn't exist in a form I found satisfying. Currently ranks #1 on Google for its target keyword.

View article
How to Add API Key Authentication to a Next.js Route Using Zuplo preview
HackerNoonCovers a use case Zuplo's audience is actively searching for. Built from real developer questions in relevant Reddit threads.

How to Add API Key Authentication to a Next.js Route Using Zuplo

Built after researching Reddit threads where Next.js developers were asking how to add API key auth to their routes securely. The official docs covered the concept but not the specific implementation pattern developers were looking for. This tutorial fills that gap — showing the exact implementation with trade-offs explained.

View article
How to modernize a Node.js backend without a full rewrite preview
DEVPublished on DEV • Reached the right audience with a non-feature-focused angle

How to modernize a Node.js backend without a full rewrite

Many Node.js backends need modernization but a full rewrite isn't feasible. This tutorial shows how to incrementally modernize a backend by building around the existing codebase, using a real implementation example. Written to reach developers who know their backend needs work but aren't sure how to approach it without starting from scratch.

View article
How to Integrate RTK Query with Redux Toolkit preview
FreeCodeCampPublished on FreeCodeCamp

How to Integrate RTK Query with Redux Toolkit

A practical implementation guide for developers working with Redux who need to add data fetching without managing it manually. Written to show the integration in a real workflow context, not just the API surface.

View article
Handling Forms in Next.js Using Server Actions and Zod preview
FreeCodeCampPublished on FreeCodeCamp

Handling Forms in Next.js Using Server Actions and Zod

Written to document a specific implementation pattern I kept returning to in my own projects. Covers the full flow — form handling, validation with Zod, and server-side processing — with the edge cases that the official docs gloss over.

View article
Optimizing a Headless CMS-Powered Next.js App preview
BCMS BlogClient work — BCMS

Optimizing a Headless CMS-Powered Next.js App

A tutorial showing developers concrete optimization strategies for Next.js applications using a headless CMS, with BCMS as the implementation example. Covers performance patterns that apply broadly while positioning BCMS as the tool in use.

View article
API-First CMS: A Beginner's Guide preview
BCMS BlogClient work — BCMS

API-First CMS: A Beginner's Guide

A top-of-funnel article for developers who encounter the term 'API-first CMS' without a clear understanding of what it means. Educates the reader while building awareness of BCMS as a concrete example of the category.

View article
CIAM vs IAM: What's the Difference? preview
Permify BlogClient work — Permify

CIAM vs IAM: What's the Difference?

Written for developers and technical decision-makers evaluating identity and access management solutions. Explains the distinction between customer identity management and traditional IAM clearly enough that a reader can make an informed evaluation decision.

View article

Want to see what this looks like for your product?

Every piece in this portfolio started the same way: a real developer problem, a working implementation, and content published where developers search for answers.

If you want content that reaches developers before they've chosen a competitor, the fit call is where we start.