// CASE STUDY

Notitia — Observability & Reporting

An internal observability and PDF reporting platform that replaced ad-hoc spreadsheets with structured, automated reports.

  • C#
  • .NET 8
  • ASP.NET Core
  • PostgreSQL
  • Dapper
  • QuestPDF
  • SMTP
  • Background Workers

// THE PROBLEM

The problem

Operations teams were manually compiling periodic reports from multiple data sources. The process was slow, error-prone, and produced inconsistently formatted outputs that were hard to audit.

// APPROACH & KEY DECISIONS

Approach & key decisions

  1. Designed a report-definition schema allowing non-engineers to configure data sources, transformations, and layouts via a simple configuration format.

  2. Built a scheduled report runner (C# background service) that queries PostgreSQL, applies computed metrics, and renders PDFs via QuestPDF.

  3. Implemented a delivery pipeline supporting email and in-app delivery with delivery-receipt tracking.

  4. Added a live dashboard view for key metrics using server-sent events for near-real-time updates.

// ARCHITECTURE

System architecture

Dashboard (Reac…ASP.NET Core APIPostgreSQLReport RunnerQuestPDFSMTP Delivery
Dashboard (React)ASP.NET Core APIPostgreSQLReport RunnerQuestPDFSMTP Delivery

// STACK

Technology stack

Core

  • C#
  • .NET 8
  • ASP.NET Core

Data

  • PostgreSQL
  • Dapper

Reporting

  • QuestPDF

Delivery

  • SMTP
  • Background Workers

// METRICS

Key metrics

  • Report templatessample
  • Reports generated/monthsample
  • Time saved vs manualsample

// GET IN TOUCH

Have a similar problem?

If your system needs the same kind of thinking — architecture, integrations, scale — I'd like to hear about it.

Open a ticket →
Enter the world