> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Project members

> Add and remove people on a TimeTracker project, read the roster table with rates and job titles, and understand what project membership actually grants.

Project membership is who works on **this** project. It is separate from workspace membership and separate from groups.

## Why project membership matters

Being on a project does three things:

1. It lets the person log time against the project's tasks.
2. It makes the project **visible** to them if their role is scoped to their own projects.
3. It puts their face in the **Group** column on the project list.

| Concept                | What it is                                                   |
| ---------------------- | ------------------------------------------------------------ |
| **Workspace member**   | Someone with an account in the workspace                     |
| **Group**              | A standing team of people – see [/team/groups](/team/groups) |
| **Project membership** | Who works on one project                                     |
| **Project manager**    | The single person accountable for the project                |

A group grants no project. Someone in the design group still has to be added to a project to work on it.

## The roster table

Open the project, then **Settings → Group**.

| Column           | Always shown?                                         |
| ---------------- | ----------------------------------------------------- |
| **Member**       | Yes – avatar, name and email                          |
| **Job title**    | Yes. A dash when it is not set or you cannot read it. |
| **Role**         | Yes – their workspace role                            |
| **Default rate** | Only with `rate.viewBilling`                          |
| **Cost**         | Only with `rate.viewCost`                             |
| **Project rate** | Only with `rate.viewBilling`                          |
| **Remove**       | Only with `project.manage`                            |

<Note>
  The **Cost** column is omitted entirely for anyone without cost visibility – header included. The figures were never sent to your browser, so there is nothing to reveal.
</Note>

## Add someone to a project

<Steps>
  <Step title="Open the project">
    Click it in **Projects**.
  </Step>

  <Step title="Go to Settings → Group">
    The roster table loads.
  </Step>

  <Step title="Click Add member">
    A search popover opens listing workspace members who are not on the project yet.
  </Step>

  <Step title="Search and click a person">
    They are added immediately. You see **"Added to the project."**
  </Step>
</Steps>

Only real workspace members can be added. The server validates every id, so a project can never hold someone who is not in the workspace.

| Popover message                        | Meaning                         |
| -------------------------------------- | ------------------------------- |
| "Everyone is already on this project." | Every workspace member is on it |
| "No matching members."                 | Your search matched nobody      |

## Remove someone from a project

<Steps>
  <Step title="Find their row">
    In **Settings → Group**.
  </Step>

  <Step title="Click the X at the end of the row">
    A confirmation modal opens: *"Remove Sarah Lin from this project?"*
  </Step>

  <Step title="Read what it says">
    "They lose access to this project's tasks and can no longer log time against it. Time they already tracked is kept, and you can add them back at any time."
  </Step>

  <Step title="Click Remove from project">
    You see **"Removed from the project."**
  </Step>
</Steps>

<Warning>
  This is project scoped. It never deactivates their workspace account. To remove someone from the workspace entirely, see [/team/remove-a-member](/team/remove-a-member).
</Warning>

### What removal keeps

| Thing                          | Kept?                                      |
| ------------------------------ | ------------------------------------------ |
| Time they already tracked      | Yes, in full                               |
| Their timesheets and approvals | Yes                                        |
| Their tasks – assignment       | The task stays; reassign it if you need to |
| Their access to the project    | No – removed at once                       |
| Their workspace account        | Untouched                                  |

Because it is fully reversible, this is a plain confirmation rather than a type-to-confirm gate.

## Notifications

Adding or removing someone publishes a notification to that person. You are never notified about your own click.

| Change          | Who hears about it |
| --------------- | ------------------ |
| Someone added   | That person        |
| Someone removed | That person        |

See [/notifications/overview](/notifications/overview).

## The project manager

The manager is set in **Settings → General**, not here. One person, or **No manager**.

The manager always counts as on the project for visibility, even if they are not in the member list.

<Warning>
  A project with no manager and no members is invisible to every scoped role. When you create a project without choosing a manager, you become the manager for exactly this reason.
</Warning>

## Rates on the roster

Three rate columns, three different meanings.

