Skip to content
View hlib-zinchenko's full-sized avatar

Block or report hlib-zinchenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
hlib-zinchenko/README.md

Hi, I'm Hlib 👋

Senior .NET backend engineer from Kyiv, Ukraine, with 10+ years of building web products from scratch to production, most recently as a backend lead and startup co-founder.

  • Co-founder & lead engineer of a pre-launch consumer fintech product (private repo): a .NET 10 modular monolith plus web and admin apps, built with an agentic Claude Code workflow (architecture guides, glossary and ADRs as agent context, custom skills, build-breaking guardrails including the libraries below)
  • Back at Developex part-time as backend lead on an AI chat for a B2B client, using MCP, plus the frontend
  • Before that, backend lead on a restaurant POS platform at Developex: took over a stalled Ruby-to-.NET rewrite, re-architected it into a modular monolith, delivered multi-tenancy, Auth0 and delivery-aggregator integrations, and hired for the team
  • 5+ years as a lead .NET engineer at Dedicated Lab, a software studio serving US clients
  • Into DDD, modular monoliths, CQRS and clean, boring-in-a-good-way architecture
  • Most of my work lives in private client repos, so this profile is quieter than my commit history

Open source

The libraries below grew out of patterns I enforced on production projects.

Hlibz.EntityFrameworkCore.ModelRules NuGet NuGet Downloads

Your team's conventions, enforced on the EF Core model. If an entity breaks one, the model fails to build, at startup or in a unit test:

  • 14 rules for shadow properties, snake_case naming, decimal precision, string lengths, nullability, enum storage, schemas, query filters, delete behaviors, redundant indexes and identifier lengths.
  • Aggregate boundaries. Roots refer to each other by key only, never delete each other by cascade, and each has a concurrency token.
  • EF Core 8, 9 and 10, provider-neutral. It's tested on PostgreSQL, SQL Server, SQLite and MySQL, and against real databases in Docker.
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
    configurationBuilder.UseModelRules(rules => rules
        .NoShadowProperties()
        .NamesFollow(NamingStyle.SnakeCase)
        .DecimalsHavePrecision()
        .StringsHaveMaxLength()
        .NoCascadeDeleteAcrossAggregates<IAggregateRoot>());
}

Hlibz.TypeRules.Analyzers NuGet NuGet Downloads

Roslyn analyzers for the shape of a type, based on what it inherits or implements. Architecture tests catch these when the tests run; TypeRules catches them in the editor, while you type:

  • Rule sets in .editorconfig. Endpoints are internal sealed and live in an Endpoints namespace, every handler has its own IFooHandler, entities have no public setters and refer to each other by id, value objects are immutable and compare by value.
  • 10 rules with code fixes that are only offered when applying them can't break the build, with Fix All and dotnet format analyzers support.
  • Opt-in. Nothing is checked until you configure a rule set, and invalid configuration is reported instead of half-applied.
[*.cs]
typerules.endpoints.match = T:MyApp.Api.IEndpoint
typerules.endpoints.max_accessibility = internal
typerules.endpoints.require_sealed = true
typerules.endpoints.namespace_pattern = **.Endpoints

Hlibz.Redoc NuGet NuGet Downloads

ReDoc API docs for ASP.NET Core, the way I wanted them. Use it as an adapter for the package you already have, or on its own:

  • Adapters for Swashbuckle and Redoc.AspNetCore. A dark theme and a document picker for the ReDoc page you already serve: two lines added to your UseReDoc call.
  • A standalone ReDoc 3 host, for when someone else's middleware isn't enough: authorization per document, a pre-compressed bundle with real cache headers, a strict CSP with nothing inline, no third-party requests, AOT-compatible.
  • Several OpenAPI documents with a dropdown between them, like Swagger UI's definition selector, which ReDoc doesn't have on any version.
app.MapOpenApi();
app.MapReDocDocuments(
    [new ReDocDocument("public", "Public API"), new ReDocDocument("admin", "Admin API")]);

Hlibz.McpDocs.AspNetCore NuGet NuGet Downloads

A ReDoc-style docs page for an MCP server hosted in ASP.NET Core, generated from the tools, prompts and resources you already registered. It started as a companion to the MCP server I build at work:

  • What a client sees, for people. Every tool, prompt and resource with parameter trees, annotations and example calls, generated from the same registrations as tools/list. A test diffs the two.
  • Connect snippets for Claude Code, Claude Desktop, VS Code, Cursor and Goose, and [Authorize] is honoured, so a viewer only sees what their MCP client would see.
  • Exports for agents (catalog.json, catalog.md, llms.txt, server.json) and a snapshot API that fails the build when the contract changes, like an OpenAPI diff.
app.MapMcp("/mcp");
app.MapMcpDocs("/mcp-docs");

dotnet-guardrails

A strict, copy-able .NET setup where the rules fail the build instead of waiting for code review. It's a template repo, not a package:

  • Everything in one copy-paste: .NET 10 with nullable and AnalysisMode=All, warnings as errors, StyleCop, SonarAnalyzer, explicit types, and banned APIs (no DateTime.Now, inject a clock).
  • Type and model rules: TypeRules for the shape of types, and ModelRules for EF Core.
  • Written for AI agents too. A CLAUDE.md carries the same rules, so an agent that drifts gets a compiler error, not a lecture.

Side projects

Karbka (app, repo) Offline-first flashcards app that installs from the browser to a phone, tablet or computer, with no App Store or account, and the cards never leave the device. I built it for my partner after no existing app fit how she studies, and I keep improving it from her feedback. I chose a PWA over a native app to skip the developer fee and review cycle. Svelte 5, TypeScript, IndexedDB, with tests, CI and tag-based releases, plus an anonymous, opt-out usage counter on AWS Lambda and DynamoDB. Built with Claude Code.

Tech I work with

  • Architecture: DDD, CQRS, Clean Architecture, modular monoliths, REPR, event-driven, multi-tenancy
  • Backend: C#, .NET, ASP.NET Core, EF Core, MassTransit, MediatR, FluentValidation, Hangfire, Quartz, SignalR, Serilog, Roslyn analyzers
  • Data: PostgreSQL, MS SQL, MySQL
  • Cloud & DevOps: AWS (EC2, ECS, RDS, S3, SES, SNS, CloudWatch), Docker, GitLab CI, GitHub Actions, Azure DevOps
  • Integrations: Auth0, Stripe, Stream (delivery aggregators)
  • Testing: xUnit, Moq, Testcontainers
  • Frontend (logic side): Vue.js, TypeScript
  • AI: Claude Code (agentic workflows, custom skills), LLM integration, prompt design

Find me

My Home Page · LinkedIn

Pinned Loading

  1. Hlibz.EntityFrameworkCore.ModelRules Hlibz.EntityFrameworkCore.ModelRules Public

    Enforce conventions on your EF Core model: fail at startup or in a unit test when an entity has shadow properties, off-convention column names, decimals without precision, and more.

    C#

  2. dotnet-guardrails dotnet-guardrails Public

    Strict, copy-able .NET setup: analyzers, StyleCop/Sonar, type-shape rules, banned APIs - fail the build, for humans and AI agents

    C#

  3. Hlibz.TypeRules.Analyzers Hlibz.TypeRules.Analyzers Public

    Roslyn analyzers that enforce the shape of a type based on what it inherits or implements, configured in .editorconfig

    C#

  4. Hlibz.McpDocs.AspNetCore Hlibz.McpDocs.AspNetCore Public

    Read-only, ReDoc-style documentation page for MCP servers hosted in ASP.NET Core, generated from your existing tool, prompt and resource registrations.

    C#

  5. Hlibz.Redoc Hlibz.Redoc Public

    ReDoc for ASP.NET Core: a dark theme and document picker for Redoc.AspNetCore and Swashbuckle's ReDoc, plus a standalone ReDoc 3 host with per-document authorization.

    C#