I’ve pushed a new major update to TaskHub Shared modules, pet project where I experiment with architecture, observability, and reusable patterns for .NET microservices.
What’s new
Restructured Shared Kernel
The project is now split into small, focused modules:
I reworked the internal command pipeline to better understand how these systems work under the hood.
It now supports:
- Automatic handler/behavior discovery.
- pre/post behaviors.
- Ordered execution.
- Transformers.
- Minimal dependency injection glue.
Basically a lightweight MediatR-style pipeline, but built manually so I could learn from it.
3. Observability additions
One of my goals with TaskHub is to get practical experience with tracing and metrics.
The project now includes:
- ActivitySource-based spans.
- Command/Status tagging.
- Prometheus counters.
- OpenTelemetry wiring.
- Ontegration with Tempo/Loki/Prometheus setups.
Nothing extreme — just hands-on experimentation.
4. Domain layer cleanup
I refined the basic DDD building blocks:
- ValueObjects (with JSON and EF converters)
- Aggregates.
- Domain events.
- Domain-level exception handling.
Just trying to keep the domain model neat.
5. Service bootstrapper
I extracted all repetitive service setup (Swagger, EF, Identity, Redis, Commands, OTEL, migrations, etc.) into a simple builder to avoid duplicating the same boilerplate across services.
andrey-serdyuk•29m ago
What’s new
Restructured Shared Kernel
The project is now split into small, focused modules:
- Commands (CQRS-style pipeline).
- Domain (Aggregates, ValueObjects, DomainEvents).
- Persistence abstractions.
- Authorization abstractions.
- GeoCoding (Nominatim client).
- Observability.
- EF Core infrastructure
- Redis, Swagger, Versioning, RateLimiter, etc.
Nothing special — just cleaner boundaries.
2. Updated Command Pipeline
I reworked the internal command pipeline to better understand how these systems work under the hood.
It now supports:
- Automatic handler/behavior discovery.
- pre/post behaviors.
- Ordered execution.
- Transformers.
- Minimal dependency injection glue.
Basically a lightweight MediatR-style pipeline, but built manually so I could learn from it.
3. Observability additions
One of my goals with TaskHub is to get practical experience with tracing and metrics.
The project now includes:
- ActivitySource-based spans.
- Command/Status tagging.
- Prometheus counters.
- OpenTelemetry wiring.
- Ontegration with Tempo/Loki/Prometheus setups.
Nothing extreme — just hands-on experimentation.
4. Domain layer cleanup
I refined the basic DDD building blocks:
- ValueObjects (with JSON and EF converters)
- Aggregates.
- Domain events.
- Domain-level exception handling.
Just trying to keep the domain model neat.
5. Service bootstrapper
I extracted all repetitive service setup (Swagger, EF, Identity, Redis, Commands, OTEL, migrations, etc.) into a simple builder to avoid duplicating the same boilerplate across services.
Why I’m doing this
Not to "create a framework", but to:
- Organize my own knowledge.
- Test new architectural ideas.
- Build reusable patterns.
- Learn more about observability.
- Improve the quality of my service foundations.
- Get better as a software engineer overall.
TaskHub is simply my personal lab.
GitHub
https://github.com/TaskHub-Server/TaskHub.Shared
Feedback welcome
If anyone finds the architecture interesting or has suggestions, I’m happy to discuss.