A modern, cross-platform coffee roasting companion app built with .NET MAUI.
ROAST - BREW - SAVOR - REPEAT
CafeMaestro is a comprehensive tool designed for coffee enthusiasts and professional roasters to track, manage, and optimize their coffee roasting process. The application provides tools for managing bean inventory, timing roasts, recording roast data, and analyzing results.
- Bean Inventory Management: Track green coffee beans, including origin, variety, processing method, and remaining quantity.
- Roast Timer: Precision timer with digital display for accurate roast timing.
- Roast Logging: Record all aspects of each roast including temperature, batch weight, final weight, and calculated weight loss.
- First Crack Tracking: Mark the exact moment of first crack for development time analysis.
- Roast Level Analysis: Automatic classification of roast levels based on weight loss percentage.
- Custom Roast Levels: Define and customize your own roast levels based on weight loss percentages.
- Data Import/Export: Import and export bean and roast data via CSV for backup and analysis.
- Theme Support: Choose between light, dark, or system theme preferences.
- Custom Data Storage: Select where your data file is stored or use the default location.
- Cross-Platform: Built with .NET MAUI for Android and Windows (iOS/macOS supported by framework).
- .NET 10 SDK or higher
- MAUI workload:
dotnet workload install maui - One of the following IDEs:
- Visual Studio 2022 (17.13+) with the .NET MAUI workload
- Visual Studio Code with the .NET MAUI extension
- JetBrains Rider with .NET MAUI support
- For Android builds: Android SDK with API level 36
# Clone the repository
git clone https://github.com/sasler/CafeMaestro.git
cd CafeMaestro
# Restore dependencies
dotnet restore
# Build for Windows
dotnet build CafeMaestro\CafeMaestro.csproj -f net10.0-windows10.0.19041.0
# Build for Android
dotnet build CafeMaestro\CafeMaestro.csproj -f net10.0-androiddotnet test CafeMaestro.Tests\CafeMaestro.Tests.csprojCafeMaestro follows the MVVM pattern with constructor-based dependency injection, powered by CommunityToolkit.Mvvm.
CafeMaestro/
├── Models/ # Data models (BeanData, RoastData, RoastLevelData, AppData)
├── ViewModels/ # MVVM ViewModels using CommunityToolkit.Mvvm source generators
├── Services/ # Business logic services
│ └── Interfaces/ # Service contracts (IAppDataService, IBeanDataService, etc.)
├── Navigation/ # Centralized route constants
├── Resources/
│ ├── Styles/ # Theme resources (LightTheme.xaml, DarkTheme.xaml)
│ ├── Images/ # SVG icons (converted to PNG at build time)
│ └── Fonts/ # Custom fonts
├── Platforms/ # Platform-specific implementations
└── *.xaml / *.xaml.cs # Pages (thin code-behind, logic in ViewModels)
CafeMaestro.Tests/
├── ViewModels/ # ViewModel unit tests
├── ModelValidationTests.cs
├── CsvParserServiceTests.cs
└── NavigationServiceTests.cs
| Package | Version | Purpose |
|---|---|---|
| CommunityToolkit.Mvvm | 8.4.2 | MVVM source generators ([ObservableProperty], [RelayCommand]) |
| CommunityToolkit.Maui | 14.0.1 | MAUI community extensions |
| Microsoft.Maui.Controls | 10.0.41 | .NET MAUI framework |
| xUnit + Moq + FluentAssertions | latest | Testing |
All services are registered via DI in MauiProgram.cs using interface-based singletons:
| Service | Interface | Responsibility |
|---|---|---|
| AppDataService | IAppDataService | JSON data persistence, file management |
| BeanDataService | IBeanDataService | Bean CRUD operations, CSV import |
| RoastDataService | IRoastDataService | Roast CRUD, CSV import/export |
| RoastLevelService | IRoastLevelService | Roast level classification |
| TimerService | ITimerService | Roast timer with elapsed time events |
| PreferencesService | IPreferencesService | User preferences storage |
| NavigationService | INavigationService | Centralized Shell navigation |
| AlertService | IAlertService | ViewModel-driven dialog alerts |
| CsvParserService | ICsvParserService | Shared CSV file parsing |
Use the Beans section to add, edit, and track your green coffee beans. Record:
- Bean variety and origin
- Processing method
- Quantity in kilograms
- Purchase price and supplier links
- Cupping notes and characteristics
The Roast Coffee feature helps you:
- Select beans from your inventory
- Time your roast with the built-in digital timer
- Record roasting temperature
- Track batch and final weights
- Automatically calculate weight loss percentage
- Classify roast level based on weight loss
- Record the time of first crack during roasting
- View previous roast data for the selected bean type
The Roast Log section allows you to:
- View history of all recorded roasts
- Filter and search by bean type
- Edit or delete existing roast records
- Export roast data to CSV
Contributions are welcome! Please feel free to submit a Pull Request.
See .github/copilot-instructions.md for coding conventions and guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- .NET MAUI for the cross-platform framework
- CommunityToolkit.Mvvm for MVVM source generators
- Coffee roasters everywhere for inspiration