A borrower- and lender-facing lending workspace on Azure: ASP.NET Core services, Angular, automated KYC and document intake, credit bureau and bank-feed integrations, and controlled AI assistance for matching and underwriting support.
Client
United States fintech (private credit and marketplace lending, not named)
Location
United States
Platform
Azure SaaS (.NET 8 APIs and workers, Angular SPA, Azure SQL, Blob Storage, private AI endpoints)
Engagement Model
Dedicated Team
Team Size
6 specialists
Duration
11 months
The Customer is a United States fintech building a private credit marketplace: business borrowers, institutional and non-bank lenders, and internal operations staff all need a single system for discovery, applications, underwriting packets, and post-close servicing signals. The product vision emphasized transparent sourcing, repeatable risk signals, and faster cycle times than spreadsheet-led workflows - without sacrificing the audit trail regulators and partners expect in lending-adjacent categories.
The leadership team had a crisp market thesis but engineering risk in every direction. Underwriting depended on fragmented email, shared drives, and ad hoc exports. Each new lender partner implied another half-custom spreadsheet for eligibility and covenants. Borrowers abandoned flows when document requests repeated or when status updates went silent for days.
They needed a cloud-native platform that could grow from a focused MVP - private loans to SMBs in a handful of verticals - toward broader marketplace liquidity. That meant strong tenant and partner boundaries, predictable cost on Azure, and a credible story for SOC-minded counterparties - all while shipping visible value every sprint, not a multi-year big bang.
case_id) so audit views stayed coherent.Softellar delivered a modular lending workspace on Azure. A set of stateless .NET ASP.NET Core APIs owns commands for applications, stipulations, and decisions, while read models and reporting projections stay query-friendly in Azure SQL. A companion worker host polls and webhooks external systems so user-facing paths stay fast. The borrower and lender experience is a typed Angular SPA with route-level guards aligned to Entra ID groups.

Applications progress through explicit stages with immutable event rows for compliance review. Uploaded files land in Azure Blob Storage with virus scanning and content-type checks before extraction jobs run. Azure AI Document Intelligence populates normalized tables for financial line items and identity fields; analysts see side-by-side PDF and parsed fields, with corrections feeding back into training priorities without overwriting originals.
Risk scoring combines bureau attributes, cash-flow signals from bank aggregation partners, and lender-specific policy tables versioned per cohort. Scores and reasons travel as structured DTOs so the Angular UI can render plain-language explanations without exposing restricted attributes.

Internal users work from a queue that respects assignment rules and blackout windows for partner SLAs. Partner lenders receive scoped portals: only cases they sponsor, with document bundles watermarked for their channel. Entra ID enterprise applications isolate each partner app registration so credential leakage does not cross tenants.


Borrower assist features suggest plausible product fits based on non-sensitive profile fields and disclosed use of funds, always labeled as guidance. Lender assist summarizes long threads and highlights missing stipulations, but any recommended term change routes through policy tables and human approval. The .NET gateway calls Azure OpenAI inside the Customer's tenant with private endpoints; prompts exclude full document bodies and use hashed identifiers for correlation.

Synchronous loan submission paths never block on model latency. When assistive text is requested, Angular calls a dedicated read endpoint that either returns a cached, versioned summary or enqueues a short-lived job. The gateway enforces maximum tokens, schema validation for responses, and circuit breakers; failures degrade to static help content and log a structured "AI unavailable" event for support.
TypeScript types generated from OpenAPI contracts keep the SPA and APIs aligned across releases, reducing drift when underwriting rules change weekly during pilot programs.
Encryption in transit and at rest is default across SQL, Blob, and Key Vault. Row-level filters in the database enforce partner scope for shared tables. Break-glass access for engineers is time-boxed, logged, and requires dual control in production. Penetration findings from the Customer's third-party assessor were triaged into the same sprint board as product work so fixes shipped with traceability.
Platform subscription and document bundle fees use a payment provider integration behind a thin .NET façade with idempotent webhooks, reconciliation exports for finance, and explicit mapping to Entra ID organizations for invoicing - a pattern the Customer can extend to borrower-paid services later without rewriting core ledgers.
Delivery moved in four deliberate phases:
Outcomes vary with lender mix and geography, but the Customer reported faster cycle times on cleared applications, fewer rework loops on document packages, and calmer audits because decisions linked cleanly to evidence objects and integration logs.
.NET 8, C#, ASP.NET Core, Entity Framework Core, Angular, TypeScript, Azure App Service, Azure SQL, Azure Blob Storage, Azure Key Vault, Entra ID, Azure OpenAI, Azure AI Document Intelligence, Application Insights, OpenTelemetry, GitHub Actions, xUnit.
For teams with similar goals, our cloud architecture and enterprise application design practices align regulated product ambitions with engineering reality on Azure.
From origination workflows to document-heavy underwriting - we help fintech teams build .NET backends and rich frontends with clear data boundaries and AI that stays on policy.
Industries:
Technologies:
Industries:
Technologies:
Industries:
Technologies: