Skip to content
All case studies

Reporting · Workflow

Enterprise Report Center Platform

Centralized reporting hub consolidating fragmented exports into a governed, searchable platform.

C#.NET CoreASP.NET Core Web APIAngularSQL ServerBackground jobs

Problem

Business users were generating reports from many disconnected internal tools, each with its own format, access model, and history. There was no consistent way to schedule, share, or audit those reports.

Business context

An enterprise life-sciences organization where regulated workflows demand traceability and consistent formatting across hundreds of report variations and dozens of downstream teams.

My role

Senior full-stack engineer responsible for API design, background job orchestration, Angular UI for report search and management, and stakeholder communication with reporting owners.

Solution

  • Designed a report registry where each report definition owns its parameters, schedule, retention, and access list.
  • Built a queued generation pipeline so heavy SQL/PowerPoint/Excel work runs out-of-band without blocking the UI.
  • Added a searchable Angular UI for users to find, preview, and re-run their reports.
  • Wired role-based access on top of the existing OIDC identity provider.

Architecture highlights

  • ASP.NET Core Web API as the orchestration layer, with EF Core for metadata.
  • Background workers consume a durable job queue with retry-safe processing.
  • Generated artifacts stored in object storage; metadata + audit trail in SQL Server.
  • Angular SPA consumes the API with feature-flagged rollout per business unit.

Challenges

  • Legacy reports had inconsistent parameter shapes; needed a normalization layer without breaking existing schedules.
  • Large generations occasionally timed out; required idempotent retries and progress visibility.
  • Multiple teams owned different report families with different SLAs.

Outcome / impact

  • Reduced manual effort for recurring reports.
  • Improved traceability of who ran what, when, and with which parameters.
  • Enabled faster reporting turnaround by moving heavy work off the request thread.

What I learned

  • A small, well-named metadata model is worth more than a clever generic engine.
  • Treat report generation as a long-running job from day one — not as a synchronous API call.