In productionFinance

My Self

Finance management for sole proprietors and small companies: invoices, contracts, payments and bank details for several businesses in one app — with automatic payment reconciliation.

  • 220+commits
  • 94HTTP endpoints
  • 17UI pages
  • 14.NET projects
Overview

About the project

One user can run several organisations, invite colleagues with roles, keep counterparties and bank details, issue invoices — including recurring ones from contracts — and reconcile them with incoming payments.

Payments are imported from CSV or synced from Privat24 every hour, and the system matches them to invoices and updates statuses on its own. The product is built on .NET 10 following clean architecture and is deployed via GitHub Actions to a self-hosted server.

Features

What the system does

  • Multiple companies

    Create, switch and leave organisations; access is granted per company.

  • Roles & permissions

    Company-scoped roles with permissions like Invoices:Manage and email invites for colleagues.

  • Counterparties & bank details

    Sole proprietors and companies, IBAN/SWIFT details; bank data is masked without elevated rights.

  • Invoices & PDF

    8 lifecycle statuses, batch PDF export with templates for Ukraine and Canada.

  • Contracts & recurring invoices

    A monthly worker issues invoices from contracts without duplicates.

  • Payments & Privat24

    CSV import and hourly Privat24 sync with deduplication.

  • Automatic reconciliation

    Matches payments to invoices by counterparty, amount and date, with currency checks and status recalculation.

  • Dashboard

    Yearly overview, monthly trends, status distribution and totals per currency.

  • Passkeys

    WebAuthn / FIDO2 sign-in alongside password login, recovery and change.

Architecture

How it is built

  1. Clean architecture & CQRS

    Api, Application, Domain and Infrastructure layers plus Shared, Workers and Metadata modules; MediatR with ~94 handlers, specifications, domain events.

  2. Tenant data isolation

    A global EF Core filter by the company from the token, a save interceptor and a pipeline access check.

  3. Typed API client

    The OpenAPI document generates a TypeScript client via NSwag — frontend and backend contracts never drift.

  4. Real-time background jobs

    Per-company CRON jobs with live progress in the browser over SignalR.

  5. CI/CD

    GitHub Actions: build and tests with coverage, frontend type-check, images pushed to a private registry and deployed to a self-hosted runner with Docker Compose and Nginx.

Integrations

External services

  • Privat24Bank transactions synced into payments.
  • Microsoft GraphEmail: invites and password resets.
  • WebAuthn / FIDO2Passkey sign-in.
Technologies

Project stack

Backend

  • .NET 10
  • ASP.NET Core
  • MediatR
  • EF Core
  • ASP.NET Identity
  • SignalR
  • QuestPDF

Frontend

  • Vue 3
  • TypeScript
  • Quasar
  • Pinia
  • Vite
  • Highcharts

Data

  • SQL Server

Infrastructure

  • Docker Compose
  • Nginx
  • GitHub Actions

Have an idea or a project?

Open to collaboration on business systems, CRM and integrations. Drop me a line — let's talk.

vhnatovskyi@hotmail.com