Job Card SaaS
A multi-tenant white-label platform where each tenant company runs a branded job-card system on its own domain.
- 4
- Clean-architecture layers
- 2
- SSO providers per tenant
- Row-level
- Tenant isolation
- Solo, ground-up rebuild of a university team project (.NET MAUI) as a white-label SaaS, structured as a clean architecture across Domain, Application, Infrastructure and Web layers.
- Implemented row-level tenant isolation using EF Core global query filters, with the active tenant resolved server-side from the request hostname only — never from anything the browser can set.
- Built authentication end to end: local accounts with roles, guards and password reset, plus per-tenant SSO through Microsoft Entra ID and Google via OIDC, verified by a full round-trip integration test against a mock identity provider.
- Developed the super-admin control plane used to manage tenants end to end, covering tenant CRUD, domain mapping and per-tenant SSO configuration.
- Wrote unit and integration tests with xUnit and Testcontainers against real MySQL, kept every secret out of source control, and enforced Central Package Management with pinned versions.
- C#
- .NET 10
- Blazor Server
- EF Core
- MySQL
- Docker
- xUnit
acme.example.com/jobs
Inbound request · hostname is the only tenant signal
?tenant= · cookie · form field
Tenant resolver
Server-side only · hostname → tenant id
EF Core global query filter
Applied to every entity, not per query
Acme
Visible
Beta
Filtered out
Gamma
Filtered out





