<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deep Dive on Nitin Kumar Singh</title><link>https://nitinksingh.com/categories/deep-dive/</link><description>Recent content in Deep Dive on Nitin Kumar Singh</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Nitin Kumar Singh. All rights reserved.</copyright><lastBuildDate>Fri, 03 Apr 2026 10:00:00 +0530</lastBuildDate><atom:link href="https://nitinksingh.com/categories/deep-dive/index.xml" rel="self" type="application/rss+xml"/><item><title>Why I Switched from npm to pnpm (And Why You Should Too)</title><link>https://nitinksingh.com/posts/why-i-switched-from-npm-to-pnpm-and-why-you-should-too/</link><pubDate>Fri, 03 Apr 2026 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/why-i-switched-from-npm-to-pnpm-and-why-you-should-too/</guid><description>&lt;p&gt;If you write JavaScript or TypeScript professionally, you&amp;rsquo;ve used npm. It ships with Node.js, it&amp;rsquo;s everywhere, and for years it was the only game in town. But after running npm on real-world projects — enterprise monorepos, Next.js apps, Angular dashboards, CI pipelines that bill by the minute — I can tell you: &lt;strong&gt;npm is holding you back&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Building Dictum — a macOS Dictation App with Tauri 2 (Rust + React) &amp; Azure OpenAI</title><link>https://nitinksingh.com/posts/building-dictum-a-macos-dictation-app-with-tauri-2-rust--react-azure-openai/</link><pubDate>Sat, 21 Mar 2026 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/building-dictum-a-macos-dictation-app-with-tauri-2-rust--react-azure-openai/</guid><description>&lt;p&gt;macOS has had built-in dictation since Monterey. It is fine — press and hold a key, speak, done. But it requires Apple&amp;rsquo;s servers (unless you download the enhanced on-device model), only works in some apps, and you have zero control over punctuation, formatting, or hotkeys.&lt;/p&gt;</description></item><item><title>Azure App Registration: A Complete Guide from Zero to Working App</title><link>https://nitinksingh.com/posts/azure-app-registration-a-complete-guide-from-zero-to-working-app/</link><pubDate>Sat, 10 Jan 2026 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/azure-app-registration-a-complete-guide-from-zero-to-working-app/</guid><description>&lt;p&gt;If you have ever tried to call the Microsoft Graph API, integrate with SharePoint, or add &amp;ldquo;Sign in with Microsoft&amp;rdquo; to an application, you hit the same wall: you need an App Registration. It is the first thing you do, and if you get it wrong, nothing else works.&lt;/p&gt;</description></item><item><title>Cloudflare Tunnel: Expose localhost for Webhooks and OAuth</title><link>https://nitinksingh.com/posts/cloudflare-tunnel-expose-localhost-for-webhooks-and-oauth/</link><pubDate>Sat, 03 Jan 2026 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/cloudflare-tunnel-expose-localhost-for-webhooks-and-oauth/</guid><description>&lt;p&gt;Every developer hits the same wall eventually. You are building a webhook integration, testing an OAuth flow that demands a public redirect URI, or trying to show a client a work-in-progress without deploying it. Your app is running fine on &lt;code&gt;localhost:5000&lt;/code&gt;, but the outside world cannot reach it.&lt;/p&gt;</description></item><item><title>Adding .NET Aspire to an Existing Clean Architecture Project</title><link>https://nitinksingh.com/posts/adding-.net-aspire-to-an-existing-clean-architecture-project/</link><pubDate>Sat, 20 Dec 2025 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/adding-.net-aspire-to-an-existing-clean-architecture-project/</guid><description>&lt;p&gt;The infrastructure overhead in microservices projects is real. Setting up databases, wiring service discovery, getting distributed tracing working, managing connection strings across environments—this work hits before you&amp;rsquo;ve written a line of business logic. On more than one project, I&amp;rsquo;ve watched the first sprint disappear into Docker Compose files and appsettings drift.&lt;/p&gt;</description></item><item><title>Building Production-Ready Microservices with .NET Aspire: A Complete E-Commerce Demo</title><link>https://nitinksingh.com/posts/building-production-ready-microservices-with-.net-aspire-a-complete-e-commerce-demo/</link><pubDate>Sat, 06 Dec 2025 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/building-production-ready-microservices-with-.net-aspire-a-complete-e-commerce-demo/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever built a microservices architecture, you know the pain points all too well: spending hours setting up PostgreSQL locally, wrestling with Redis configurations, debugging why RabbitMQ won&amp;rsquo;t connect, managing connection strings across multiple services, and let&amp;rsquo;s not even talk about implementing distributed tracing manually.&lt;/p&gt;</description></item><item><title>.NET Architecture at Scale: Visual Guide to Modern Design Patterns</title><link>https://nitinksingh.com/posts/.net-architecture-at-scale-visual-guide-to-modern-design-patterns/</link><pubDate>Sat, 05 Jul 2025 12:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/.net-architecture-at-scale-visual-guide-to-modern-design-patterns/</guid><description>&lt;h1 class="relative group"&gt;.NET Architecture at Scale: Visual Guide to Modern Design Patterns
 &lt;div id="net-architecture-at-scale-visual-guide-to-modern-design-patterns" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#net-architecture-at-scale-visual-guide-to-modern-design-patterns" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;⚡ Performance Note&lt;/strong&gt;: This article contains 16 comprehensive patterns with visual diagrams. For faster loading, consider bookmarking specific sections or using the &amp;ldquo;Find in Page&amp;rdquo; (Ctrl+F) feature to jump to relevant patterns.&lt;/p&gt;</description></item><item><title>Streamlining AI Development with LiteLLM Proxy: A Comprehensive Guide</title><link>https://nitinksingh.com/posts/streamlining-ai-development-with-litellm-proxy-a-comprehensive-guide/</link><pubDate>Sun, 25 May 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/streamlining-ai-development-with-litellm-proxy-a-comprehensive-guide/</guid><description>&lt;p&gt;In the rapidly evolving landscape of artificial intelligence, development teams face significant challenges when integrating multiple AI models into their workflows. The proliferation of different providers, APIs, and pricing models creates complexity that can slow down innovation and increase technical debt. This article explores a powerful solution: a Docker-based setup combining LiteLLM proxy with Open WebUI that streamlines AI development and provides substantial benefits for teams of all sizes.&lt;/p&gt;</description></item><item><title>Elevating Code Quality with Custom GitHub Copilot Instructions</title><link>https://nitinksingh.com/posts/elevating-code-quality-with-custom-github-copilot-instructions/</link><pubDate>Sat, 24 May 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/elevating-code-quality-with-custom-github-copilot-instructions/</guid><description>&lt;p&gt;In today&amp;rsquo;s fast-paced development landscape, AI coding assistants have become indispensable tools for developers seeking to maintain high-quality code while meeting demanding deadlines. GitHub Copilot stands at the forefront of this revolution, offering intelligent code suggestions that can significantly accelerate development. However, the true power of Copilot lies not just in its base capabilities, but in how effectively it can be customized to align with your specific project standards and best practices.&lt;/p&gt;</description></item><item><title>Building a Comprehensive RAG System: A Deep Dive Into Knowledge Architecture</title><link>https://nitinksingh.com/posts/building-a-comprehensive-rag-system-a-deep-dive-into-knowledge-architecture/</link><pubDate>Thu, 24 Apr 2025 10:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/building-a-comprehensive-rag-system-a-deep-dive-into-knowledge-architecture/</guid><description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; This guide walks you through building a production-ready RAG system using FastAPI, ChromaDB, MinIO, and OpenAI. Learn document chunking, vector embeddings, hybrid search, and real-world deployment strategies.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;As a .NET developer watching the AI landscape evolve, I found myself both excited and skeptical. When tools like Claude.ai and ChatGPT started offering out-of-the-box RAG solutions, I wanted to build my own system with full control over the implementation.&lt;/p&gt;</description></item><item><title>Stretch Tracker: Advanced Technical Architecture and Implementation</title><link>https://nitinksingh.com/posts/stretch-tracker-advanced-technical-architecture-and-implementation/</link><pubDate>Sun, 20 Apr 2025 08:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/stretch-tracker-advanced-technical-architecture-and-implementation/</guid><description>&lt;h1 class="relative group"&gt;Stretch Tracker : Advanced Technical Architecture and Implementation
 &lt;div id="stretch-tracker--advanced-technical-architecture-and-implementation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#stretch-tracker--advanced-technical-architecture-and-implementation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;The Birth of the Stretch Tracker: A Developer&amp;rsquo;s Story
 &lt;div id="the-birth-of-the-stretch-tracker-a-developers-story" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-birth-of-the-stretch-tracker-a-developers-story" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;As developers, we often find ourselves deeply immersed in our work, sitting for hours on end in front of our screens without even realizing how much time has passed. I was no different. During a particularly intensive project, I noticed the toll these long coding sessions were taking on my physical health - back pain, stiff neck, and decreased productivity became unwelcome companions in my daily routine.&lt;/p&gt;</description></item><item><title>Simplify Your Workflow: How to Build Custom Commands with the .NET CLI</title><link>https://nitinksingh.com/posts/simplify-your-workflow-how-to-build-custom-commands-with-the-.net-cli/</link><pubDate>Tue, 14 Jan 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/simplify-your-workflow-how-to-build-custom-commands-with-the-.net-cli/</guid><description>&lt;p&gt;In today’s fast-moving world of software development, being able to automate tasks and make your workflows smoother is super important. Many .NET developers already know how to make web apps, services, and libraries. But not everyone realizes that you can also use the .NET CLI (Command-Line Interface) to create custom tools that save time, simplify your work, and make repetitive tasks a breeze. These tools can help streamline your daily activities and provide powerful functionality for your team.&lt;/p&gt;</description></item><item><title>Deploying Ollama with Open WebUI Locally: A Step-by-Step Guide</title><link>https://nitinksingh.com/posts/deploying-ollama-with-open-webui-locally-a-step-by-step-guide/</link><pubDate>Sat, 11 Jan 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/deploying-ollama-with-open-webui-locally-a-step-by-step-guide/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Large Language Models (LLMs) have become a cornerstone of modern AI applications, from chatbots that provide customer support to content generation tools for images and videos. They power virtual assistants, automated translation systems, and personalized recommendation engines, showcasing their versatility across industries. However, running these models on a local machine has traditionally been a complex and resource-intensive task, requiring significant configuration and technical expertise. This complexity often deters beginners and even intermediate users who are eager to explore the capabilities of LLMs in a private, local environment.&lt;/p&gt;</description></item><item><title>Simplify Git Workflows Across Multiple Repositories with Git Submodules and Meta-Repositories</title><link>https://nitinksingh.com/posts/simplify-git-workflows-across-multiple-repositories-with-git-submodules-and-meta-repositories/</link><pubDate>Fri, 10 Jan 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/simplify-git-workflows-across-multiple-repositories-with-git-submodules-and-meta-repositories/</guid><description>&lt;h2 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In modern software development, projects often consist of multiple repositories working together seamlessly. For instance, microservices architectures rely on modularity, where each service has its own repository. While this independence is beneficial, managing numerous repositories as a single cohesive unit can be daunting. Enter the &lt;strong&gt;meta-repository&lt;/strong&gt;: a powerful tool that simplifies the management of multiple interdependent Git repositories, enabling streamlined workflows without sacrificing modularity.&lt;/p&gt;</description></item><item><title>Simplifying Database Queries with AI &amp; SQL Automation</title><link>https://nitinksingh.com/posts/simplifying-database-queries-with-ai-sql-automation/</link><pubDate>Mon, 06 Jan 2025 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/simplifying-database-queries-with-ai-sql-automation/</guid><description>&lt;h2 class="relative group"&gt;TL;DR
 &lt;div id="tldr" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tldr" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This article demonstrates how to build a REST API that converts natural language into SQL queries using multiple LLM providers (OpenAI, Azure OpenAI, Claude, and Gemini). The system dynamically selects the appropriate AI service based on configuration, executes the generated SQL against a database, and returns structured results. It includes a complete implementation with a service factory pattern, Docker setup, and example usage.&lt;/p&gt;</description></item><item><title>Efficient File Management on Azure Blob Storage: CRUD Operations and Upload Strategies</title><link>https://nitinksingh.com/posts/efficient-file-management-on-azure-blob-storage-crud-operations-and-upload-strategies/</link><pubDate>Sun, 29 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/efficient-file-management-on-azure-blob-storage-crud-operations-and-upload-strategies/</guid><description>&lt;h2 class="relative group"&gt;TL;DR
 &lt;div id="tldr" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tldr" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;This article provides a comprehensive guide to efficient file management with Azure Blob Storage using .NET and Angular. We cover four upload strategies:&lt;/p&gt;</description></item><item><title>Implementing SharePoint File CRUD Operations using Microsoft Graph API</title><link>https://nitinksingh.com/posts/implementing-sharepoint-file-crud-operations-using-microsoft-graph-api/</link><pubDate>Tue, 24 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/implementing-sharepoint-file-crud-operations-using-microsoft-graph-api/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Microsoft Graph API provides a unified endpoint for accessing Microsoft 365 services, including SharePoint. This article demonstrates how to implement create, read, update, and delete (CRUD) operations for files in SharePoint document libraries using Microsoft Graph API and .NET. You’ll learn how to authenticate to Microsoft Graph, navigate SharePoint site structure, and manage files programmatically.&lt;/p&gt;</description></item><item><title>Building an AI-Driven Chat Application with .NET, Azure OpenAI, and Angular</title><link>https://nitinksingh.com/posts/building-an-ai-driven-chat-application-with-.net-azure-openai-and-angular/</link><pubDate>Sat, 07 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/building-an-ai-driven-chat-application-with-.net-azure-openai-and-angular/</guid><description>&lt;h3 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Artificial Intelligence is transforming how we build applications, particularly in creating natural, conversational user experiences. This article guides you through building a full-stack AI chat application using .NET on the backend, Angular for the frontend, and Azure OpenAI for powerful language model capabilities, all connected through real-time SignalR communication.&lt;/p&gt;</description></item><item><title>Best Practices for Creating and Using DTOs in the API</title><link>https://nitinksingh.com/posts/best-practices-for-creating-and-using-dtos-in-the-api/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/best-practices-for-creating-and-using-dtos-in-the-api/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Data Transfer Objects (DTOs) play a critical role in Clean Architecture by separating your internal domain model from the data structures exposed to clients. They enhance security, performance, and maintainability by providing a controlled interface between your application&amp;rsquo;s core and external systems. This article explores best practices for designing and implementing DTOs in the Contact Management Application.&lt;/p&gt;</description></item><item><title>Clean Architecture: Introduction to the Project Structure</title><link>https://nitinksingh.com/posts/clean-architecture-introduction-to-the-project-structure/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/clean-architecture-introduction-to-the-project-structure/</guid><description>&lt;hr&gt;

