# How to build a task assignment feature in Bubble.io: Step-by-Step Guide

- Tool: Bubble
- Difficulty: Beginner
- Time required: 15-20 min
- Compatibility: All Bubble plans
- Last updated: March 2026

## TL;DR

A task assignment feature in Bubble uses a Task data type with an assigned_to field linked to the User type, a SearchBox or Dropdown for selecting assignees, and workflows that update the assignment and notify the selected team member. This tutorial covers building the assignment UI, notification system, and filtered task views so team members see only their tasks.

## Overview: Building a Task Assignment Feature in Bubble

This tutorial shows how to add task assignment functionality to your Bubble app. You will create a task data model with assignee tracking, build a UI for selecting and changing assignees, set up notification workflows, and create filtered views so each team member sees their own tasks. This is a core feature for project management tools, team collaboration apps, and any workflow-based application.

## Before you start

- A Bubble app with user authentication set up
- A basic Task or Project data type already created
- Multiple user accounts for testing assignments
- Basic familiarity with Bubble Repeating Groups and Workflows

## Step-by-step guide

### 1. Set up the Task data type with assignment fields

Go to the Data tab → Data types. Create or modify your Task data type with these fields: title (text), description (text), assigned_to (User), assigned_by (User), status (text: To Do, In Progress, Done), priority (text: Low, Medium, High), due_date (date), project (if you have a Project type), and assigned_date (date). The assigned_to field is the key — it links directly to the User data type, allowing you to reference the assignee's name, email, and profile throughout your app.

> Pro tip: Add a list field called watchers (list of Users) if you want additional team members to receive notifications about task updates without being the primary assignee.

**Expected result:** A Task data type exists with assigned_to and assigned_by fields linking to the User type.

### 2. Build the assignee selector UI

On your task creation or detail page, add a SearchBox element. Set its Type to User and configure it to search on the display_name or email field. Alternatively, use a Dropdown element with choices from Do a search for Users (you may want to filter this to only show team members in the same project or organization). Style the SearchBox to show the user's name and optionally their profile picture. Place it next to the task title or in a task detail panel. Label it clearly as Assignee or Assign to.

**Expected result:** A searchable field lets users pick a team member to assign the task to.

### 3. Create the assignment workflow

Go to the Workflow tab. Create a workflow for when the assignee is selected. If you are creating a new task, include the assignment in the Create a new Task action: set assigned_to = SearchBox Assignee's value, assigned_by = Current User, assigned_date = Current date/time. If you are reassigning an existing task, create a workflow for When SearchBox Assignee's value is changed: Make changes to Current Page's Task → assigned_to = SearchBox Assignee's value, assigned_by = Current User, assigned_date = Current date/time. Add an Only when condition to prevent setting assigned_to to empty accidentally.

**Expected result:** Tasks are created with an assignee or can be reassigned by changing the SearchBox value.

### 4. Set up assignment notifications

After the assignment action, add a notification step. Option A: Create a Notification data type with fields recipient (User), message (text), is_read (yes/no), task (Task), and created_date (date). In the assignment workflow, add Create a new Notification with recipient = the assigned user, message = Current User's name has assigned you a task: Task's title. Option B: Send an email using Bubble's Send email action or SendGrid plugin with the task details. Display unread notifications using a bell icon with a count badge showing Do a search for Notifications where recipient = Current User AND is_read = no :count.

> Pro tip: For reassignments, also notify the previously assigned user that the task has been reassigned away from them.

**Expected result:** Assigned users receive a notification (in-app or email) when a task is assigned to them.

### 5. Create filtered task views by assignee

On your dashboard or task board page, add a Repeating Group for tasks. Set the Data source to Do a search for Tasks where assigned_to = Current User. This shows only the current user's tasks. Add filter options above the Repeating Group: a Dropdown for status filter, a Dropdown for priority filter, and a toggle for Show all tasks vs My tasks only. For the My tasks toggle, switch the data source constraint between assigned_to = Current User and no constraint. Sort by due_date ascending so urgent tasks appear first.

**Expected result:** Each team member sees their assigned tasks by default, with options to filter by status, priority, or view all tasks.

### 6. Add reassignment and unassignment capability

In the task detail view, make the assignee SearchBox editable. When the value changes, run the reassignment workflow (Make changes to Task → assigned_to = new value). Add a Clear/Unassign button that sets assigned_to to empty (use Make changes to Task and leave assigned_to blank). Show the assignment history by creating an AssignmentLog data type with task, from_user, to_user, and timestamp. Each time an assignment changes, create a log entry. Display the log in the task detail panel for audit purposes.

**Expected result:** Tasks can be reassigned or unassigned, and a history of assignment changes is maintained.

