A simple task-management web app (Notion / Monday / ToDoist style) with Workspaces, Projects, Tasks, Subtasks, assignee support, and task comments.
Built as an MVP with ASP.NET Core 10 Blazor Web App (server-rendered), Entity Framework Core, and ASP.NET Core Identity. Designed to run locally with SQLite and deploy to SmarterASP.NET (or any IIS / SQL Server host).
- Auth — email + password sign-in, plus Google OAuth (when configured).
- Workspaces — multiple shared workspaces per user.
- Members — invite other users to a workspace by their email.
- Projects — create / edit / delete projects inside a workspace.
- Tasks — title, description, status, priority, due date, assignee.
- Subtasks — nest tasks (one level).
- Comments — discussion thread on each task.
- Task View — flat list of your open tasks across workspaces.
- Mobile-friendly — responsive off-canvas sidebar; works in any modern phone browser.
- ASP.NET Core 10 (Blazor Web App, Server render mode)
- Entity Framework Core 10
- ASP.NET Core Identity (cookie auth) + Google OAuth
- SQL Server (production / hosted) — switchable to SQLite (local dev) via configuration
- Bootstrap 5
Tasker/
Tasker.sln
src/
Tasker.Web/ # The single web project
Data/ # AppDbContext + entities
Services/ # WorkspaceService, ProjectService, TaskService, CommentService
Components/
Pages/ # Razor pages
Layout/ # MainLayout, NavMenu
Pages/Account/ # ExternalLogin Razor Pages (Google OAuth callback)
Migrations/ # EF Core migrations
wwwroot/ # Static files (CSS, JS)
dotnet run --project src/Tasker.WebThe app boots on https://localhost:5001 (or http://localhost:5000) by default, creates a tasker.db SQLite file in src/Tasker.Web/, and runs migrations on startup.
src/Tasker.Web/appsettings.json keys:
| Key | Purpose | Default |
|---|---|---|
DatabaseProvider |
Sqlite or SqlServer |
Sqlite |
ConnectionStrings:DefaultConnection |
SQLite file path | Data Source=tasker.db |
ConnectionStrings:SqlServerConnection |
SQL Server connection string | (set per environment) |
Authentication:Google:ClientId |
Google OAuth client ID | empty |
Authentication:Google:ClientSecret |
Google OAuth client secret | empty |
When the Google keys are empty, the "Continue with Google" button is hidden. When populated, Google sign-in is wired through /account/external-login.
- Set
DatabaseProvidertoSqlServerinappsettings.json(or useappsettings.Production.json). - Update
ConnectionStrings:SqlServerConnectionto your host's SQL Server connection string. - On first run, EF migrations create the schema automatically. If migrations need to be applied manually:
dotnet ef database update --project src/Tasker.Web --startup-project src/Tasker.Web- Visit https://console.cloud.google.com/ and create a project.
- APIs & Services → Credentials → Create OAuth client ID (type: Web application).
- Authorized redirect URI:
https://<your-host>/account/external-login?returnUrl=/(the callback handled by/account/external-login?handler=Callback). - Copy the Client ID + Client Secret into
appsettings.json(or environment variables).
SmarterASP.NET supports .NET 8+ on Windows with SQL Server. To deploy:
- Build the project in Release mode:
dotnet publish src/Tasker.Web -c Release -o publish
- Upload the contents of
publish/via FTP / Web Deploy to your SmarterASP.NET site root. - Create a SQL Server database in the SmarterASP.NET control panel and update the
SqlServerConnectionconnection string. - Set
DatabaseProvider=SqlServerfor that environment. - Open the deployed site once so EF migrations create the schema.
For GitHub deploy, the build command is dotnet publish src/Tasker.Web -c Release -o publish.
- Kanban board view with drag-drop
- Real-time updates (SignalR)
- Notifications / activity feed
- Rich-text descriptions
- Attachments
- Workspace-level admin (transfer ownership, remove member)
- PWA offline mode
Private / MVP.