&lt;h3 class="relative group"&gt;&lt;strong&gt;Overview&lt;/strong&gt;
 &lt;div id="overview" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#overview" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Clean Architecture is a powerful software design pattern that promotes a clear separation of concerns, making your application’s core business logic independent of external dependencies like databases, user interfaces, or frameworks. By following this architecture, systems become maintainable, testable, and adaptable, preparing them for both current demands and future growth.&lt;/p&gt;</description></item><item><title>Dependency Injection Setup Across Layers</title><link>https://nitinksingh.com/posts/dependency-injection-setup-across-layers/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/dependency-injection-setup-across-layers/</guid><description>&lt;h3 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Dependency Injection (DI) is a key design pattern in Clean Architecture that facilitates loose coupling between components. By injecting dependencies rather than hard-coding them, we create more maintainable, testable code where components can be easily swapped or mocked. This article explores how to implement DI across different architectural layers in the Contact Management Application.&lt;/p&gt;</description></item><item><title>Dockerizing the .NET Core API, Angular and MS SQL Server</title><link>https://nitinksingh.com/posts/dockerizing-the-.net-core-api-angular-and-ms-sql-server/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/dockerizing-the-.net-core-api-angular-and-ms-sql-server/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Docker has revolutionized application deployment by enabling consistent environments across development, testing, and production. In Clean Architecture, containerization aligns perfectly with the separation of concerns principle, allowing each layer to be independently developed and deployed. This article explores how to Dockerize the Contact Management Application&amp;rsquo;s .NET Core API and MS SQL Server database.&lt;/p&gt;</description></item><item><title>Error Handling and Exception Management in the API</title><link>https://nitinksingh.com/posts/error-handling-and-exception-management-in-the-api/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/error-handling-and-exception-management-in-the-api/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Effective error handling is critical for building robust APIs that can gracefully manage unexpected situations. In Clean Architecture, consistent error responses and proper exception management improve the user experience and simplify debugging. This article explores how the Contact Management Application implements centralized error handling through middleware, custom exceptions, and standardized API responses.&lt;/p&gt;</description></item><item><title>Handling Authorization and Role-Based Access Control (RBAC)</title><link>https://nitinksingh.com/posts/handling-authorization-and-role-based-access-control-rbac/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/handling-authorization-and-role-based-access-control-rbac/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Role-Based Access Control (RBAC) is a critical component of secure application design that restricts access to resources based on user roles and permissions. This article explores how the Contact Management Application implements a &lt;strong&gt;flexible and maintainable RBAC system&lt;/strong&gt; that covers both the &lt;strong&gt;backend API&lt;/strong&gt; and &lt;strong&gt;frontend Angular application&lt;/strong&gt;, integrating with JWT authentication to secure endpoints and UI elements while maintaining the separation of concerns that Clean Architecture demands.&lt;/p&gt;</description></item><item><title>Implementing Activity Logging with Custom Attributes</title><link>https://nitinksingh.com/posts/implementing-activity-logging-with-custom-attributes/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/implementing-activity-logging-with-custom-attributes/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Tracking user activities is crucial for security, auditing, and troubleshooting in any application. This article explores how to implement activity logging in the Contact Management Application using custom .NET attributes and action filters. This approach seamlessly integrates logging into the application without cluttering controllers or business logic with repetitive logging code.&lt;/p&gt;</description></item><item><title>Implementing AutoMapper for DTO Mapping with Audit Details</title><link>https://nitinksingh.com/posts/implementing-automapper-for-dto-mapping-with-audit-details/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/implementing-automapper-for-dto-mapping-with-audit-details/</guid><description>&lt;p&gt;AutoMapper is a powerful object-object mapper that simplifies the transformation between data models. In Clean Architecture, it plays a vital role in maintaining a clear separation of concerns between layers. By automating mapping and handling fields like &lt;strong&gt;CreatedBy&lt;/strong&gt;, &lt;strong&gt;CreatedOn&lt;/strong&gt;, &lt;strong&gt;UpdatedBy&lt;/strong&gt;, and &lt;strong&gt;UpdatedOn&lt;/strong&gt;, AutoMapper reduces boilerplate code and ensures consistency.&lt;/p&gt;</description></item><item><title>Seeding Initial Data Using Docker Compose and SQL Scripts</title><link>https://nitinksingh.com/posts/seeding-initial-data-using-docker-compose-and-sql-scripts/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/seeding-initial-data-using-docker-compose-and-sql-scripts/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;When setting up a new application, especially in development and testing environments, having a consistent and repeatable process for initializing your database with essential data is crucial. This article explores how the Contact Management Application uses Docker Compose and SQL scripts to automate the seeding process, ensuring that every instance of the application starts with the necessary baseline data.&lt;/p&gt;</description></item><item><title>Unit of Work Pattern and Its Role in Managing Transactions</title><link>https://nitinksingh.com/posts/unit-of-work-pattern-and-its-role-in-managing-transactions/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/unit-of-work-pattern-and-its-role-in-managing-transactions/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The Unit of Work pattern is a critical component in maintaining data consistency within applications that perform multiple database operations as part of a single logical transaction. In Clean Architecture, this pattern works alongside the Repository pattern to manage database transactions effectively, ensuring that changes are saved atomically and consistently. This article explores how the Unit of Work pattern is implemented in the Contact Management Application to coordinate related operations and maintain data integrity.&lt;/p&gt;</description></item><item><title>Using Dapper for Data Access and Repository Pattern</title><link>https://nitinksingh.com/posts/using-dapper-for-data-access-and-repository-pattern/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/using-dapper-for-data-access-and-repository-pattern/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In this article, we will explore how the &lt;strong&gt;Contact Management Application&lt;/strong&gt; integrates &lt;strong&gt;Dapper&lt;/strong&gt; for efficient data access. &lt;strong&gt;Dapper&lt;/strong&gt; is a micro-ORM (Object-Relational Mapper) that excels in performance by directly interacting with SQL. We will focus on how Dapper is utilized within the &lt;strong&gt;Repository Pattern&lt;/strong&gt; to ensure clean, maintainable, and efficient access to the database. Additionally, we will explore how &lt;strong&gt;Dapper&lt;/strong&gt; works in tandem with the &lt;strong&gt;Unit of Work&lt;/strong&gt; pattern to manage transactions.&lt;/p&gt;</description></item><item><title>Validating Inputs with FluentValidation</title><link>https://nitinksingh.com/posts/validating-inputs-with-fluentvalidation/</link><pubDate>Sun, 01 Dec 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/validating-inputs-with-fluentvalidation/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In this article, we will explore how to implement input validation in the Contact Management Application using FluentValidation. FluentValidation is a robust .NET library that facilitates the creation of flexible and extensible validation rules for your models. By integrating seamlessly with ASP.NET Core, it allows you to maintain clean separation between validation logic and business logic, adhering to the principles of Clean Architecture.&lt;/p&gt;</description></item><item><title>GitHub Codespaces: Streamlining Cloud-Based Development</title><link>https://nitinksingh.com/posts/github-codespaces-streamlining-cloud-based-development/</link><pubDate>Tue, 22 Oct 2024 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/github-codespaces-streamlining-cloud-based-development/</guid><description>&lt;p&gt;Say goodbye to &amp;ldquo;It works on my machine&amp;rdquo; problems forever! GitHub Codespaces provides ready-to-code development environments in the cloud that work exactly the same for everyone on your team. This guide walks through everything you need to know to get started, even if you&amp;rsquo;ve never used cloud-based development environments before.&lt;/p&gt;</description></item><item><title>Pushing Custom Images to Docker Hub Using GitHub Actions</title><link>https://nitinksingh.com/posts/pushing-custom-images-to-docker-hub-using-github-actions/</link><pubDate>Sat, 22 Jul 2023 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/pushing-custom-images-to-docker-hub-using-github-actions/</guid><description>&lt;h3 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Automating Docker image builds and deployments can significantly improve development workflows. This article demonstrates how to use GitHub Actions to automatically build and push Docker images to Docker Hub whenever changes are committed to your repository, saving time and ensuring consistent builds across your team.&lt;/p&gt;</description></item><item><title>Pushing Docker Image to Docker Hub</title><link>https://nitinksingh.com/posts/pushing-docker-image-to-docker-hub/</link><pubDate>Sat, 22 Jul 2023 09:00:00 +0530</pubDate><guid>https://nitinksingh.com/posts/pushing-docker-image-to-docker-hub/</guid><description>&lt;h3 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Docker Hub is a cloud-based repository service for container images, allowing developers to store, share, and manage their Docker images. This article provides a step-by-step guide to building Docker images and pushing them to Docker Hub, making your containerized applications accessible to your team or the wider community.&lt;/p&gt;</description></item></channel></rss>