$ show TheAxelander/OpenBudgeteer
OpenBudgeteer is a personal budgeting application built with .NET 9.0 featuring a Blazor WebAssembly frontend and ASP.NET Core Web API backend. It implements the bucket budgeting methodology, allowing users to manage financial accounts, transactions, budget categories (buckets), automated transaction rules, recurring transactions, and financial reporting. The application supports multiple database providers (MySQL, PostgreSQL) and uses Redis for session storage and application settings. The architecture follows a layered approach with distinct data, service, presentation, and API layers. The data layer uses Entity Framework Core with a repository pattern for data access. The service layer provides business logic through generic and EF Core-specific services. The presentation layer employs the MVVM pattern with Blazor components and ViewModels handling UI state and logic. The API layer exposes RESTful endpoints for the frontend to interact with the backend. Key reusable components include a generic repository pattern, a generic service pattern, a ViewModel base class for Blazor, a fluent CSV bank transaction mapper, and a MudBlazor theme persistence service. These components demonstrate craftsmanship in abstraction and separation of concerns, making them suitable for extraction and reuse in other projects. The application is actively maintained with recent updates to .NET 9.0, MudBlazor, and ApexCharts, indicating low technical drift.
The LLM identified 5 files worth highlighting for reuse:
Defines a generic repository interface with CRUD operations (Get, Add, Update, Delete, etc.) that is implemented by concrete repositories for each entity. This pattern abstracts data access and allows for easy substitution of data sources or testing with mocks.
Provides a base implementation for business logic services, handling common operations (like Get, Add, Update, Delete) with exception handling and logging. Services for specific entities can inherit from this base, promoting code reuse and consistency.
Abstract base class for ViewModels in the Blazor application, providing common functionality such as cloning, converting to DTO, and handling reload events. This promotes separation of concerns and reusable UI logic.
Implements a fluent interface for mapping CSV columns to domain objects (BankTransaction), supporting configurable delimiters, text qualifiers, date/number formats, and handling of import profiles. This component encapsulates the complexity of CSV parsing and can be reused in other data import scenarios.
Manages the Blazor application's theme (MudBlazor) with persistence to Redis (or other storage) and fallback to defaults. This service allows for user-customizable themes that persist across sessions, demonstrating a reusable pattern for UI state management.