Production-grade Project Management Platform
Real-time collaboration · Clean Architecture · CQRS · Domain-Driven Design
TaskFlow is a full-featured SaaS platform for engineering team management, built to demonstrate production-ready .NET architecture.
It combines:
- Kanban boards
- Sprint planning
- Real-time collaboration via SignalR
- GitHub integration
All implemented with industry-standard patterns used in commercial .NET projects.
Built as a portfolio project to showcase mid-to-senior level .NET engineering: Clean Architecture, CQRS, Domain Events, policy-based authorization, background jobs, and integration testing with real infrastructure.
| Feature | Description |
|---|---|
| 🗂 Kanban Boards | Drag-and-drop task management with configurable columns |
| ⚡ Real-time Updates | All board members see changes instantly via SignalR WebSockets |
| 🏃 Sprint Planning | Backlog management, sprint lifecycle, burn-down charts |
| 🔐 Role-based Access | Owner / Admin / Member / Viewer per workspace |
| 🔗 GitHub Integration | Merging a PR with #TASK-{id} automatically moves task to Done |
| 💬 Comments & @mentions | Real-time comments with email notifications |
| ⏰ Overdue Alerts | Daily Hangfire job notifies assignees |
| 🔑 JWT Auth | Access token + refresh token rotation |
TaskFlow follows Clean Architecture with strict separation of concerns.
Dependencies point inward — Domain has zero external dependencies.
┌──────────────────────────────────────────────┐
│ TaskFlow.API │
│ Controllers · Middleware · JWT · Swagger │
└───────────────────────┬──────────────────────┘
│
┌───────────────────────▼──────────────────────┐
│ TaskFlow.Application │
│ CQRS · Handlers · DTOs · Validation │
└──────────────┬───────────────┬───────────────┘
│ │
┌──────────────▼───────┐ ┌─────▼──────────────┐
│ TaskFlow.Domain │ │ TaskFlow.Infrastructure │
│ Entities · Events │ │ EF Core · SignalR │
│ Zero dependencies │ │ Hangfire · MailKit │
└──────────────────────┘ └────────────────────┘
| Pattern | Implementation | Why |
|---|---|---|
| CQRS | MediatR Commands / Queries | Separation of concerns |
| Domain Events | MediatR INotification |
Decoupled side-effects |
| Hybrid ORM | EF Core + Dapper | Performance + flexibility |
| Auth Policies | IAuthorizationHandler |
Fine-grained RBAC |
| Pipeline Behavior | ValidationBehavior | Centralized validation |
| Layer | Technology |
|---|---|
| Runtime | .NET 8 · C# 12 |
| Framework | ASP.NET Core Web API |
| ORM | EF Core 8 |
| Micro ORM | Dapper |
| Real-time | SignalR |
| Messaging | MediatR |
| Validation | FluentValidation |
| Auth | JWT |
| Jobs | Hangfire |
| MailKit |
| Component | Technology |
|---|---|
| Database | SQL Server 2022 |
| Containers | Docker |
| Docs | Swagger |
| Type | Tools |
|---|---|
| Unit | xUnit · Moq |
| Integration | TestContainers |
TaskFlow.sln
├── src/
│ ├── TaskFlow.Domain/ # Zero dependencies
│ │ ├── Entities/ # Workspace, Project, Board, TaskItem...
│ │ ├── Enums/ # WorkspaceRole, TaskPriority...
│ │ └── Events/ # TaskMovedEvent, CommentAddedEvent...
│ │
│ ├── TaskFlow.Application/ # Business logic
│ │ ├── Workspaces/Commands|Queries
│ │ ├── Tasks/Commands|Queries
│ │ ├── Sprints/Commands|Queries
│ │ ├── Comments/Commands|Queries
│ │ ├── Notifications/Handlers/ # SignalR + ActivityLog + Mention handlers
│ │ └── Common/Behaviors/ # ValidationBehavior
│ │
│ ├── TaskFlow.Infrastructure/ # External concerns
│ │ ├── Persistence/ # AppDbContext + Fluent API configs
│ │ ├── RealTime/ # BoardHub (SignalR)
│ │ ├── BackgroundJobs/ # OverdueTasksJob + MentionEmailJob
│ │ └── Auth/ # JwtTokenService
│ │
│ └── TaskFlow.API/ # Entry point
│ ├── Controllers/ # Auth, Workspaces, Boards, Tasks...
│ ├── Authorization/ # WorkspaceRequirement + Handler
│ └── Program.cs
│
└── tests/
├── TaskFlow.UnitTests/ # Handlers in isolation (InMemory DB)
└── TaskFlow.IntegrationTests/ # Full HTTP stack (TestContainers)
Users ──────────────── WorkspaceMembers ──── Workspaces
│ │ │
│ (Role) Projects
│ │
Comments ──── TaskItems ──── Columns ──── Boards
│
Sprints ──── ActivityLogs
- .NET 8 SDK
- Docker
git clone https://github.com/korolslava/TaskFlow.git
cd TaskFlow
docker-compose up --builddocker-compose up db -d
dotnet ef database update \
--project src/TaskFlow.Infrastructure \
--startup-project src/TaskFlow.API
dotnet run --project src/TaskFlow.APIdotnet testPOST /auth/registerPOST /auth/loginPOST /auth/refresh
POST /workspacesGET /workspaces/{id}POST /workspaces/{id}/members
POST /projects/{id}/boardsGET /projects/{id}/boards/{boardId}POST /boards/{id}/tasksPATCH /boards/{id}/tasks/{taskId}/move
POST /projects/{id}/sprintsPOST /projects/{id}/sprints/{id}/startGET /projects/{id}/sprints/{id}/burndown
connection.invoke("JoinBoard", boardId);
connection.on("TaskMoved", () => {});
connection.on("TaskCreated", () => {});
connection.on("CommentAdded", () => {});Built with ❤️ using ASP.NET Core 8