A music catalog application built with .NET 10 and Blazor WebAssembly that allows users to upload, organize, and browse their music collection with automatic metadata extraction.
Horscht is a cloud-native music cataloging system that enables users to:
- Upload music files through a modern web interface
- Automatically extract metadata (artist, title) from audio files
- Store and organize music files in the cloud
- Browse their music library with an intuitive interface
- Secure access through Azure AD authentication
The application follows a clean layered architecture:
- Horscht.Web - Blazor WebAssembly client application
- Horscht.Api - REST API serving as Backend for Frontend (BFF)
- Horscht.App - Reusable Razor components for UI
- Horscht.Logic - Business logic and service implementations
- Horscht.Contracts - Shared interfaces and DTOs
- Horscht.Importer - Background service for processing uploaded files
For authentication setup, see AUTHENTICATION.md.
- .NET 10 - Modern .NET framework
- Blazor WebAssembly - Client-side web framework
- .NET Aspire - Local development orchestration (see ASPIRE.md)
- Azure Storage - Blob storage for files, Table storage for catalog, Queue storage for messaging
- Azure AD - Authentication and authorization
- Azure OpenAI - AI capabilities for the importer service
- Azure Container Apps - Cloud hosting for background services
- ATL Library - Audio metadata extraction
- .NET 10 SDK
- Azure subscription (for cloud deployment)
- Visual Studio 2022 (with .NET Aspire workload) or VS Code
- Docker Desktop (for local development with Aspire)
For local development, the application uses .NET Aspire to run all services together with Azurite (Azure Storage emulator):
- Ensure Docker Desktop is running
- Set
Horscht.AppHostas the startup project in Visual Studio - Press F5 to run
See ASPIRE.md for detailed instructions on using Aspire for local development.
The application requires Azure services to be configured. See the ARCHITECTURE.md file for detailed setup instructions and coding guidelines.
- Upload: Users upload music files through the web interface
- Queue: Files are stored in Azure Blob Storage and a message is queued
- Process: Background importer service picks up the message and processes the file
- Extract: Metadata (artist, title) is extracted from the audio file
- Catalog: Song information is stored in Azure Table Storage
- Browse: Users can view their music library through the web interface
Horscht/
├── Horscht.AppHost/ # .NET Aspire orchestration (local dev)
├── Horscht.ServiceDefaults/ # Shared Aspire service configuration
├── Horscht.Web/ # Blazor WebAssembly host
├── Horscht.Api/ # REST API (Backend for Frontend)
├── Horscht.App/ # Razor components library
├── Horscht.Logic/ # Business logic services
├── Horscht.Contracts/ # Shared interfaces and models
├── Horscht.Importer/ # Background processing service
└── deployment/ # Infrastructure as Code (Bicep)
- ARCHITECTURE.md - Detailed architecture, coding standards, and development guidelines
- ASPIRE.md - .NET Aspire integration for local development
- AUTHENTICATION.md - Azure AD setup and authentication flow between components
- OPENAI.md - Azure OpenAI setup, prerequisites, and configuration
See LICENSE.txt for details.