<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>David Essien — Blog</title><description>Technical articles on backend architecture, blockchain systems, and software engineering.</description><link>https://davidessien.dev/</link><language>en-us</language><item><title>Building Secure JWT Auth in NestJS: Argon2, Redis Blacklisting, and Token Rotation</title><link>https://davidessien.dev/blog/building-secure-jwt-auth-in-nestjs-argon2-redis-blacklisting-and-token-rotation-3gl9/</link><guid isPermaLink="true">https://davidessien.dev/blog/building-secure-jwt-auth-in-nestjs-argon2-redis-blacklisting-and-token-rotation-3gl9/</guid><description>Step beyond basic authentication tutorials and build a production-ready JWT flow in NestJS. This guide covers hashing with Argon2, managing token rotation, and implementing robust Redis blacklisting.</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Code Fingerprinting: Detecting Duplicate Submissions Without Losing Your Mind (or Your API Budget)</title><link>https://davidessien.dev/blog/code-fingerprinting-detecting-duplicate-submissions-without-losing-your-mind-or-your-api-budget-307i/</link><guid isPermaLink="true">https://davidessien.dev/blog/code-fingerprinting-detecting-duplicate-submissions-without-losing-your-mind-or-your-api-budget-307i/</guid><description>While building a review system for algorithmic problem solutions, I needed a way to detect duplicate code submissions to save on API costs. Here is how I implemented efficient code fingerprinting.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Handling Cold Starts in Serverless AI: Why Your First Request Fails (And How to Fix It)</title><link>https://davidessien.dev/blog/handling-cold-starts-in-serverless-ai-why-your-first-request-fails-and-how-to-fix-it-527m/</link><guid isPermaLink="true">https://davidessien.dev/blog/handling-cold-starts-in-serverless-ai-why-your-first-request-fails-and-how-to-fix-it-527m/</guid><description>A technical analysis of cold start behavior in serverless AI infrastructure and practical mitigation strategies.</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate></item><item><title>How I Eliminated 19,494 Duplicate MongoDB Records (And What I&apos;d Do Differently Today)</title><link>https://davidessien.dev/blog/how-i-eliminated-19494-duplicate-mongodb-records-and-what-id-do-differently-today/</link><guid isPermaLink="true">https://davidessien.dev/blog/how-i-eliminated-19494-duplicate-mongodb-records-and-what-id-do-differently-today/</guid><description>One job listing. 19,495 MongoDB records. Here&apos;s how I found it, fixed it without downtime, and what a better migration looks like with hindsight.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>How to Authenticate Users with Solana Wallets in NestJS</title><link>https://davidessien.dev/blog/how-to-authenticate-users-with-solana-wallets-in-nestjs-46gd/</link><guid isPermaLink="true">https://davidessien.dev/blog/how-to-authenticate-users-with-solana-wallets-in-nestjs-46gd/</guid><description>A comprehensive guide on implementing wallet-based authentication using Sign-In with Solana (SIWS) in a NestJS backend, including securely managing nonces in Redis to prevent replay attacks.</description><pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Why I Move AI Model Calls to the Server — Security, Performance, and Everything In Between</title><link>https://davidessien.dev/blog/why-i-move-ai-model-calls-to-the-server-security-performance-and-everything-in-between-2dnh/</link><guid isPermaLink="true">https://davidessien.dev/blog/why-i-move-ai-model-calls-to-the-server-security-performance-and-everything-in-between-2dnh/</guid><description>When building an AI tool that reviews algorithmic code solutions, I quickly realized that making model calls directly from the client was a bad idea. This article breaks down why moving these calls to the server improves security, performance, and architecture.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item></channel></rss>