ACAL (ACAL Calendar And Layout) is a versatile and highly customizable web application designed to help users stay organized and enjoy their digital content. Display photos, manage your calendar, and integrate music all in one elegant interface.
ACAL provides a modern and adaptable solution for visualizing important events, showcasing personal photo collections, and integrating music playback. Built with Blazor Server, it offers a rich interactive user experience while leveraging the robust capabilities of the .NET ecosystem. Whether you're looking to streamline your daily schedule or create a dynamic digital display, ACAL makes it easy to personalize your space and keep everything important in sight.
- 🎯 Interactive Calendar View: Visualize and manage events with a customizable calendar interface.
- 📸 Personalized Photo Display: Showcase cherished memories and dynamic photo albums.
- 🎶 Integrated Music Player: Seamlessly control and enjoy your favorite tunes with Spotify integration.
- 🎨 Customizable Layouts: Tailor the application's appearance and content arrangement to your preferences.
- 📈 Efficient Organization: Stay on top of your schedule and important activities, ensuring you won't miss a thing.
- ⚙️ Modular Architecture: Built with a clean, project-separated structure for maintainability and extensibility.
Follow these steps to get ACAL up and running on your local machine.
Before you begin, ensure you have the following installed:
- .NET SDK: Version 10.0 or later (for Blazor Server development).
- Git: For cloning the repository.
- Docker Desktop (Optional): If you plan to run the application in a container.
-
Clone the repository
git clone https://github.com/ArizonaGreenTea05/ACAL.git cd ACAL -
Restore dependencies and build the solution Navigate to the root of the cloned repository where
CalendarView.slnxis located.dotnet restore dotnet build
-
Environment setup (if applicable) ACAL uses
appsettings.jsonfor configuration.# Minimal appsettings.json for CalendarView project { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "Design": { "PageLayout": "AgendaWithImageAndBackground", "LongDateFormat": "dddd, dd. MMMM yyyy", "ShortDateFormat": "dd.MM.", "ShortTimeFormat": "HH:mm", "LongMonthFormat": "MMMM", "LongDayFormat": "dddd" }, "LoggingConfig": { "LoggingTemplate": "| {Timestamp:HH:mm:ss:fff} | {Level:u3} | {SourceContext} | {CallerMemberName} | {Message:lj} | {CallerFilePath}:{CallerLineNumber} | {Exception} |", "LoggingPath": "logs/log.debug", "FilteredLoggingPath": "logs/log.information" }, "Calendars": { "RefreshAfterMinutes": 60, "Definitions": { // Colons have to be replaced with pipes, otherwise the json can not be deserialized correctly. So please use "https|//" instead of "https://" "https|//ics.tools/Ferien/nordrhein-westfalen.ics": { "Color": "#FFFD00", "CustomName": "Holidays" } } } }
# Recommended appsettings.json for CalendarView project { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "Design": { "Language": "en", "PictureDirectory": "../images", // a folder mounted to the docker container as "images" "ChangePictureAfterMinutes": 0.2, "BackColorName": "#1c1c1c", "ForeColorName": "LightGray", "EventCardDimmingRatio": 0.3, "SwapPictureAndContentInPortrait": false, "SwapPictureAndContentInLandscape": false, "ShowDate": true, "ShowTime": true, "ShowColorLegend": true, "ShowScrollBar": false, "PageLayout": "AgendaWithImageAndBackground", "LongDateFormat": "dddd, dd. MMMM yyyy", "ShortDateFormat": "dd.MM.", "ShortTimeFormat": "HH:mm", "LongMonthFormat": "MMMM", "LongDayFormat": "dddd", "Designs": { // Here you can specify design choices for specific layouts "AgendaWithBackground": { "CustomBackgroundImageBlur": "2px" }, "CalendarWithBackground": { "CustomBackgroundImageBlur": "2px" } } }, "LoggingConfig": { "LoggingTemplate": "| {Timestamp:HH:mm:ss:fff} | {Level:u3} | {SourceContext} | {CallerMemberName} | {Message:lj} | {CallerFilePath}:{CallerLineNumber} | {Exception} |", "LoggingPath": "logs/log.debug", "FilteredLoggingPath": "logs/log.information" }, "SpotifyServiceLoginData": { "ClientId": "CLIENT_ID", "ClientSecret": "CLIENT_SECRET", "AuthToken": { // You can get this part using the spotify helper attached to each release. You still have to define the CLIENT_ID and CLIENT_SECRET in the helper's SpotifyLoginData.json as well as configure it on https://developer.spotify.com/dashboard "AccessToken": "ACCESS_TOKEN", "RefreshToken": "REFRESH_TOKEN", "TokenType": "Bearer", "ExpiresIn": 3600, "CreatedAt": "2025-12-12T13:35:45.5304927Z" } }, "Calendars": { "RefreshAfterMinutes": 1, "Definitions": { // Colons have to be replaced with pipes, otherwise the json can not be deserialized correctly. So please use "https|//" instead of "https://" "https|//www.example.com/default.ics": { "Color": "#FF0000", "CustomName": "Default" }, "https|//www.example.com/tasks.ics": { "Color": "#00FF00", "CustomName": "Tasks" }, "https|//www.example.com/free-time.ics": { "Color": "#FF8000", "CustomName": "Free time" }, "https|//www.example.com/birthdays.ics": { "Color": "#0000FF", "CustomName": "Birthdays" }, "https|//ics.tools/Ferien/nordrhein-westfalen.ics": { "Color": "#FFFD00", "CustomName": "Holidays" }, "https|//ics.tools/Feiertage/nordrhein-westfalen.ics": { "Color": "#FFFD00", "CustomName": "Holidays" } } } }
-
Start development server To run the main Blazor application, navigate into the
CalendarViewproject directory and run:cd CalendarView dotnet runAlternatively, you can run the solution from the root:
dotnet run --project CalendarView
-
Open your browser The application will typically start on
http://localhost:5000(HTTP) andhttps://localhost:5001(HTTPS) by default. Check your console output for the exact URLs.
ACAL/
├── .dockerignore # Specifies files to ignore when building Docker images
├── .github/ # GitHub configuration
├── .gitignore # Standard .NET Git ignore file
├── CalendarView.Core.Tests/ # Unit/integration tests for core logic
├── CalendarView.Core/ # Core business logic, models, and shared entities
├── CalendarView.Services/ # Service layer for business operations and data access
├── CalendarView.slnf # Visual Studio Solution Filter
├── CalendarView.slnx # Visual Studio Solution file for the entire project
├── CalendarView/ # The main Blazor Server application project
│ ├── CalendarView.Shared/ # Shared Blazor components and layouts and pages
│ │ ├── wwwroot/ # Static assets (CSS, JS, images)
│ │ ├── Components/ # Custom components
│ │ ├── Layout/ # Global layout and styles
│ │ ├── Models/ # Classes needed for the UI
│ │ ├── Pages/ # Page components
│ │ ├── Resources/ # Resources needed for the UI
│ │ ├── Utils/ # Utils needed for the UI
│ │ └── _Imports.razor # Global imports for all components
│ └── CalendarView.Web/ # The main Blazor Server application project
│ ├── appsettings.json # Application configuration
│ └── Program.cs # Application entry point
├── Common.UI.Tests/ # Unit/integration tests for common UI components
├── Common.UI/ # Reusable UI components for Blazor
├── Common/ # Shared utilities, helper classes, cross-cutting concerns
├── Directory.Build.props # Custom MSBuild properties for the solution
├── HelperProjects/ # Auxiliary projects for specific functionalities
├── LICENSE # Project license file (GPL-3.0)
├── README.md # This README file
└── Spotify/ # Project specific to Spotify API integration
Configuration for the application is managed via appsettings.json.
appsettings.json: Contains default production-ready configurations.
The primary commands for development are executed using the .NET CLI:
| Command | Description |
|---|---|
dotnet restore |
Restores NuGet packages for all projects. |
dotnet build |
Builds the entire solution. |
dotnet run --project [Project] |
Runs a specific project (e.g., CalendarView). |
dotnet test |
Runs all tests in the solution. |
dotnet publish |
Publishes the application for deployment. |
- Code Changes: Make changes within the relevant project directories (
CalendarView.Core,CalendarView.Services,CalendarView,Common.UI,Spotify,Common). - Build: Use
dotnet buildto compile your changes. - Run: Use
dotnet run --project CalendarViewto test the application locally. - Test: Execute
dotnet testto ensure all tests pass.
ACAL includes unit and integration tests to ensure reliability and correctness. Test projects are located in CalendarView.Core.Tests and Common.UI.Tests.
To run all tests in the solution:
dotnet testTo create a production-ready build of the CalendarView application:
cd CalendarView
dotnet publish -c Release -o ../publishThis command will compile your application in Release mode and place the publishable output in the publish directory at the root level.
- Docker: A Docker image is automatically pushed to
arizonagreentea0905/acalwhen a new release is created. For deployment the container only requires a folder mapped as "config" that contains theappsettings.jsonfile. - Traditional Hosting: The
dotnet publishoutput can be deployed to various hosting environments, including IIS on Windows, Apache/Nginx on Linux, or cloud services like Azure App Service, AWS Elastic Beanstalk, or shared hosting that supports .NET Core applications.
We welcome contributions to ACAL! If you're interested in improving the project, please follow these guidelines:
- Fork the repository.
- Create a new branch for your feature or bug fix.
git checkout -b feat/your-feature-name
- Make your changes, ensuring they adhere to the project's coding standards.
- Write and run tests to cover your changes.
- Commit your changes with a clear and descriptive commit message.
- Push your branch to your forked repository.
- Open a Pull Request to the
mainbranch of this repository.
Note: If you are interested in contributing to this project on a regular basis and/or improving it in the long term, you can request access to the YouTrack board so that we can collaborate as a team.
The development setup is identical to the Quick Start instructions provided above. Please ensure you have the .NET SDK and any relevant tools installed.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with the powerful .NET platform and Blazor framework.
- Integrates with the Spotify API for music functionalities.
- Inspired by the need for customizable and integrated digital displays.
- 🐛 Issues:
- Community: GitHub Issues
- Developers: YouTrack Issues
- 📧 Contact: ArizonaGreenTea05
⭐ Star this repo if you find it helpful!
Made with ❤️ by ArizonaGreenTea05




