Build a full task management system in Bubble with task creation, assignment, deadlines, subtasks, status tracking, and team member views. This tutorial walks you through setting up the database structure, designing the task board UI, creating assignment workflows, and adding notification triggers so your team stays on top of every task.
Overview: Building a Task Management System in Bubble
This tutorial shows you how to build a team task management system entirely in Bubble. You will create Data Types for tasks, subtasks, and team members, design a visual task board with drag-style status columns, wire up assignment and completion workflows, and add email notifications. This guide is ideal for non-technical founders who want a Trello-like tool customized to their team.
Prerequisites
- A Bubble account with a new or existing app
- Basic familiarity with the Bubble visual editor
- Understanding of Data Types and fields in Bubble
- At least two test user accounts for team assignment testing
Step-by-step guide
Create the Task and Subtask Data Types
Create the Task and Subtask Data Types
Go to the Data tab and click Data types. Create a new Data Type called Task with these fields: Title (text), Description (text), Status (text, default 'To Do'), Priority (text), Due Date (date), Assigned To (User), Created By (User), and Subtasks (list of Subtasks). Then create a Subtask Data Type with Title (text), Is Completed (yes/no, default no), and Parent Task (Task). This gives you a relational structure where each task can have multiple subtasks.
Pro tip: Use an Option Set for Status values (To Do, In Progress, Review, Done) instead of a plain text field — it prevents typos and makes filtering easier.
Expected result: Two Data Types (Task and Subtask) appear in your Data tab with all the fields listed above.
Design the task board layout with status columns
Design the task board layout with status columns
Go to the Design tab and create a new page called dashboard. Add a Row container across the top for filters (a Dropdown for priority, a Date picker for due date). Below that, add another Row container with four Group elements side by side — one for each status column (To Do, In Progress, Review, Done). Label each group with a Text element showing the status name. Inside each group, place a Repeating Group with Type of content set to Task and a data source of Do a Search for Tasks where Status equals that column's status value.
Pro tip: Set each column group to a minimum width of 25% so they distribute evenly across the page and collapse responsively on mobile.
Expected result: Four side-by-side columns on your dashboard page, each containing a Repeating Group filtered to one status.
Build the task card inside each Repeating Group
Build the task card inside each Repeating Group
Inside the first Repeating Group's cell, add a Group element. Inside that group, add a Text element for Current cell's Task's Title (bold), another Text for Current cell's Task's Description (truncated to 80 characters), a Text showing Current cell's Task's Assigned To's email, and a small Text for the due date. Add a colored shape or icon for priority level using conditional formatting: when Current cell's Task's Priority is High, set the background to red. Copy this cell design to the other three Repeating Groups.
Expected result: Each task appears as a card showing title, description snippet, assignee, due date, and a priority color indicator.
Create the task creation form and workflow
Create the task creation form and workflow
Add a Button labeled + New Task at the top of the page. Create a workflow: When Button New Task is clicked, show a popup. In the popup, add Input fields for Title, a Multiline Input for Description, a Dropdown for Priority (using the Option Set), a Date/Time Picker for Due Date, and a Searchbox for Assigned To (Type: User). Add a Save button in the popup with this workflow: Create a new thing of type Task, Title equals Input Title's value, Description equals Multiline Description's value, Status equals To Do, Priority equals Dropdown Priority's value, Due Date equals DatePicker's value, Assigned To equals Searchbox User's value, Created By equals Current User. Then add a Reset relevant inputs action and Hide this popup.
Pro tip: Add an Only when condition to the Save button's workflow: Input Title's value is not empty — this prevents blank tasks.
Expected result: Clicking + New Task opens a popup form. Filling it out and clicking Save creates a task that immediately appears in the To Do column.
Add status change workflows for moving tasks between columns
Add status change workflows for moving tasks between columns
Inside each task card, add a Dropdown element for Status populated from the Status Option Set, with the default value set to Current cell's Task's Status. Create a workflow: When Dropdown Status's value is changed, Make changes to a thing, Thing to change is Parent group's Task, Status equals Dropdown Status's value. This lets users move tasks between columns by changing the dropdown. The Repeating Groups will auto-refresh since their data sources are live searches.
Expected result: Changing a task's status dropdown moves the task card from one column to another in real time.
Build the subtask checklist inside the task detail view
Build the subtask checklist inside the task detail view
Create a popup called Popup Task Detail. Set its Type of content to Task. Inside it, display the task's full details. Below those, add a Repeating Group (Type: Subtask, Data source: Parent group's Task's Subtasks). In each cell, add a Checkbox element with a Text element showing Current cell's Subtask's Title. Create a workflow: When Checkbox is checked, Make changes to a thing, set Subtask's Is Completed to yes. Add an Input and Button at the bottom for adding new subtasks: Create a new Subtask, Title equals Input's value, then Make changes to Parent group's Task, add Result of step 1 to Subtasks.
Expected result: The task detail popup shows a list of subtasks with checkboxes. Users can check them off and add new subtasks.
Set up assignment notification emails
Set up assignment notification emails
Go to the Workflow tab. Edit the task creation workflow from Step 4. After the Create a new thing action, add a Send email action: To equals Result of step 1's Assigned To's email, Subject equals 'New task assigned: ' merged with Result of step 1's Title, Body is a message including the task description and a link to the dashboard page. For status changes, add a similar email step in the status change workflow so the assignee is notified when their task moves to a new status. For teams that prefer Slack, consider adding a webhook notification via the API Connector instead.
Pro tip: Use a Backend Workflow for sending emails so the notification is sent reliably even if the user navigates away from the page.
Expected result: When a task is created or its status changes, the assigned team member receives an email notification.
Complete working example
1TASK MANAGEMENT SYSTEM — WORKFLOW SUMMARY2==========================================34DATA TYPES:5 Task6 - Title (text)7 - Description (text)8 - Status (Option Set: To Do, In Progress, Review, Done)9 - Priority (Option Set: Low, Medium, High)10 - Due Date (date)11 - Assigned To (User)12 - Created By (User)13 - Subtasks (list of Subtask)1415 Subtask16 - Title (text)17 - Is Completed (yes/no, default: no)18 - Parent Task (Task)1920PAGE: dashboard21 Layout: Row (filters) + Row (4 status columns)22 Each column = Group + Repeating Group23 Data source: Search for Tasks (Status = column status)2425WORKFLOW 1: Create Task26 Trigger: Button + New Task is clicked27 Actions:28 1. Show Popup New Task29 2. (In popup) Create a new thing → Task30 3. Send email to Assigned To31 4. Reset relevant inputs32 5. Hide popup3334WORKFLOW 2: Change Status35 Trigger: Dropdown Status value is changed36 Actions:37 1. Make changes to thing → Parent group's Task38 Status = Dropdown's value39 2. Send email to Task's Assigned To4041WORKFLOW 3: Add Subtask42 Trigger: Button Add Subtask is clicked43 Actions:44 1. Create a new thing → Subtask45 2. Make changes to Parent group's Task46 → add Result of step 1 to Subtasks4748WORKFLOW 4: Toggle Subtask Complete49 Trigger: Checkbox is checked/unchecked50 Actions:51 1. Make changes to thing → Current cell's Subtask52 Is Completed = This Checkbox is checkedCommon mistakes when building task management in Bubble
Why it's a problem: Using text fields instead of Option Sets for Status and Priority
How to avoid: Create Option Sets for Status and Priority values, then use them in dropdowns and search constraints for consistent data
Why it's a problem: Searching for tasks inside each Repeating Group cell
How to avoid: Store related data (like subtask count) as a field on the Task itself, or use parent group references instead of nested searches
Why it's a problem: Forgetting to handle the case when Assigned To is empty
How to avoid: Add an Only when condition to the Send email action: Result of step 1's Assigned To is not empty
Why it's a problem: Not setting default Status on task creation
How to avoid: Always set Status to your first column value (e.g., To Do) in the Create a new thing action
Best practices
- Use Option Sets for task statuses and priorities to prevent data inconsistency
- Pre-compute subtask completion counts as a number field on the Task to avoid expensive nested searches
- Add Privacy Rules so users can only see tasks assigned to them or created by them
- Set up database indexes on Status and Assigned To fields for faster search performance
- Use the Debugger to step through creation workflows and verify each field is populated correctly
- Paginate Repeating Groups to 15-20 tasks per column to keep page load times fast
- Add an Only when condition to every email action so it does not fire for empty assignees
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I'm building a task management system in Bubble.io with Kanban columns (To Do, In Progress, Review, Done), task assignment to team members, subtasks with checkboxes, and email notifications. Can you help me structure the data types and workflows?
Create a task management page with four status columns showing task cards. Each card should display the task title, assignee, due date, and priority. Include a popup for creating new tasks and a subtask checklist.
Frequently asked questions
Can I add drag-and-drop to move tasks between columns?
Bubble does not natively support drag-and-drop between Repeating Groups. Use a dropdown status changer on each card, or install a third-party drag-and-drop plugin from the Bubble marketplace.
How do I filter tasks by multiple criteria at once?
Add constraint parameters to your Repeating Group's data source search. Use the Ignore empty constraints checkbox so that empty filters are skipped, letting users filter by any combination of priority, assignee, and date range.
Will this work with large teams?
Yes, but optimize by paginating Repeating Groups and adding Privacy Rules so each user only loads tasks relevant to them. For teams over 50 people, consider caching search results in custom states.
How do I track task completion percentage?
Add a number field called Subtask Count and Completed Count to the Task Data Type. Update these fields whenever a subtask is added or toggled. Display the percentage as Completed Count / Subtask Count * 100.
Can RapidDev help build a more complex project management tool?
Yes. RapidDev specializes in building custom no-code applications and can help you add advanced features like Gantt charts, time tracking, resource allocation, and reporting dashboards tailored to your team's needs.
How do I add due date reminders?
Create a Backend Workflow that runs daily using a recursive schedule. It searches for tasks where Due Date equals Current date/time rounded down to day plus 1 day, then sends a reminder email to each task's Assigned To.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation