A modern task management system built with .NET 10 and Clean Architecture principles.
Taskify is a robust task management API that helps teams organize their work efficiently. Built with industry best practices including:
- Clean Architecture
- Repository Pattern with Unit of Work
- JWT Authentication & Authorization
- Result Pattern for error handling
- Entity Framework Core
- ASP.NET Core Identity
- Team Management - Create and manage teams
- Task Organization - Organize tasks with todo lists
- Secure Authentication - JWT-based authentication with role-based authorization
- User Management - Complete user registration and management system
- Role-Based Access - Admin, Moderator, and User roles
- Framework: .NET 10
- Database: SQL Server with Entity Framework Core
- Authentication: ASP.NET Core Identity + JWT
- Architecture: Clean Architecture (Domain, Application, Infrastructure, API)
Taskify/
│
├── Taskify.Api/ # Presentation Layer
│ ├── Controllers/ # API Controllers
│ ├── Filters/ # Action Filters
│ └── Program.cs # Application Entry Poin
│
├── Taskify.Application/ # Application Layer
│ ├── DTOs/ # Data Transfer Objects
│ ├── Services/ # Business Logic Services
│ ├── ResultPattern/ # Result Pattern Implementation
│ └── Helpers/ # Utility Classes
│
├── Taskify.Domain/ # Domain Layer
│ ├── Entities/ # Domain Entities
│ ├── Repositories/ # Repository Interfaces
│ └── Const/ # Domain Constants
│
├── Taskify.InfraStructure/ # Infrastructure Layer
│ ├── Contexts/ # Database Context
│ ├── Repositories/ # Repository Implementations
│ └── Migrations/ # EF Core Migrations
Before you begin, ensure you have the following installed:
- .NET 10 SDK
- SQL Server (LocalDB, Express, or Developer Edition)
- Visual Studio 2026 or VS Code
- Git
-
Clone the repository
git clone https://github.com/MohamedOsamaa74/Taskify -
Update the database connection string
Open
Taskify.Api/appsettings.jsonand update the connection string:{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=TaskifyDb;Trusted_Connection=True;" } } -
Apply database migrations
dotnet ef database update --project Taskify.Infrastructure --startup-project Taskify.Api -
Configure JWT settings (Optional)
Update JWT settings in
appsettings.json:{ "JWT": { "Key": "YourSuperSecretKeyHere_MinimumLength32Characters", "Issuer": "TaskifyAPI", "Audience": "TaskifyUsers", "DurationInMinutes": 60 } } -
Run the application
-
dotnet run --project Taskify.Api -
Access the API
The API will be available at:
- HTTPS:
https://localhost:7011 - HTTP:
http://localhost:5011 - Scalar UI:
https://localhost:7011/scalar/v1
- HTTPS:
Once the application is running, you can interact with the API using tools like Postman, scalar or through a frontend client.
This project uses GitHub Actions for continuous integration. Every push to master or develop branches automatically:
- Restores NuGet packages
- Builds the solution in Release mode
- Runs all unit tests (when available)
- Publishes deployment artifacts
- Uploads build artifacts for download
Check the current build status: GitHub Actions
After each successful build, you can download the deployment-ready artifacts from the Actions tab.
The CI workflow is defined in .github/workflows/ci.yml and runs on:
- Push to
masterordevelopbranches - Pull requests targeting
master
- Repository Pattern - Data access abstraction
- Unit of Work - Transaction management
- Result Pattern - Standardized error handling
- Dependency Injection - Loose coupling
- JWT Authentication - Stateless authentication
- DTO Pattern - Data transfer objects
- JWT Bearer token authentication
- Role-based authorization (Admin, Moderator, User)
- ASP.NET Core Identity for user management
- Password hashing and validation
- Refresh token mechanism
This project is licensed under the MIT License - see the LICENSE file for details.
Mohamed Osama
- GitHub: @MohamedOsamaa74
- LinkedIn: MohamedOsama
Contributions, issues, and feature requests are welcome!
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
If you have any questions or need help, please open an issue in the Issues section.
⭐️ If you like this project, please give it a star! ⭐️
Made with ❤️ by Mohamed Osama