- C# 93.1%
- HTML 6.6%
- CSS 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The catalog DB UniTEKTIME (created at 18:20 UTC) stores Tenant rows.
Updater.cs seeds two tenants in non-RELEASE builds:
company1.com -> UNItekTIME_company1
company2.com -> UNItekTIME_company2
The seed code's CreateTenant helper was hard-coded to LocalDB:
Data Source=(localdb)\\mssqllocaldb;Integrated Security=SSPI;
Pooling=false;Initial Catalog={databaseName}
That meant logging in as company1.com/company2.com would try LocalDB,
not Bryan's 7740-002\SQLDEVELOPER server.
Updated CreateTenant so the seeded ConnectionString matches the same
shape Bryan applied to appsettings.json:
Integrated Security=SSPI;Pooling=false;
Data Source=7740-002\\SQLDEVELOPER;Initial Catalog={databaseName};
Encrypt=True;TrustServerCertificate=True
Per-tenant database names kept exactly as Bryan typed:
UNItekTIME_company1
UNItekTIME_company2
DBA note: existing Tenant rows in the UniTEKTIME catalog DB (if any
were written on the 18:20 UTC run) still hold the old LocalDB
connection strings. Either delete the two seeded Tenant rows in the
catalog DB and let Updater re-seed them on next run, or UPDATE the
ConnectionString column directly.
UNItekTIME.E2E.Tests/Tests.cs still references LocalDB 'Company1' for
ephemeral xUnit databases — left untouched per the verbatim-template
rule until Bryan asks.
|
||
| UNItekTIME.Blazor.Server | ||
| UNItekTIME.E2E.Tests | ||
| UNItekTIME.MiddleTier | ||
| UNItekTIME.Module | ||
| UNItekTIME.WebApi | ||
| UNItekTIME.Win | ||
| .gitattributes | ||
| .gitignore | ||
| LICENSE-NOTES.md | ||
| README.md | ||
| UNItekTIME-Claw.sln | ||
UNItekTIME-Claw
UNItekTIME rebuild on DevExpress XAF v25.2.7 / XPO / .NET 10.
Part of the Unitek Systems Limited R&D portfolio. Modernises the legacy
LiveTecs-derived UNItekTIMEWeb codebase (time, expense and billing tracking)
onto the current DevExpress stack.
See
../ANALYSIS.md(in the OpenClaw workspace) for the full legacy analysis, target architecture (§7A), legal/IP basis (§10) and template inspection (§11). This repository is the target — the new build.
Status
🟡 Initial scaffold. Project structure imported from
UniCORE-v25.2.7-Template0 and renamed to UNItekTIME conventions.
No UNItekTIME-specific business objects or controllers added yet.
Solution layout
UNItekTIME-Claw.sln
├── UNItekTIME.Module/ ← Business objects, controllers, domain logic
│ (platform-agnostic; the heart of the app)
├── UNItekTIME.Blazor.Server/ ← Blazor Server host (PRIMARY UI)
├── UNItekTIME.Win/ ← WinForms host
├── UNItekTIME.WebApi/ ← OData + REST + JWT (for future MAUI mobile,
│ third-party integrations)
├── UNItekTIME.MiddleTier/ ← Optional 3-tier application server
└── UNItekTIME.E2E.Tests/ ← End-to-end test project
This is the full set of projects from the UniCORE-v25.2.7-Template0
scaffold, with no projects dropped — the scaffold is preserved verbatim
except for the rename to UNItekTIME conventions.
Target stack
| Component | Version |
|---|---|
| .NET | 10.0 |
| DevExpress XAF | 25.2.7 |
| ORM | XPO |
| Primary UI | Blazor Server (DevExpress Blazor components) |
| API | OData + REST (DevExpress.ExpressApp.Api.Xpo.All) with Swagger + JWT |
| Database (dev) | SQL Server LocalDB ((localdb)\mssqllocaldb) |
| Database (prod TBD) | SQL Server |
| Background jobs | Hangfire (planned) |
| Mobile (planned) | .NET MAUI sharing Module BOs via WebApi |
DevExpress packages in .csproj files currently float to 25.2.* (the
template default). The first developer build on VS 2026 will resolve them
to 25.2.7 from the licensed DevExpress NuGet feed. A
Directory.Packages.props for explicit pinning can be added in a later
commit if reproducible builds across machines become important.
Build
This repository is built on a Windows developer machine, not in CI (yet). To build locally:
-
Prerequisites
- Windows
- Visual Studio 2026 with the ASP.NET and web development and .NET desktop development workloads
- DevExpress Universal Subscription v25.2.7 installed
(Bryan Fred /
bryan.fred@unitek-systems.com) - .NET 10 SDK
- SQL Server LocalDB (ships with Visual Studio)
-
Open
UNItekTIME-Claw.slnin Visual Studio 2026. -
Restore NuGet packages — VS will pull from your configured DevExpress NuGet feed automatically.
-
Build Solution (
Ctrl+Shift+B). -
Set the startup project to
UNItekTIME.Blazor.Serverand run (F5). The XAF database will be created on first run via theModuleUpdaterinUNItekTIME.Module/DatabaseUpdate/Updater.cs.Default Blazor URL:
https://localhost:5001.
Branch / commit conventions
mainis the integration branch. All work merges here.- Commits authored by the OpenClaw assistant are signed
OpenClaw (Bryan's agent) <openclaw@unitek-systems.com>. - Commits authored by Bryan from VS 2026 use his standard Git identity.
Cross-references
- Full design document:
<workspace>/ANALYSIS.md§7A (target architecture) - Legal / IP basis:
<workspace>/ANALYSIS.md§10 - Template inspection:
<workspace>/ANALYSIS.md§11 - Legacy source (rebranded by Unitek):
<workspace>/legacy/UNItekTIMEWeb/ - Legacy source (original LiveTecs, pristine):
<workspace>/legal/livetecs-original-source/ - Issue tracking sister product:
BryanLogan/UNItekTRAK-Claw(planned) - Shared library (future):
Unitek.Core(extracted from duplication once TIME and TRAK both exist — seeANALYSIS.md§7C)
Licence
See LICENSE-NOTES.md.