This document provides a high-level introduction to ClassIsland, a cross-platform class schedule display and management application designed for classroom multimedia screens. This overview covers the application's purpose, core concepts, architectural structure, and major subsystems.
For detailed information about specific subsystems:
ClassIsland is a desktop application that displays class schedule information on screens in educational environments. The application name is inspired by iOS Dynamic Island functionality, reflecting its approach to presenting dynamic, contextual information.
Primary Use Case: Display real-time class schedule information, current lesson details, upcoming class notifications, and supplementary information (weather, time, countdowns) on classroom multimedia displays.
Target Platforms:
Runtime Requirements: .NET 8 Desktop Runtime
Sources: README.md1-140
ClassIsland organizes functionality around three fundamental concepts:
| Concept | Description | Primary Model Classes |
|---|---|---|
| Profile | Complete schedule configuration including class plans, time layouts, and subject definitions | Profile, ClassPlan, TimeLayout, Subject |
| Components | Modular UI widgets that display information (time, weather, countdowns, etc.) | IComponent, ComponentSettings |
| Notifications | Event-driven alerts for class transitions and important events | NotificationRequest, INotificationProvider |
A Profile represents a complete schedule configuration. Key elements:
The active profile determines what ClassIsland displays at any given moment. Multiple profiles can be created for different class groups or semesters.
Components are pluggable UI widgets rendered in the main window. Built-in components include:
DateTimeComponent: Current date and time displayWeatherComponent: Weather information and forecastsCountDownComponent: Countdown to specific datesClassListComponent: Today's class schedule listComponents can be arranged in multiple lines, support drag-and-drop positioning in Edit Mode, and can be extended via plugins.
The notification architecture follows a provider-consumer model:
INotificationProvider) detect events and create notification requestsINotificationConsumer) display notifications in various waysSources: README.md32-70
Technology Stack Overview
Sources: README.md15-16 doc/Dependencies.md1-34 ClassIsland/ClassIsland.csproj
ClassIsland follows a layered service-oriented architecture with dependency injection as the integration mechanism. The application is organized into six major architectural layers:
ClassIsland Layered Architecture
Each layer has specific responsibilities:
Sources: High-level diagrams provided, ClassIsland/App.xaml.cs
Application Startup Flow
The startup process follows these phases:
MutexHelper ensures single instance operationApp.OnStartup() builds the IAppHost container with all servicesSettingsService and ProfileService load persisted statePluginService scans and loads plugins with dependency resolutionLessonsService start background operationsMainWindow is shown and components are renderedSources: ClassIsland/App.xaml.cs ClassIsland/Helpers/MutexHelper.cs
The IAppHost container registers services in App.ConfigureServices():
| Service Category | Example Services | Registration Lifetime |
|---|---|---|
| Configuration | SettingsService, ProfileService | Singleton |
| Core Business Logic | LessonsService, NotificationHostService, AutomationService | Singleton |
| UI Services | ThemeService, ComponentsService | Singleton |
| Platform Integration | ExactTimeService, WeatherService, SpeechService | Singleton |
| Extension Support | PluginService, PluginMarketService | Singleton |
| ViewModels | MainViewModel, SettingsViewModel | Transient/Scoped |
Services are resolved via constructor injection, enabling testability and loose coupling.
Sources: ClassIsland/App.xaml.cs
Settings System (SettingsService + Settings model):
ObservableRecipient for reactive UI updatesSettings.json on property changesProfile System (IProfileService + Profile model):
ClassPlan, TimeLayout, Subject collectionsFor detailed documentation: Settings and Configuration System, Profile System
LessonsService is the core time-tracking service:
Responsibilities:
TimeLayout definitionsClassPlan gridKey Properties:
CurrentTimeLayoutItem: Current time point (class, break, none)CurrentLesson: Current subject being taughtOnClass, OnBreakingTime: Boolean state flagsEvent Flow:
TimeLayout → Time Point Calculation → Current Lesson Resolution → Event Firing → NotificationHostService
For detailed documentation: Lessons Service and Time Tracking
Sources: ClassIsland/Services/LessonsService.cs
The notification system implements a provider-consumer architecture:
NotificationHostService:
NotificationRequest objectsINotificationConsumer instancesBuilt-in Providers:
ClassNotificationProvider: Class transition notifications (prepare, start, end)WeatherNotificationProvider: Weather alertsAfterSchoolNotificationProvider: End-of-day notificationsPrimary Consumer:
MainWindowLine: Displays notifications with mask/overlay content phasesRippleEffect, audio, speech, topmost lockFor detailed documentation: Notification System
Sources: ClassIsland/Services/NotificationHostService.cs ClassIsland/Services/NotificationProviders/
Plugin Architecture:
PluginLoadContext (custom AssemblyLoadContext)IComponent: Custom UI componentsINotificationProvider: Custom notification sourcesIAction: Custom automation actionsISpeechService: Custom TTS providersISplashService: Custom startup screensPlugin Marketplace:
PluginMarketService downloads index from configurable mirrors.cipx files with MD5 verificationFor detailed documentation: Plugin System
Sources: ClassIsland/Services/PluginService.cs ClassIsland/Services/PluginMarketService.cs
Components are modular UI widgets rendered in MainWindowLine containers:
Component Lifecycle:
ComponentsService.RegisterComponent() adds component typeComponentsService creates instances with ComponentSettingsMainWindowLine.ComponentsPanelContainer Components:
GroupContainerComponent: Groups multiple componentsTabContainerComponent: Tabs between component setsCarouselContainerComponent: Auto-rotates component displayFor detailed documentation: Component System
Sources: ClassIsland/Services/ComponentsService.cs ClassIsland/Controls/MainWindowLine.xaml.cs
The automation system enables event-driven workflows:
Architecture:
ITrigger): Define when automation runs (time-based, event-based)IAction): Define what operations execute (open file, show notification, restart app)IRuleset): Conditional logic controlling executionBuilt-in Actions:
For detailed documentation: Automation System
Sources: ClassIsland/Services/AutomationService.cs
Data Flow Through ClassIsland
The data flow follows a unidirectional reactive pattern:
This architecture eliminates explicit save operations for most configuration changes.
Sources: High-level diagram 2 provided, ClassIsland/Services/SettingsService.cs ClassIsland/Services/ProfileService.cs
ClassIsland uses a sophisticated multi-platform CI/CD pipeline:
Build Matrix:
Distribution Channels:
Code Signing:
Update System:
UpdateService checks PDC on application startupFor detailed documentation: Build and Deployment
Sources: README.md279-288 .github/workflows/build_release.yml
ClassIsland is a comprehensive class schedule management application built on .NET 8 with WPF. Its architecture emphasizes:
The application serves educational environments by providing real-time schedule information, timely notifications, and extensive customization capabilities while maintaining platform compatibility and update reliability.
For specific implementation details, refer to the detailed documentation pages listed at the beginning of this overview.
Sources: All files and diagrams provided
Refresh this wiki