.NET engineer. I build line-of-business systems and care about the parts that decide whether they survive contact with a second developer: clear layering, dependencies that point one way, and code you can test without standing up half the world.
Backend β C# / .NET 10, ASP.NET Core, Entity Framework Core, Dapper, xUnit Frontend β React, Next.js, TypeScript, Tailwind CSS Platform β Azure, Microsoft Entra ID, SQL Server, GitHub Actions
- Clean Architecture in practice, not as ceremony. Domain references nothing; the application layer defines the interfaces it needs and infrastructure implements them. Small projects stay small β layering should earn its keep.
- Testable by construction. Clocks and current-user context are injected, not read from statics, so a test can pin an instant instead of sleeping.
- Fail loudly. Typed exceptions translated at the boundary, rather than a
catchthat returnsnulland hides the bug.
| DevVault | A code-snippet vault, and the clearest example of how I lay a project out β four projects, a value object that refuses to be invalid, one handler per use case, 19 unit tests. |
| EmployeeManagementApp | Employee and project management over ASP.NET Core, with bulk-data console tooling. |
| InvoiceImport | CSV-to-SQL Server importer β small, layered, and covered by tests where the parsing rules are easy to get wrong. |
| dotnet-review-rules | Shared code-review rules for my .NET repositories, plus a pre-commit guard against committing credentials. |
- Portfolio β https://my-portfolio-five-lyart-52.vercel.app/
- GitHub β @Menzi-Thami