| Column           | What it is                                      | Editable here?                                 |
| ---------------- | ----------------------------------------------- | ---------------------------------------------- |
| **Default rate** | The person's workspace billing rate             | No – edit at **Settings → Rates**              |
| **Cost**         | The person's workspace cost rate                | No. There is no project or task cost override. |
| **Project rate** | This project's billing override for that person | Yes, with `rate.manage`                        |

**Project rate** reads **Inherits** when there is no override – meaning the chain falls through to the person's own rate.

Editing it writes a new rate effective **today**. Past time keeps the rate it was priced at. See [/projects/project-rates](/projects/project-rates).

## Example

Priya staffs **Website Redesign**:

1. She opens **Settings → Group** and clicks **Add member**.
2. She adds Sarah Lin and Jonas Bergman.
3. The roster now shows Sarah at a `100 USD` default rate and Jonas at `120 USD`.
4. Bluebird negotiated a discount on copywriting, so Priya adds Ana Ferreira and sets Ana's **Project rate** to `70` instead of her usual `80`.
5. Later, Jonas moves to the Harbor Logistics work. Priya clicks the **X** on his row and confirms. His 46 tracked hours stay on the project and still count toward the budget.

## Permissions

| Action                                    | Capability                                          |
| ----------------------------------------- | --------------------------------------------------- |
| See the roster                            | `project.manage` (Settings is a management surface) |
| Add a member                              | `project.manage`                                    |
| Remove a member                           | `project.manage`                                    |
| See **Default rate** and **Project rate** | `rate.viewBilling`                                  |
| See **Cost**                              | `rate.viewCost`                                     |
| Edit **Project rate**                     | `rate.manage`                                       |

Without `project.manage` the **Add member** button and the row **X** do not render.

## Common questions

<AccordionGroup>
  <Accordion title="Does removing someone delete their time?">
    No. Every hour they logged stays on the project and keeps counting toward the budget and the invoice.
  </Accordion>

  <Accordion title="Can someone log time on a project they are not a member of?">
    Project membership is what makes the project reachable for a scoped role. Widen the role's supervision scope if you want broader access – see [/concepts/supervision-scope](/concepts/supervision-scope).
  </Accordion>

  <Accordion title="Do I add a whole group to a project?">
    Not in one click. Add each person. A group is a standing team; project membership is per project.
  </Accordion>

  <Accordion title="Why can I see the roster but no rates?">
    Rates are a separate capability. Without `rate.viewBilling` the money columns are absent and the rest of the table works normally.
  </Accordion>

  <Accordion title="Can I set a project cost rate?">
    No. Cost belongs to the person and applies everywhere. Edit it at **Settings → Rates**.
  </Accordion>

  <Accordion title="What happens to their assigned tasks?">
    Tasks stay where they are. Reassign them from the task list if the work needs a new owner.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                                 | Cause                                                      | Fix                                            |
| ------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------- |
| No **Add member** button                                | You lack `project.manage`                                  | Ask an admin or the project manager            |
| "We couldn't update the team. You may lack permission." | The server refused                                         | Confirm your capability, then reload and retry |
| Someone is missing from the picker                      | They are already on the project, or not a workspace member | Check the roster, or invite them first         |
| The **Cost** column disappeared                         | Your role lost `rate.viewCost`                             | Ask an admin                                   |
| A member cannot see the project                         | They are on it but their role is scoped narrowly           | Check the role's supervision scope             |
| Removing a member did nothing visible                   | The change lands immediately                               | Reload if the table looks stale                |

## Related guides

<CardGroup cols={2}>
  <Card title="Project settings" icon="sliders" href="/projects/project-settings">
    The rest of the Settings tab.
  </Card>

  <Card title="Project rates" icon="dollar-sign" href="/projects/project-rates">
    Per-person overrides on this project.
  </Card>

  <Card title="Project visibility" icon="eye" href="/projects/project-visibility">
    Why membership decides who sees the project.
  </Card>

  <Card title="Groups" icon="users" href="/team/groups">
    Standing teams, not project rosters.
  </Card>

  <Card title="Remove a member" icon="user-minus" href="/team/remove-a-member">
    Removing someone from the workspace.
  </Card>
</CardGroup>
