Invoicing Application
Invoice creation, clients, PDFs, email delivery, dashboard metrics, and AI queries came together in one prototype platform.

How the project is put together
6 layers / 5 directed links
100%
- 01Interface
Dashboard, clients, invoices, statuses, PDF actions, email flow, and AI query UI.
Angular 17 / PrimeNG / Tailwind / Dark mode - 02Application
Client and invoice screens coordinate API actions, status changes, exports, and dashboard metrics.
Angular services / ASP.NET controllers / DTOs - 03Services/API
Invoice, client, dashboard, auth, PDF, email, and AI assistant services.
.NET 9 / EF Core / QuestPDF / SendGrid / OpenAI - 04Data
Clients, invoices, statuses, totals, payments, and dashboard query data.
PostgreSQL / Npgsql / EF repositories - 05Auth/Permissions
Frontend auth guard and login exist; backend authorization needs hardening.
JWT / Route guard / Admin login - 06Runtime
Local Angular/API/Postgres development with deployment configuration still to be completed.
Angular CLI / .NET API / Swagger / Supabase expected
From broken workflow to operating system
Invoice work needed separate tools for clients, PDF output, email delivery, and status tracking.
Angular, .NET, PostgreSQL, SendGrid, and OpenAI support the core invoicing workflow, with hardening still pending.
The workflow constraint
The client needed a comprehensive invoicing tool that handles the full lifecycle — from creating invoices and managing clients to exporting PDFs, sending emails, and tracking payment status — with AI-powered querying for quick data access.
What changed
Decisions and trade-offs
.NET + Angular over full JavaScript stack
The project requirements included strong typing, enterprise patterns, and reliable PDF generation.
Decision: Chose .NET 7 for robust backend with C# type safety, and Angular for structured frontend architecture with TypeScript.
Trade-off: Higher complexity than a Node.js/React stack, but stronger typing guarantees and better fit for business logic patterns.
OpenAI for natural language invoice queries
Users wanted to query invoice data without learning SQL or complex filter UIs.
Decision: Integrated OpenAI to parse natural language questions and convert them to database queries against the invoice data.
Trade-off: Added API cost and latency for queries, but dramatically improved data accessibility for non-technical users.
Supabase PostgreSQL over self-hosted database
Needed managed PostgreSQL with connection pooling and easy setup.
Decision: Used Supabase for managed PostgreSQL with session pooler, reducing infrastructure management overhead.
Trade-off: Vendor dependency and free tier limits, but zero database administration and built-in connection pooling.
Constraints, architecture, and proof
ASP.NET Core 7 Web API (C#) with RESTful endpoints, Angular frontend with TypeScript and Tailwind CSS, Supabase PostgreSQL for data persistence, OpenAI API for natural language queries, SendGrid for transactional email, JWT for authentication.
Deployment, security, and maintenance
JWT authentication with admin login, input validation on all invoice fields, auto-calculated totals preventing manual errors, overdue detection runs automatically, SendGrid for reliable email delivery.