Writing & notes

Crafting scalable .NET platforms with ASP.NET Core, Umbraco, Azure, and modern AI-native development workflows.

Pasang Tamang

Hi, I’m Pasang Tamang

I’m a Microsoft MVP and Umbraco & .NET specialist with ZAAKS! — 18+ years building API-driven systems from Bhaktapur, Nepal. I organize .NET Hub Kathmandu and publish on C# Corner.

ASP.NET Core Umbraco Azure Applied AI

Latest articles

Notes from building .NET and Umbraco solutions in production — architecture choices, Azure delivery, and how the web is changing with AI-assisted search. Each post is written to stand alone, with enough context to be useful whether you skim the intro or read the full piece.

ai-is-not-replacing-dotnet-full-stack-developers.png

.NET 6 min read

AI Is Not Replacing .NET or Full Stack Developers

Every few months, a new wave of headlines declares that AI is about to make software developers obsolete. For .NET and full stack developers in particular, the message can feel personal — after all, tools like GitHub Copilot, Cursor, and Claude can now write controllers, scaffold APIs, and generate entire React components in seconds. But a closer look at how software actually gets built shows a different story: AI is changing the job, not eliminating it.

Continue reading
TickerQ Email Scheduler Banner

.NET 6 min read

Building a Reliable Email Scheduler in ASP.NET Core MVC with TickerQ

Sending email on demand is easy; sending it reliably at a scheduled time with automatic retries, status tracking, and a clear audit trail is a different problem. This article builds a production-style Email Scheduler in ASP.NET Core MVC backed by TickerQ — a source-generated, EF Core-integrated job scheduler. You get future delivery, Pending/Sent/Failed status updates, configurable backoff retries, manual retry and cancel actions, and a real-time TickerQ dashboard, with the domain entity as the source of truth for what happened.

Continue reading
AngularJS to TypeScript Umbraco Banner

.NET 6 min read

From AngularJS Comfort to TypeScript Discipline: My Umbraco 13 → 17 Backoffice Learning Curve

Jumping from Umbraco v13 to v17 backoffice development is not just an upgrade — it is a complete mindset shift from AngularJS comfort to TypeScript discipline. Where v13 let you bolt together a manifest, controller, and HTML view with no build step, v17 expects Lit Web Components, strict extension manifests, Vite, and explicit event-driven state. This article compares the same rating property editor side by side, explains the painful mindset shifts, and what to budget when migrating custom App_Plugins that do not carry over automatically.

Continue reading
2fa passkey

.NET 6 min read

Two-Factor Authentication (2FA) and Passkey Authentication in ASP.NET Core

Modern web applications must protect user accounts from password theft, phishing, and credential-stuffing attacks. Two-factor authentication adds a second verification step beyond passwords, while passkeys offer passwordless login via FIDO2/WebAuthn public-key cryptography. This article explains why 2FA matters, how ASP.NET Core Identity supports email, SMS, and authenticator app TOTP flows, setting up recovery codes, comparing 2FA versus passkeys, implementing passkey registration and login with Fido2.AspNet, and security best practices for production authentication systems.

Continue reading
Claude Code Ollama

.NET 6 min read

Running Claude Code Locally for Free with Ollama

Claude Code has quickly become a popular AI coding assistant for generation, debugging, and architecture reasoning — but cloud subscriptions and token billing can add up fast. This guide shows how to run Claude Code locally with Ollama, pointing it at open models like Qwen3-Coder at 32B, 7B, or lightweight 3B tiers depending on your hardware. You'll install Claude Code and Ollama on macOS, Linux, or Windows, pull models, configure environment variables to redirect the API to localhost:11434, and understand the trade-offs between cost savings, privacy, and local model quality.

Continue reading

.NET 6 min read

Automating Image Captions and Alt Text in ASP.NET Core MVC with Gemini AI

Modern web apps rely heavily on images, but writing meaningful captions and alt text for every upload is tedious manual work. This article shows how to integrate Google's Gemini AI into ASP.NET Core MVC (.NET 10) to automatically analyze uploaded images and generate SEO-friendly captions and alt text in multiple languages. You'll build a GeminiService that sends base64 image data to the API, wire up upload and result views, register dependencies in Program.cs, and see how AI-generated descriptions improve accessibility scores and Google Image Search visibility.

Continue reading

.NET 6 min read

Storing Passwords Securely in ASP.NET Core

Passwords are the first line of defense in any application, yet storing them incorrectly can lead to devastating breaches. ASP.NET Core Identity handles the heavy lifting with PBKDF2 hashing, per-user salts, and the IdentityV3 format — but only if you use it correctly. This article covers how Identity stores passwords, why plain text and naive encryption fail, how salting and optional peppering work, configuring strength policies, preventing reuse, enforcing periodic changes, email confirmation, and HTTPS — with practical code examples throughout.

Continue reading