Skip to content

Repository files navigation

Disa

A workspace-based analysis tool for economists and accountants. You build persistent, shared workspaces filled with live analysis objects — tables, charts, KPI cards, forecasts — and drive them through a chat command interface backed by AI agents.

.NET Blazor C# License

Note on this repository. Disa is a sanitized public copy of a private production project, shared as a reference for what a modern .NET 10 + Blazor + AI-agent application looks like in practice. Credentials, customer data, real accounting records, and infrastructure details have been removed or replaced with placeholders. The code is meant for reading and learning, not for running unchanged.


What it does

The idea is to keep analysis alive after the conversation ends. Instead of throwaway chat answers, every result becomes an object that lives in a workspace and refreshes as the underlying data changes.

Four ideas hold the design together:

  • Workspaces are persistent. Results outlive the chat that created them.
  • Objects are live. A clock ticks, a weather card updates, a KPI recalculates when new data lands.
  • Chat is a command layer, not the product. It orchestrates system state rather than being where answers go to die.
  • Collaboration is built in. Workspaces are shared and iterated on by teams.

Each tenant gets its own SQLite database, so there is no shared-table cross-tenant access.

Disa workspace

Tech stack

Layer Technology
UI Blazor Server with Telerik UI for Blazor
Real-time SignalR (chat streaming, live objects)
API ASP.NET Core Minimal APIs
AI agents Microsoft Agent Framework (MAF)
Intent classification Azure.AI.OpenAI
Data SQLite, one database per tenant
Identity ASP.NET Core Identity with WebAuthn / passkeys + JWT
Observability OpenTelemetry with .NET Aspire dashboard
Runtime .NET 10, C# 13

AI agents

Automation runs through Microsoft Agent Framework agents, each scoped to a domain:

  • Analysis — builds tables, charts, and KPI objects from tenant data, plus forecasting.
  • Fortnox — reads SIE4 accounting exports and payroll data into workspace objects.
  • PublicData — pulls Swedish open data (SCB, Riksbank, SMHI, Trafikverket, Lantmäteriet).
  • Comms — email and messaging notifications.
  • Files — document upload, OCR, and extraction.
  • Utility — clocks, weather, currency, and other live widgets.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                        User browser                          │
└────────────────────────┬────────────────────────────────────┘
                         │ HTTPS
                         ▼
┌─────────────────────────────────────────────────────────────┐
│              Blazor Server (Web)                             │
│  • Real-time UI over SignalR                                 │
│  • Dock-based workspace layout, live objects                 │
│  • Chat as command interface, dark/light theming             │
└────────────────────────┬────────────────────────────────────┘
                         │ HTTP + JWT bearer token
                         ▼
┌─────────────────────────────────────────────────────────────┐
│           ASP.NET Core API (Minimal APIs)                    │
│  • JWT auth, tenant context middleware                       │
│  • Intent classification, OpenTelemetry instrumentation      │
└────────────────────────┬────────────────────────────────────┘
                         │
         ┌───────────────┼───────────────┐
         ▼               ▼               ▼
┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│   Master    │  │   Tenant    │  │     MAF     │
│  database   │  │  databases  │  │   agents    │
│  (disa.db)  │  │ (per-tenant)│  │             │
└─────────────┘  └─────────────┘  └─────────────┘

Project structure

src/
  Agents/      MAF agents and plugins (Analysis, Comms, Files, Fortnox, PublicData, Utility)
  Api/         Minimal API endpoints
  AppHost/     .NET Aspire orchestration
  Core/        Domain logic, tenancy, identity, workspaces, data access
  Web/         Blazor Server UI
tests/         Unit, integration, and Playwright E2E tests

Getting started

Prerequisites

Build

The Telerik package source in NuGet.Config reads credentials from environment variables. Set them before restoring:

export TELERIK_USERNAME="your-telerik-account-email"
export TELERIK_PASSWORD="your-telerik-account-password"

dotnet restore
dotnet build

You will also need a Telerik license key. See the Telerik licensing docs for how to provide telerik-license.txt locally (it is git-ignored).

Configuration

API keys and secrets live in appsettings*.json and ship empty. Fill in what you need for the features you want to try — Azure OpenAI, Firebase web push, public-data API keys, and so on. Local overrides belong in appsettings.local.json or environment variables, both of which are git-ignored.

Run

dotnet run --project src/AppHost

Databases are created at startup from EF Core migrations and seed data, so there is nothing to import. The seed data is synthetic.

Testing

dotnet test                     # unit + integration tests
dotnet test tests/UI/UI.csproj  # Playwright E2E tests

Some end-to-end tests reference demo documents and accounting fixtures that were removed during sanitization, so they will not all pass on a clean clone.

License

MIT © 2026 Johan Olofsson

About

Workspace-based analysis tool for economists & accountants — persistent, collaborative workspaces with live, AI-agent-driven objects via a chat-command interface. .NET 10, Blazor Server, Microsoft Agent Framework.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages