A hands-on learning project built with ASP.NET Core Web API and React
This project was created to deepen understanding of building a full-stack CRUD application with authentication, relational data handling, and responsive UI design.
Users can create, manage, complete, or delete tasks securely through JWT-based authentication.
-
Authentication & Registration
- Secure JWT token-based login
- User registration and login flow
- Redirect to dashboard after login
-
Initial Data Seeding
- Preloads priorities, sample tags, and admin users on first launch
-
Task Management
- Create new tasks with:
- Priority (4 predefined levels)
- Due date (future-only selection)
- Name & Description
- 0 or more Tags (custom, user-specific)
- Edit any task field by double-clicking
- Mark task as completed
- Delete task entirely
- Create new tasks with:
-
Completed Tasks View
- View previously completed tasks (read-only)
-
Tag Management
- Create and assign personal tags to tasks
- Tags are user-scoped (not shared)
-
Logout Support
- Secure logout to end session
-
Mobile-Friendly Design
- Fully responsive layout using Tailwind
- Backend: ASP.NET Core Web API (.NET 8+)
- Frontend: React (JavaScript)
- Styling: Tailwind for modern, responsive UI (includes Dark Mode support)
- Auth: JWT Bearer Tokens
- Database: Entity Framework Core with SQL Server
- State Management: React Context API
- Backend is built using controller-based ASP.NET Core Web API
- Follows RESTful conventions for resources like Tasks, Tags, and Auth
- Separation of concerns between controllers, models, and services
- Implement refresh tokens to improve authentication security
- Add logging
- Add email verification during registration for added security
- Add search and filtering options for tasks and tags
- Docker Desktop (includes Docker Engine, CLI, and Compose)
- Alternatively which includes all 3 components
docker compose up --buildWhich:
- Starts a SQL Server 2022 instance
- Build and start the Taskify.API backend
- Build and start the Taskify.Web frontend
- API → http://localhost:7024
- Frontend → http://localhost:3000