Clocksiris engineering
Architecture, decisions, and practices supporting a local-first application for Windows and Android.
Engineering details
Clocksiris separates business rules, use cases, persistence, and presentation to maintain a clear, cross-platform foundation that is ready to evolve.
Technical overview
Architecture
Separated responsibilities
The design organizes the domain, use cases, persistence, and presentation with clear boundaries and dependencies directed toward business rules.
Platforms
One foundation for Windows and Android
The application shares most of its experience across desktop and mobile, adapting composition, density, and navigation to each environment.
Quality and continuity
Verifiable local operation
Rules and use cases are validated with automated tests, while local storage, backups, and restoration protect work continuity.
Architecture and boundaries
Cross-platform experience
The presentation layer brings together pages, navigation, and visual state for a consistent Windows and Android experience.
Use cases
Coordination of timers, entries, reports, exports, and backups keeps each flow focused on a product capability.
Domain and business rules
The model concentrates the rules for clients, projects, tasks, time, rates, billing, and settings.
Persistence and local services
The local database, files, exports, backups, and restoration support operations without moving information control to an external service.
Decisions and tradeoffs
| Decision | Reason | Benefit | Tradeoff and review |
|---|---|---|---|
| Local-first over cloud | Prioritize autonomy, offline availability, and data control. | Core tasks do not depend on an external service and information remains on the device. | Automatic synchronization between devices is outside the MVP; review if a real collaboration or mobility need emerges. |
| SQLite and Entity Framework Core | Use an embedded database with a maintainable relational model. | Operational simplicity, local consistency, and controlled evolution of the data model. | The application must explicitly manage initialization, migrations, and file locations. |
| Explicit domain model | Protect concepts such as intervals, duration, rates, currency, and money. | Important rules remain close to the business and do not become scattered across the interface or database. | Requires more initial modeling; review the model as product boundaries change. |
| Rates and history | Retain the applied rate and estimated amount within each entry. | History keeps its meaning even when later rates or settings change. | Entries contain derived data; review the rules if more rate or currency types appear. |
| One MAUI foundation for two platforms | Share most of the application between Windows and Android. | A common visual and navigation foundation with adaptation for each device. | Shared code must be balanced with differences in density, navigation, and interaction. |
Technology stack
Application
Cross-platform foundation
C# and .NET 10 support the application, while .NET MAUI enables a shared experience across Windows and Android. Clean Architecture, CQRS, Vertical Slice Architecture, and MVVM organize responsibilities.
Persistence
Organized local data
SQLite and Entity Framework Core provide embedded persistence and a data model that can evolve in a controlled way.
Experience
State and interaction
CommunityToolkit libraries support observable properties, view models, and shared interface utilities.
Export and quality
Verifiable results
ClosedXML enables Excel files, while the testing strategy uses xUnit, Moq, and Coverlet to validate the core layers.
Quality and operations
Business rules
Unit tests cover intervals, timer transitions, project and task relationships, rate resolution, billing, and settings.
Use cases
Coverage focuses on time tracking, history, clients, projects, tasks, dashboard, reports, exports, settings, and backups.
Current automated scope
The strategy uses xUnit, Moq, and Coverlet for unit tests across the domain and application layers. It does not include automated UI, integration, or end-to-end tests.
Want to return to the product narrative?