Timekeeper is a modern rebuild of a legacy Timelog system in a new cross-platform .NET 10 solution.
The new architecture keeps the original business shape of the old app:
- employees and payroll profiles
- time entry capture
- payroll preview and pay history
- tax rule configuration with effective dates and source tracking
- UI shell: Blazor Web App on .NET 10
- API: ASP.NET Core Web API
- Persistence: PostgreSQL via EF Core and Npgsql
- Desktop delivery: self-contained .NET publish with installer scripts for Windows, MSIX, macOS, Debian, and RPM
The seeded tax rules in this first pass are intentionally marked NeedsRefresh.
That is by design. The old FoxPro tax defaults in Timelog are useful for migration and engine design, but they should not be treated as current tax law until replaced with validated current tables and rates.
Start PostgreSQL:
docker compose up -dBuild:
dotnet build .\Timekeeper.slnxRun the web shell:
dotnet run --project .\Timekeeper.WebRun the API:
dotnet run --project .\Timekeeper.ApiThe default development connection string uses:
- host:
localhost - database:
timekeeper_dev - username:
postgres - password:
postgres
Cross-platform publish helper:
.\publish-timekeeper.ps1 -Runtime win-x64MSIX package:
.\packaging\windows\msix\package-msix.ps1 -PublishDir .\artifacts\win-x64 -Version 0.1.0 -OutputDir .\artifacts\installersSee docs/publish-guide.md for all packaging commands.
Timekeeper.Domain: entities and enumsTimekeeper.Application: queries, DTOs, and tax engineTimekeeper.Infrastructure: PostgreSQL, EF Core, seeding, and service implementationsTimekeeper.Api: API endpointsTimekeeper.Web: desktop-delivered UI shellTimekeeper.Tests: unit testspackaging: installer and brand asset scriptsdocs: architecture and publishing notes