Articles

TickerQ Email Scheduler Banner

.NET 5 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

Umbraco 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

Security 4 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

AI 5 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

AI 3 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

Security 3 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
PDF Generation in .NET.png

.NET 3 min read

PDF Generation in ASP.NET Core MVC using Puppeteer Sharp

Web applications often need to convert HTML into PDFs for invoices, tickets, certificates, and reports. Traditional libraries like iTextSharp and DinkToPdf struggle with modern CSS and JavaScript rendering, but Puppeteer Sharp uses headless Chromium for browser-accurate output. This guide walks through NuGet installation, generating PDFs from MVC views and external URLs, customizing paper size and margins, how the launch-navigate-capture pipeline works, and pre-downloading Chromium to avoid slow first requests.

Continue reading

DevOps 4 min read

Understanding Cron Expressions

Cron expressions are string patterns that tell systems exactly when to run automated tasks — from Unix cron jobs to Azure Functions, AWS Lambda, Google Cloud Scheduler, and CI/CD pipelines. This article explains what cron is versus a cron expression, breaks down the five standard fields (minute, hour, day of month, month, day of week), covers Quartz's seconds and year extensions, walks through special characters like *, /, -, ?, L, and #, and includes a practical reference table of common schedules with real-world examples.

Continue reading