Background processing

Background processing projects.

Everything that has to happen outside the request/response cycle — translation, image moderation, video encoding, thumbnail generation, AI orchestration.

Azure Functions

Event- and queue-triggered.
Serverless.

Azure Functions handle the spiky, asynchronous work — translation requests, image moderation, video encoding. Each scales independently on demand and never touches the request/response path.

cleenTranslationGenericFunction

Queue trigger

Translation worker. A request lands in the is-translation-generic-function queue; the function picks it up, calls the translation service, caches the result, and logs the job run.

Azure Storage QueueAzure AI Translatorauto-scalecached resultsjob-run logged

cleenMediaSafetyCheck

Queue trigger

Auto-scans uploaded images for unsafe content via Azure AI Content Moderator. Flags or removes the media before it ever reaches an end user.

Azure Content Moderatoradult / racy detectionauto-actionno manual review

cleenMediaEncoder

Event Grid

Video transcoding pipeline. Event Grid fires when a video blob is uploaded; the function runs it through Azure Media Services and writes back streaming URLs.

Event GridMP4 / MOV / AVI / WMVadaptive bitratezero polling
Azure WebJobs

Continuous and scheduled.
Always on.

Azure WebJobs handle the steady-state workloads — bulk translation sweeps and continuous thumbnail generation. They run in the background without blocking the live API or burning through translation-vendor quotas.

cleenTranslationGenericService

WebJob · scheduled

Bulk and scheduled translation sweeps. Reuses the same translation service the Function uses, but operates on large batches across every supported language.

scheduledbulk batchesRedis + memory cacheno API impact

cleenImageProcessingImageThumbnailsService

WebJob · continuous

Continuously generates thumbnails and full-size variants for every image in blob storage. Output dimensions are configurable via app settings — no code changes needed.

continuousthumbnail + full-sizeconfigurable sizesAzure Blob
Shared libraries

Six C# class libraries.
Every project depends on them.

The cross-cutting code that the Functions and WebJobs all reference. AI/LLM abstraction, business services, data access, models, utilities, and the abstract base class that gives every background job free observability.

cleenLLM

AI / LLM abstraction

Vendor-agnostic AI layer. Routes prompts to OpenAI, Gemini, Cloudflare AI, RunPod, Together AI, or OpenRouter — and falls back to alternative models on failure.

6 providers3-step fallbacktoken countingprompt templatesDB-driven model registry

cleenServices

Business logic

The primary business-logic layer. Every external integration (Stripe, Twilio, Auth0, Azure Cognitive Services, AI vendors, news providers) sits behind a clean interface here.

translationmediapaymentsauthnotificationssearchassessmentsprojects

cleenDataLayer

Dapper repositories

Dapper-based repositories that talk to SQL Server stored procedures. Interface-driven so every repository is mockable in tests.

Dapperstored proceduresIXxxRepositoryDatabaseHelper

cleenDomain

Models & contracts

Pure model library. Hundreds of strongly-typed C# classes describing every piece of data that flows through the platform — no business logic, just contracts.

pure modelsLLM contractsobject detectionshared language

cleenCommon

Cross-cutting utilities

Lowest-level shared utilities. Unified cache manager (Redis + in-memory), Key Vault access via Azure Managed Identity, helpers, and prompt templates.

UnifiedCacheManagerdual Redis multiplexersAzure Key VaultManaged Identity

cleenWebAppBase

Service base class

One abstract base class — IsAppServiceBase<T> — that every Function and WebJob inherits from. Job-run tracking and exception handling come for free.

IsAppServiceBase<T>job-run trackingexception captureJobRunType enum
Test project

Automated regression coverage.

A test harness for specific features and projects. Can be wired into the CI/CD pipeline to run on every push so a regression never reaches a deployed environment.

cleenTest

CI/CD test runner

The automated test suite. Tests are added here for specific bugs or regressions we want to guard against. The project can be run locally or wired into the CI/CD pipeline as a pre-deployment gate.

CI/CDautomated testspre-deployment gate

Want a walk-through of the background services?

Book a 30-minute architecture review. We’ll trace the queues, the Functions, the WebJobs, and the shared library layer end to end.