## Complete code example

File: `Workflow summary`

```text
TASK ASSIGNMENT WORKFLOW SUMMARY
=================================

DATA TYPES:
  Task
    - title (text)
    - description (text)
    - assigned_to (User)
    - assigned_by (User)
    - assigned_date (date)
    - status (text: To Do / In Progress / Done)
    - priority (text: Low / Medium / High)
    - due_date (date)
    - project (Project, optional)

  Notification
    - recipient (User)
    - message (text)
    - is_read (yes/no, default no)
    - task (Task)
    - type (text: assignment / reassignment / completion)

  AssignmentLog
    - task (Task)
    - from_user (User)
    - to_user (User)
    - changed_by (User)
    - timestamp (date)

WORKFLOW 1: Create Task with Assignment
  Event: Button Create Task clicked
  Action 1: Create a new Task
    title, description, priority, due_date = form values
    assigned_to = SearchBox Assignee's value
    assigned_by = Current User
    assigned_date = Current date/time
    status = To Do
  Action 2: Create a new Notification
    recipient = SearchBox Assignee's value
    message = "[Current User's name] assigned you: [title]"
    task = Result of step 1

WORKFLOW 2: Reassign Task
  Event: SearchBox Assignee value is changed
  Only when: SearchBox value is not empty
  Action 1: Create AssignmentLog
    from_user = Current Page's Task's assigned_to
    to_user = SearchBox Assignee's value
    changed_by = Current User
  Action 2: Make changes to Current Page's Task
    assigned_to = SearchBox Assignee's value
    assigned_by = Current User
    assigned_date = Current date/time
  Action 3: Create Notification for new assignee
  Action 4: Create Notification for old assignee

WORKFLOW 3: Unassign Task
  Event: Button Unassign clicked
  Action: Make changes to Current Page's Task
    assigned_to = (empty)

DASHBOARD:
  My Tasks: Search Tasks where assigned_to = Current User
  All Tasks: Search Tasks (no assignee constraint)
  Sort: due_date ascending
  Filters: status, priority, assignee
```

## Common mistakes

- **Using a text field instead of a User field for assigned_to** — A text field stores only the name or email string, losing the relationship to the User record. You cannot access the assignee's profile, send notifications, or set Privacy Rules. Fix: Always use a field of type User for assigned_to so you maintain the full database relationship.
- **Not handling the case where assigned_to is empty** — Unassigned tasks can cause errors in workflows that reference the assignee's properties like name or email Fix: Add Only when conditions on workflows that reference the assignee. On display elements, use conditional visibility to show Unassigned when the field is empty.
- **Sending notifications without checking if the assignee actually changed** — If the SearchBox fires on every interaction, the same user could receive duplicate assignment notifications Fix: Add an Only when condition: SearchBox Assignee's value is not Current Page's Task's assigned_to before sending notifications.

## Best practices

- Use a User-type field for assigned_to to maintain full database relationships
- Notify both the new assignee and the previous assignee when tasks are reassigned
- Show an Unassigned state clearly in the UI when no one is assigned to a task
- Filter dashboard views by assigned_to = Current User as the default view
- Log all assignment changes for accountability and audit trails
- Use SearchBox instead of Dropdown for teams with more than 10-15 members
- Sort tasks by due date and priority to surface urgent items first
- Add bulk assignment capability for assigning multiple tasks at once

## Frequently asked questions

### Can I assign a task to multiple users?

Yes. Change the assigned_to field from User to list of Users. Modify the SearchBox to allow multiple selections or add an Add Assignee button that adds users to the list one by one.

### How do I show the assignee's profile picture next to the task?

In the Repeating Group cell, add an Image element. Set its source to Current cell's Task's assigned_to's profile_image. Add a conditional to show a default avatar when the field is empty.

### Can assignees change the task status?

Yes. Add a Status Dropdown in the task cell or detail view. Create a workflow that updates the status when changed. Add an Only when condition to allow only the assignee or the task creator to change status.

### How do I prevent users from assigning tasks to people outside their team?

Filter the SearchBox data source to only show users who belong to the same team or project. Use a constraint like team = Current User's team in the search.

### Should I use email or in-app notifications for assignments?

Use both. In-app notifications provide immediate visibility within the app, while email notifications reach users who are not currently logged in. Let users configure their notification preferences.

### Can RapidDev help build advanced project management features?

Yes. RapidDev can help implement complex features like Kanban boards with drag-and-drop, Gantt charts, workload balancing, automated task routing, and integrations with tools like Slack and email.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/build-a-task-assignment-feature-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/build-a-task-assignment-feature-in-bubble
