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
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.
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.
How it is built
-
Clean architecture & CQRS
Api, Application, Domain and Infrastructure layers plus Shared, Workers and Metadata modules; MediatR with ~94 handlers, specifications, domain events.
-
Tenant data isolation
A global EF Core filter by the company from the token, a save interceptor and a pipeline access check.
-
Typed API client
The OpenAPI document generates a TypeScript client via NSwag — frontend and backend contracts never drift.
-
Real-time background jobs
Per-company CRON jobs with live progress in the browser over SignalR.
-
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.
External services
- Privat24Bank transactions synced into payments.
- Microsoft GraphEmail: invites and password resets.
- WebAuthn / FIDO2Passkey sign-in.
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.