Blog

Notes on running Hangfire in production

Practical write-ups on the gaps agencies and .NET teams actually run into once Hangfire is handling real client work.

Keeping PII out of exception messages before they ever leave your app

Job payloads are opt-in by design, but exception messages are sent as-is by default. How to redact or drop sensitive exception content with the OnBeforeSend hook.

Read the article →

Why QueueHawk is developed and hosted entirely in Switzerland

Not a generic EU region of a foreign cloud: what running on Swiss infrastructure actually changes for data protection, and why it matters.

Read the article →

Team vs. Agency plan: how many applications do you actually need?

Team covers up to 10 applications, Agency up to 500. A practical guide to which one an agency actually needs, and the point where switching pays off.

Read the article →

Onboarding a new client project onto Hangfire monitoring in under 10 minutes

The exact steps to add a new client project to QueueHawk: create the application, install the agent, verify events are arriving, set alerts.

Read the article →

Per-application vs. per-job pricing for Hangfire monitoring: what it actually costs

Some monitoring tools charge per monitored job, QueueHawk charges per application. The actual math for both, plus a calculator for your own setup.

Read the article →

Why your Hangfire job history disappears after every deploy

It's not a misconfiguration — it's how the built-in dashboard and storage retention were designed to work. Here's what actually happens, and how to keep history around anyway.

Read the article →

Monitoring Hangfire across multiple client apps without ten browser tabs

Running Hangfire for a dozen client projects means a dozen dashboards to remember to check. What that actually costs, and what a single cross-app view looks like instead.

Read the article →

Getting Slack, Teams, or email alerts when a Hangfire job fails or goes silent

The stock dashboard never pushes anything to you. Two alert rules — error rate and heartbeat timeout — cover the two ways a background job pipeline actually breaks.

Read the article →

How to create a Slack incoming webhook

A two-minute walkthrough of creating a Slack app, turning on Incoming Webhooks, and getting a URL you can post to from curl, a script, or any monitoring tool.

Read the article →

How to create a Microsoft Teams webhook

Microsoft retired classic Connectors. Here's how to get a webhook URL through the Workflows app instead, and why the old MessageCard payload format still works.

Read the article →

How to keep Hangfire job history longer than 24 hours

Hangfire deletes succeeded jobs after ~24h and never auto-expires failed ones — both are painful. Here's why retention works the way it does, and how to keep a real, searchable history of every job that ever ran.

Read the article →

Hangfire jobs stuck as Enqueued — how to detect a queue backlog

Jobs stuck as Enqueued almost always means an operational problem — worker crash, pool saturation, assembly mismatch. Here's how to spot the backlog before anyone files a ticket.

Read the article →

Exposing the Hangfire dashboard in production (without opening it to the internet)

The Hangfire dashboard is wide-open by default and the authorization story has changed twice. Here's what actually works in 2026 for letting the right people see job state — safely.

Read the article →